У меня есть некоторые данные в a_file
, с которыми мне нужно параметризовать мой прибор.Поэтому я написал вспомогательную функцию, которая возвращает a_list
, заполненную данными из файла.Теперь я могу легко параметризовать свой прибор с помощью @pytest.fixture(params=a_list)
.Кажется прямо, не так ли?
Проблема здесь в том, что a_file
генерируется другим прибором, и кажется, что pytest вызывает помощник, который полагается на этот файл, прежде чем файл действительно будет создан прибором.Из-за этого поведения FileNotFoundError
повышается.
Мой код выглядит следующим образом:
def helper_returning_list_from_a_file():
with open("a_file") as a_file:
a_list = a_file.readlines()
return a_list
@pytest.fixture(scope="session")
def create_file_fixture(depends_on_other_fixtures):
# create "a_file" here
@pytest.fixture(params=helper_returning_list_from_a_file())
def a_fixture_which_is_parametrized_with_data_from_a_file(request):
return request.param
def test_which_uses(a_fixture_which_is_parametrized_with_data_from_a_file):
assert False
Добавление: create_file_fixture
должен быть приспособлениеми не может быть преобразован в обычную функцию, потому что это зависит от других приборов.
То, что я уже пробовал
Очевидное решение - убедиться, что файл создан доисполняется вспомогательная функция, которой нужен файл.
Поэтому я
добавил зависимость для create_file_fixture
в прибор, который должен параметризоваться следующим образом:
@pytest.fixture(params=helper_returning_list_from_a_file())
def a_fixture_which_is_parametrized_with_data_from_a_file(create_file_fixture, request):
return request.param
добавил флаг autouse
в прибор, который создает файл следующим образом:
@pytest.fixture(scope="session", autouse=True)
def create_file_fixture:
# create "a_file" here
, но pytest по-прежнему сначала вызывает вспомогательные функциичто приводит к той же ошибке, как описано выше.
Вопрос
Как я могу убедиться, что create_file_fixture
выполняется первым?
Возможное решение
Я думаю, что возможным решением было бы также преобразование вспомогательной функции в прибор.Таким образом, я мог бы легко добавить зависимость, которая диктовала бы pytest, в каком порядке должны выполняться приборы.Это выглядело бы так:
@pytest.fixture()
def fixture_returning_list_from_a_file(create_file_fixture):
with open("a_file") as a_file:
a_list = a_file.readlines()
return a_list
Это решило бы мою проблему, поскольку файл не существует, но это также не работает для меня, потому что это приводит к другой проблеме, которую я описал здесь: параметризация теста со списком, возвращаемым из прибора .