Я хочу запустить коллекцию тестовых функций с различными светильниками для каждого запуска. Как правило, решения, предлагаемые для переполнения стека, документации и сообщений в блогах, относятся к двум категориям. Один из них параметризующее прибор:Pytest: работает несколько раз с различными входными данными
@pytest.fixture(params=list_of_cases)
def some_case(request):
return request.param
Другой по телефону metafunc.parametrize для того, чтобы произвести несколько тестов:
def pytest_generate_tests(metafunc):
metafunc.parametrize('some_case', list_of_cases)
Проблема с обоих подходов является порядок, в котором выполняются случаи , В основном он запускает каждую тестовую функцию с каждым параметром вместо того, чтобы проходить через все тестовые функции для заданного параметра, а затем продолжить со следующим параметром. Это проблема, когда некоторые из моих приборов являются сравнительно дорогими вызовами базы данных.
Чтобы проиллюстрировать это, предположим, что dataframe_x - это еще одно приспособление, которое принадлежит case_x. Pytest делает это
test_01(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_1)
test_50(dataframe_2)
вместо
test_01(dataframe_1)
...
test_50(dataframe_1)
test_01(dataframe_2)
...
test_50(dataframe_2)
В результате я буду получать каждый набор данных из БД в 50 раз, а не только один раз. Поскольку я могу определить область видимости как «сеанс», «модуль» или «функция», я не мог понять, как сгруппировать мои тесты, чтобы они выполнялись вместе в кусках.
Есть ли способ структурировать мои тесты, чтобы я мог выполнять все мои тестовые функции последовательно для каждого набора данных?
Почему вы хотите, чтобы ваши тесты выполнялись в кусках? Требуются ли ваши тесты для выполнения в порядке? Если это так, я думаю, что это не идеально, потому что каждый тест должен работать независимо. – Cedric
Они независимы, но представьте, что каждый размер данных очень велик: я хочу загрузить его, выполнить все тесты, выбросить его, загрузить следующий и т. Д. Это делает мне более интуитивный смысл, в отличие от загрузки его несколько раз , или хранения всех данных в памяти на протяжении всего теста. – instant