我有一个示例,其中我基本上有一个嵌套的灯具列表,即下面的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
答案 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