如何将夹具作为参数传递给另一个夹具

How to pass a fixture as param to another fixture

我想将一个 pytest.fixture 函数传递给另一个 fixture 函数的 param 参数。像这样:

@pytest.fixture()
def foo():
    return "foo"

@pytest.fixture()
def boo(foo):
    return foo + "boo"

@pytest.fixture()
def bar(foo):
    return foo + "bar"

@pytest.fixture(params=[boo, bar], ids=["boo_fixture", "bar_fixture"])
def final_fixture(request):
    return request.param

def _test(final_fixture):
    assert final_fixture.startswith('foo')

final_fixture return 中的 request.param 是该参数的函数对象,而不是固定装置的 return 值(boobar)

<function boo at 0x7f2bfceg41f0>
<function bar at 0x7f2bfceg41f1>

那么,如何使 final_fixture 函数 return 成为每个灯具 param 的实际 return 值?

感谢 this Will 的回答,我找到了适合我的解决方案。

看来您可以只使用 request.getfixturevalue 来获取夹具的 return 值而不是函数对象。这是工作代码:

@pytest.fixture()
def foo():
    return "foo"

@pytest.fixture()
def boo(foo):
    return foo + "boo"

@pytest.fixture()
def bar(foo):
    return foo + "bar"

@pytest.fixture(params=['boo', 'bar'], ids=["boo_fixture", "bar_fixture"])
def final_fixture(request):
    return request.getfixturevalue(request.param)

def _test(final_fixture):
    assert final_fixture.startswith('foo')

这是相关文档:http://doc.pytest.org/en/latest/builtin.html#_pytest.fixtures.FixtureRequest.getfixturevalue