假设我有两个测试基本上做同样的事情,但是,我想为其中一个使用固定装置。
我以为这应该有效,但事实并非如此
@fixture
bar_fixture():
do_something_but_Return_no_value()
@mark.parametrize(
"foo",
[
param(
True,
marks=[mark.test_1],
),
param(
False,
marks=[mark.test_2, mark.usefixtures("bar_fixture")],
),
],
)
def test_foo(foo):
func(foo)
有人知道该怎么做吗?当然,这可以通过两个单独的测试来完成,但我想知道是否可以做这样的事情,以免两次编写基本相同的代码。
mark.usefixtures
似乎只能直接在测试中工作,而不是在其他装置中工作,我认为这是这里发生的事情的一部分。
对于这种情况,您可以退回到 request.getfixturevalue
动态运行命名的固定功能。 建议尽可能通过函数参数声明装置。但是,如果您只能在测试设置时决定是否使用另一个夹具,则可以使用此函数在夹具或测试函数体内检索它。
@pytest.fixture
def bar_fixture():
do_something_but_Return_no_value()
@pytest.mark.parametrize(
["foo", "fixtures"],
[
pytest.param(
True, [], marks=[pytest.mark.test_1],
),
pytest.param(
False, ["bar_fixture"], marks=[pytest.mark.test_2]
),
],
)
def test_foo(request, foo, fixtures):
for fixture in fixtures:
request.getfixturevalue(fixture)
func(foo)
这显然不如其他选项那么优雅,但它很容易遵循。