如何将夹具作为参数传递给另一个夹具
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 值(boo
和 bar
)
<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
我想将一个 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 值(boo
和 bar
)
<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