有没有办法在pytest中嵌套固定装置参数化?

时间:2018-11-05 05:04:33

标签: python pytest

我有一个示例,其中我基本上有一个嵌套的灯具列表,即下面的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 :(得分:2)

虽然这不是一个很好的答案,但这还是可行的。它利用测试生成过程中的钩子来手动生成参数组合。

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

答案 1 :(得分:0)

是的,您可以嵌套灯具。就像在测试中使用固定装置一样,只需将一个固定装置用作其他固定装置的参数之一即可。

您的代码如下:

@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