Есть ли способ вложить параметры параметрирования в pytest? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть пример, где у меня есть, по сути, вложенный список приборов, т. Е. Ниже fn2 зависит от значения прибора fn1 и не известен заранее. Каждая из этих двух функций должна вызывать сервер для получения списка параметров.

@pytest.fixture(params=generated_list())
def fn1(request):
    return request.param

@pytest.fixture(params=generates_list_2(fn1))
def fn2(request):
    return request.param

def test_fn(fn2):
    assert fn2 == 0

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Хотя это не очень хороший ответ, это сработает. Он использует ловушку в процедуре генерации тестов, чтобы вручную генерировать комбинации параметров.

def generated_list():
    return x

def generates_list_2(fn1):
    return x

def pytest_generate_tests(metafunc):
    if 'fn1' in metafunc.fixturenames and 'fn2' in metafunc.fixturenames:
        metafunc.parametrize(
            "fn1, fn2", 
            [(i, j) for i in generated_list() for j in generated_list_2(i)]
        )

@pytest.fixture()
def fn1(request):
    return request.param

@pytest.fixture()
def fn2(request):
    return request.param

def test_fn(fn1, fn2):
    assert fn2 == 0
0 голосов
/ 06 ноября 2018

Да, вы можете вкладывать приспособления. Просто используйте один прибор в качестве аргумента другого прибора, как если бы вы использовали прибор в тесте.

Ваш код будет выглядеть так:

@pytest.fixture(params=generated_list())
def fn1(request):
    return request.param

@pytest.fixture(params=generates_list_2(fn1))
def fn2(request, fn1):
    return request.param

def test_fn(fn2):
    assert fn2 == 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...