Я изучаю фикстуры в py.test, и у меня есть вопрос, аналогичный тому, который был задан более года назад: Могут ли параметры, переданные в фикстуру pytest, передаваться как переменная? Мне интересно, возможно ли теперь в более новых версиях py.test каким-то образом выберите подмножество параметров, запрашивающих функцию фиксации.
Допустим, у меня есть простая функция и тест:
def func(a, b):
return (a - b)**3 + 10
@pytest.fixture(scope="module", params=[(7,11), (7,0), (3,0)])
def fix_func(request):
output = func(*request.param)
return output
def test_1(fix_func):
assert fix_func <= 500
А теперь я бы хотел добавить второй тест только для param = (7,11):
def test_2(fix_func):
assert fix_func > 0
Если выбор подмножества параметров по-прежнему невозможен, другим способом решения этой проблемы может быть перемещение параметров из фикстуры в тесты, например:
@pytest.fixture(scope="module")
def fix_func(request, param):
output = func(*param)
return output
@pytest.mark.parametrize("arg", [(7,11), (7,0), (3,0)])
def test_1(fix_func(arg)):
assert fix_func <= 500
@pytest.mark.parametrize("arg", [(7,11)])
def test_2(fix_func(arg)):
assert fix_func > 0
Но этот пример тоже не работает. Есть ли другой короткий/"элегантный" способ использования разных наборов фикстур для разных тестов (написание только одной функции фикстуры)?