如何进行取决于参数化测试的测试。 (测试)
How to make test that depends on parametrized test. (Pytest)
为什么跳过第二个测试?我希望第二个测试依赖于参数化为 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。可能之前有人问过,但我还是决定 post 这个问题,因为很难找到关于这个问题的简要表述的问题。
好吧,我对 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
由此 example 我可以看出 (1) 您还应该修饰 test_first 和 (2) 修饰参数列表。
# The test for the parent shall depend on the test of all its children.
# Create enriched parameter lists, decorated with the dependency marker.
childparam = [
pytest.param(c, marks=pytest.mark.dependency(name="test_child[%s]" % c))
for c in childs
]
parentparam = [
pytest.param(p, marks=pytest.mark.dependency(
name="test_parent[%s]" % p,
depends=["test_child[%s]" % c for c in p.children]
)) for p in parents
]
@pytest.mark.parametrize("c", childparam)
def test_child(c):
if c.name == "l":
pytest.xfail("deliberate fail")
assert False
@pytest.mark.parametrize("p", parentparam)
def test_parent(p):
pass
我的问题的一个可能解决方案是下面的代码,但它破坏了参数化测试的独立性......所以我仍然对另一个更好的解决方案感兴趣。
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)
为什么跳过第二个测试?我希望第二个测试依赖于参数化为 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。可能之前有人问过,但我还是决定 post 这个问题,因为很难找到关于这个问题的简要表述的问题。
好吧,我对 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
由此 example 我可以看出 (1) 您还应该修饰 test_first 和 (2) 修饰参数列表。
# The test for the parent shall depend on the test of all its children.
# Create enriched parameter lists, decorated with the dependency marker.
childparam = [
pytest.param(c, marks=pytest.mark.dependency(name="test_child[%s]" % c))
for c in childs
]
parentparam = [
pytest.param(p, marks=pytest.mark.dependency(
name="test_parent[%s]" % p,
depends=["test_child[%s]" % c for c in p.children]
)) for p in parents
]
@pytest.mark.parametrize("c", childparam)
def test_child(c):
if c.name == "l":
pytest.xfail("deliberate fail")
assert False
@pytest.mark.parametrize("p", parentparam)
def test_parent(p):
pass
我的问题的一个可能解决方案是下面的代码,但它破坏了参数化测试的独立性......所以我仍然对另一个更好的解决方案感兴趣。
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)