gpt4 book ai didi

python - Pytest 参数化依赖

转载 作者:行者123 更新时间:2023-12-04 16:45:31 26 4
gpt4 key购买 nike

我有一个函数和一个测试

def foo(a):
return bar(a)

@pytest.mark.parametrize(
'number',
[1,2,3]
)
@pytest.mark.dependency
def test_foo(number):
assert foo(number) > SOME_CONST # Simplistic example, real case is more nuanced

我正在使用 pytest 和 pytest_dependency 模块。 foo 是用于许多其他测试的函数。我有一个函数,我想依赖 test_foo,下面的代码不起作用:

@pytest.mark.dependency(depends=['test_foo'])
@pytest.mark.parametrize(
'param',
itertools.permutations(['a','b','c','d','e'],2),
ids=repr,
)

def test_bar(param):
...
important_result = foo(param)
...

理论是如果 test_foo 失败,那么 test_bar 将被跳过。但是,当我参数化 test_bar 时,无论 test_foo 的结果如何,都会跳过 test_bar 的每个实例化。

澄清一下,此代码按预期工作(未跳过 test_bar):

@pytest.mark.dependency(depends=['test_foo'])
def test_bar():
param = some_fnc(['a', 'b'])
...
important_result = foo(param)
...

最佳答案

您的问题与 pytest 分配给每个测试的 node_id 有关(参见 pytest-dependency#names)。

根据您的问题,我了解到您希望 test_bar 依赖于 test_foo 的所有参数化,因此在这种情况下您需要执行以下操作:

@pytest.mark.dependency(depends=['foo[1]', 'foo[2]', 'foo[3]'])
@pytest.mark.parametrize(
'param',
itertools.permutations(['a', 'b', 'c', 'd', 'e'], 2),
ids=repr,
)
def test_bar(param):
...

但由于参数化可能比数字更复杂,因此建议实现以下方法:

@pytest.mark.parametrize(
'number',
[
pytest.param(1, marks=pytest.mark.dependency(name='foo1')),
pytest.param(2, marks=pytest.mark.dependency(name='foo2')),
pytest.param(3, marks=pytest.mark.dependency(name='foo3'))
]
)
def test_foo(number):
...


@pytest.mark.dependency(depends=['foo1', 'foo2', 'foo3'])
@pytest.mark.parametrize(
'param',
itertools.permutations(['a', 'b', 'c', 'd', 'e'], 2),
ids=repr,
)
def test_bar(param):
...

如果您希望每个参数化都有依赖性,则必须显式地将 test_bar 中每个 param 值的依赖性设置为其对应的 foo? 测试。

关于python - Pytest 参数化依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50837557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com