如何进行取决于参数化测试的测试。 (Pytest)

时间:2020-01-27 09:20:49

标签: python python-3.x testing pytest pytest-dependency

为什么第二项测试被跳过?我希望第二个测试依赖于三个测试,它们被参数化为test_first。如何实现?

import pytest
from pytest_dependency import depends
param = [10,20,30]
@pytest.mark.parametrize("param", param)
def test_first(param):
    assert(True)

@pytest.mark.dependency(depends=['test_first'])
def test_second():
    assert(True)

输出为

t.py::test_first[10] PASSED
t.py::test_first[20] PASSED
t.py::test_first[30] PASSED
t.py::test_second SKIPPED

我想要t.py::test_second PASSED

p.s。可能是以前问过的,但是我还是决定发布问题,因为很难找到关于这个问题的简短表述问题。

3 个答案:

答案 0 :(得分:2)

从此示例中,我可以看到https://pytest-dependency.readthedocs.io/en/latest/usage.html,您还应该使用@ pytest.mark.dependency()装饰test_first

答案 1 :(得分:0)

我对pytest-dependency的工作方式一无所知,但是通常参数化的测试会被表示/命名为,包括其参数值,例如内部test_first[10]test_first[20]是不同的测试,也许尝试一下?查看文档it obliquely hints at that being the case,请注意instances助手如何生成$testname[$params...]形式的名称。

文档还讨论了(建议?)显式标记参数化实例:https://pytest-dependency.readthedocs.io/en/latest/usage.html#parametrized-tests

答案 2 :(得分:0)

我的问题的可能解决方案之一是下面的代码,但这破坏了参数化测试的独立性。因此,我仍然对另一个更好的解决方案感兴趣。

import pytest
from pytest_dependency import depends
param = [10,20,30]

@pytest.mark.dependency(name="a1")
def test_dum():
    pass

@pytest.mark.parametrize("param", param)
@pytest.mark.dependency(name="a1", depends=['a1'])
def test_first(param):
    assert((param == 10) or (param == 20) or (param == 31))

@pytest.mark.dependency(depends=['a1'])
def test_second():
    assert(True)