pytest, можно ли получить значение другого прибора в тестах pytest_generate_tests?

#python #pytest

Вопрос:

В Pytest я задаюсь вопросом, могу ли я динамически генерировать параметризованные аргументы на основе значения другого прибора, используя pytest_generate_tests

Что я хочу сделать, так это:

 import pytest

def pytest_generate_tests(metafunc, request):
   if "param" in metafunc.fixturenames and "file" in metafunc.fixturenames:
       fn = request.getfixturevalue("file")
       parameters = read_json(fn)
       metafunc.parameterize(argnames="param", argvalues=parameters)



@pytest.mark.parameterize("file", ('a.json', 'b.json'),)
def test_something(file, param, cleanup_fixture):
    output = transfer_func(param)
    assert output == True
 

Это не сработает, так как я не могу использовать request в крючке? Я не знаю, как я могу получить ценность file внутри pytest_generate_tests

Причина, по которой я хочу этого добиться, заключается в том, что параметры моих обращений определены в разных файлах json. Пока я могу загрузить файл в тест и просто выполнить итерацию. По сути, он объединяет несколько случаев в один, что не идеально, особенно если у меня есть приспособление для области функций, которое нуждается в некоторой очистке.

Пожалуйста, посоветуйтесь.

Комментарии:

1. светильники выполняются после тестов pytest_generate_tests. (посмотрите правильный порядок). Из того, что я понял из примера использования, вы можете напрямую параметризовать приборы, чтобы любой тест, использующий прибор, был параметризован. Добавьте код и более подробную информацию, если это возможно.