#python #unit-testing #pytest
#python #модульное тестирование #pytest
Вопрос:
У меня есть модульные тесты, для которых требуются тестовые данные. Эти тестовые данные загружаются и имеют прилично большой размер файла.
@pytest.fixture
def large_data_file():
large_data = download_some_data('some_token')
return large_data
# Perform tests with input data
def test_foo(large_data_file): pass
def test_bar(large_data_file): pass
def test_baz(large_data_file): pass
# ... and so on
Я не хочу загружать эти данные более одного раза. Его следует загружать только один раз и передавать всем тестам, которые этого требуют. Вызывает ли pytest large_data_file
один раз и использует ли его для каждого модульного теста, который использует этот прибор, или он вызывает large_data_file
каждый раз?
В unittest
этом случае вы просто загружаете данные для всех тестов один раз в setUpClass
методе.
Я бы предпочел не просто иметь глобальный large_data_file = download_some_data('some_token')
в этом скрипте py. Я хотел бы знать, как справиться с этим вариантом использования с помощью Pytest.
Ответ №1:
Вызывает ли pytest
large_data_file
один раз и использует ли его для каждого модульного теста, который использует этот прибор, или он вызываетlarge_data_file
каждый раз?
Это зависит от области применения прибора. Область по умолчанию function
, поэтому в вашем примере large_data_file
будет оцениваться три раза. Если вы расширяете область, например
@pytest.fixture(scope="session")
def large_data_file():
...
прибор будет оцениваться один раз за тестовый сеанс, а результат будет кэшироваться и повторно использоваться во всех зависимых тестах. Для получения более подробной информации ознакомьтесь с разделом Область применения: совместное использование приборов между классами, модулями, пакетами или сеансом в pytest
документах.