Можно параметризовать тестовые функции из аргументов командной строки. Возможно подключение прибора к классу. Я хочу объединить эти две вещи, так что каждый класс получает параметризованные аргументы, которые присваиваются инструменту внутри класса.Динамически параметризующие приборы уровня класса с pytest
(по существу, за аргумент командной строки мне нужно выполнить одну очень дорогостоящую операцию, а затем выполнить множество дешевых, быстрых тестов против результатов этой операции, и я бы предпочел не повторять дорогостоящую операцию для каждого дешевого теста, так что я хотел бы сохранить его)
Другими словами, я ищу эквивалент pytest_generate_tests (metafunc), который будет работать для динамического параметрирования прибора, а не тестовой функции ,
Одна вещь, которую я уже пробовал необычно, - это чтение параметров запроса и установка тех через крюк pytest_generate_tests.
conftest.py:
def pytest_generate_tests(metafunc):
metafunc.parametrize("result", [
(1,0),(1,2)
])
test_thing.py:
class TestThingy:
@pytest.fixture(scope="class")
def result(self, request):
a,b=request.param
return a+b
#@pytest.mark.parametrize("result", [(0, 1), (1, 2)])
def test_one(self, result):
assert result!=2
Выполнение этого теста вызывает следующее сообщение об ошибке, чтобы поднять (обратите внимание, что тест побежал хорошо, когда я попытался его без conftest крючком и закомментированного линии незакомментированной):
@pytest.fixture(scope="class")
def result(self, request):
a,b=request.param
AttributeError: 'SubRequest' object has no attribute 'param'
Меня также интересует любой другой альтернативный способ добиться того же результата.
Было бы здорово, если бы команда py.test могла взлететь. Документы не совсем понятны в этом вопросе. –