为什么第二项测试被跳过?我希望第二个测试依赖于三个测试,它们被参数化为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。可能是以前问过的,但是我还是决定发布问题,因为很难找到关于这个问题的简短表述问题。
答案 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)