pytest:夹具作为可参数化夹具的参数
pytest: fixture as argument of a parametizable fixture
我有一个运行良好的可参数化夹具。以下函数是具有相同行为的虚拟函数。
@pytest.fixture(scope="function")
def parametrizable_fixture(parameters):
return parameters
这适用于大多数测试,如下所示:
@pytest.mark.parametrize("parameters", [["param 1", "param 2"]])
def test_dummy(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]
但是,如果我想将另一个夹具(如下定义)作为第一个夹具的参数,测试将失败:
@pytest.fixture(scope="function")
def param2fixture():
return "param 2"
@pytest.mark.parametrize("parameters", [["param 1", pytest.lazy_fixture("param2fixture")]])
def test_dummy_2(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]
惰性夹具没有被它应该具有的值替换,即我收到此错误消息:
E assert ['param 1', <LazyFixture "param2fixture">] == ["param 1", "param 2"]
编辑:
这些示例将 fixture 用作长度为 2 的列表中的参数。这只是为了简化问题。对于作为参数的这种惰性灯具的数量或位置没有限制。
您正在尝试用惰性固定装置替换参数 (parameters
) 的一部分,但这仅适用于整个参数。
修复示例的最简单方法是使用 2 个参数:
@pytest.mark.parametrize("arg1,arg2",
[["param 1", lazy_fixture("param2fixture")]])
def test_dummy_2(arg1, arg2):
assert (arg1, arg2) == ("param 1", "param 2")
如评论中所述,这并不能解决原始问题的情况,因为元组中的元素数量不固定。有一个 related issue in pytest-lazy-fixture, and a pull request 旨在解决这个问题 - 如果您喜欢冒险,可以将 PR 应用到分叉上并尝试一下。正如 PR 中所提到的,这确实会降低插件的速度,但如果这不是问题,它可能是一个解决方案。
我有一个运行良好的可参数化夹具。以下函数是具有相同行为的虚拟函数。
@pytest.fixture(scope="function")
def parametrizable_fixture(parameters):
return parameters
这适用于大多数测试,如下所示:
@pytest.mark.parametrize("parameters", [["param 1", "param 2"]])
def test_dummy(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]
但是,如果我想将另一个夹具(如下定义)作为第一个夹具的参数,测试将失败:
@pytest.fixture(scope="function")
def param2fixture():
return "param 2"
@pytest.mark.parametrize("parameters", [["param 1", pytest.lazy_fixture("param2fixture")]])
def test_dummy_2(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]
惰性夹具没有被它应该具有的值替换,即我收到此错误消息:
E assert ['param 1', <LazyFixture "param2fixture">] == ["param 1", "param 2"]
编辑: 这些示例将 fixture 用作长度为 2 的列表中的参数。这只是为了简化问题。对于作为参数的这种惰性灯具的数量或位置没有限制。
您正在尝试用惰性固定装置替换参数 (parameters
) 的一部分,但这仅适用于整个参数。
修复示例的最简单方法是使用 2 个参数:
@pytest.mark.parametrize("arg1,arg2",
[["param 1", lazy_fixture("param2fixture")]])
def test_dummy_2(arg1, arg2):
assert (arg1, arg2) == ("param 1", "param 2")
如评论中所述,这并不能解决原始问题的情况,因为元组中的元素数量不固定。有一个 related issue in pytest-lazy-fixture, and a pull request 旨在解决这个问题 - 如果您喜欢冒险,可以将 PR 应用到分叉上并尝试一下。正如 PR 中所提到的,这确实会降低插件的速度,但如果这不是问题,它可能是一个解决方案。