Передача переменного количества аргументов в тестовые случаи с использованием фиксации или параметризации pytest - PullRequest
0 голосов
/ 31 марта 2019
  • У меня ниже требования.
    1. Мне нужно передать только первый набор параметров ((url, header, "auth")) для проверки функции "test_1"
    2. Мне нужно передать два набора параметров ((url, header, "auth"), (url, header, "bad_request")) для проверки функции "test_2"
    3. Мне нужно передать весь набор параметров ((url, header, "auth"), (url, header, "bad_request"), (url, header, "unauth"), (url + "/url_doesnt_exist", header, "invalid_request")) для проверки функции "test_3"

В настоящее время каждый тестовый набор будет выполняться 4 раза, поэтому всего будет выполнено 12 тестовых примеров. Но я хочу, чтобы «test_1» запускался только один раз, «test_2» должен запускаться 2 раза, «test_3» должен запускаться 4 раза, поэтому должно выполняться всего 7 тестовых случаев.

Я знаю, что мы можем использовать параметризацию, как показано ниже, но здесь нам нужно определить тестовые данные для каждого тестового случая.

  • @pytest.mark.parametrize ("url, header, request_type", test_data1)
  • @pytest.mark.parametrize ("url, header, request_type", test_data2)
  • @pytest.mark.parametrize ("url, header, request_type", test_data3)

Есть ли лучший способ передать переменное число аргументов в каждый тест?

test_data = [
(url, header, "auth"), 
(url, header, "bad_request"),
(url, header, "unauth"),
(url + "/url_doesnt_exist", header, "invalid_request")
]

@pytest.fixture(params=test_data)
def my_fixture(request):
    return request.param


def test_1(my_fixture):
    print(my_fixture[0])
    print(my_fixture[1])
    print(my_fixture[2])

def test_2(my_fixture):
    print(my_fixture[0])
    print(my_fixture[1])
    print(my_fixture[2])

def test_3(my_fixture):
    print(my_fixture[0])
    print(my_fixture[1])
    print(my_fixture[2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...