具有 pytest-dependency 的会话范围
Session scope with pytest-dependency
参考从 pytest-dependency 复制的示例代码,通过删除“tests”文件夹进行了细微更改,我希望“test_e”和“test_g”能够通过,但是,两者都被跳过。请告知我是否做了任何愚蠢的事情来阻止会话范围正常工作。
注:
- 使用 pytest-dependency 0.5.1。
- 两个模块分别相对于当前工作目录存储。
test_mod_01.py
import pytest
@pytest.mark.dependency()
def test_a():
pass
@pytest.mark.dependency()
@pytest.mark.xfail(reason="deliberate fail")
def test_b():
assert False
@pytest.mark.dependency(depends=["test_a"])
def test_c():
pass
class TestClass(object):
@pytest.mark.dependency()
def test_b(self):
pass
test_mod_02.py
import pytest
@pytest.mark.dependency()
@pytest.mark.xfail(reason="deliberate fail")
def test_a():
assert False
@pytest.mark.dependency(
depends=["./test_mod_01.py::test_a", "./test_mod_01.py::test_c"],
scope='session'
)
def test_e():
pass
@pytest.mark.dependency(
depends=["./test_mod_01.py::test_b", "./test_mod_02.py::test_e"],
scope='session'
)
def test_f():
pass
@pytest.mark.dependency(
depends=["./test_mod_01.py::TestClass::test_b"],
scope='session'
)
def test_g():
pass
意外输出
=========================================================== test session starts ===========================================================
...
collected 4 items
test_mod_02.py xsss
[100%]
====================================================== 3 skipped, 1 xfailed in 0.38s ======================================================
预期输出
=========================================================== test session starts ===========================================================
...
collected 4 items
test_mod_02.py x.s.
[100%]
====================================================== 2 passed, 1 skipped, 1 xfailed in 0.38s ======================================================
第一个问题是 pytest-dependency
如果在会话范围内使用,则使用完整的测试节点名称。这意味着您必须完全匹配该字符串,该字符串从不包含诸如“.”之类的相对路径。在你的情况下。
您必须使用 "tests/test_mod_01.py::test_c"
或 "test_mod_01.py::test_c"
之类的东西,而不是使用 "./test_mod_01.py::test_c"
,具体取决于您的测试根所在的位置。
第二个问题是 pytest-dependency
只有在其他测试所依赖的测试在同一测试会话中之前 运行 时才会起作用,例如在您的情况下, test_mod_01
和 test_mod_02
模块都必须在同一个测试会话中。在已经 运行.
的测试列表中查找测试依赖项 运行time
请注意,这也意味着如果您 运行 按默认顺序进行测试,则您不能在 test_mod_01
中进行测试依赖于 test_mod_02
中的测试。您必须确保测试 运行 的顺序正确,方法是相应地调整名称,或者使用一些排序插件,如 pytest-order, which has an option (--order-dependencies) 在这种情况下需要时对测试进行排序。
免责声明:我是pytest-order
的维护者。
参考从 pytest-dependency 复制的示例代码,通过删除“tests”文件夹进行了细微更改,我希望“test_e”和“test_g”能够通过,但是,两者都被跳过。请告知我是否做了任何愚蠢的事情来阻止会话范围正常工作。
注:
- 使用 pytest-dependency 0.5.1。
- 两个模块分别相对于当前工作目录存储。
test_mod_01.py
import pytest
@pytest.mark.dependency()
def test_a():
pass
@pytest.mark.dependency()
@pytest.mark.xfail(reason="deliberate fail")
def test_b():
assert False
@pytest.mark.dependency(depends=["test_a"])
def test_c():
pass
class TestClass(object):
@pytest.mark.dependency()
def test_b(self):
pass
test_mod_02.py
import pytest
@pytest.mark.dependency()
@pytest.mark.xfail(reason="deliberate fail")
def test_a():
assert False
@pytest.mark.dependency(
depends=["./test_mod_01.py::test_a", "./test_mod_01.py::test_c"],
scope='session'
)
def test_e():
pass
@pytest.mark.dependency(
depends=["./test_mod_01.py::test_b", "./test_mod_02.py::test_e"],
scope='session'
)
def test_f():
pass
@pytest.mark.dependency(
depends=["./test_mod_01.py::TestClass::test_b"],
scope='session'
)
def test_g():
pass
意外输出
=========================================================== test session starts ===========================================================
...
collected 4 items
test_mod_02.py xsss
[100%]
====================================================== 3 skipped, 1 xfailed in 0.38s ======================================================
预期输出
=========================================================== test session starts ===========================================================
...
collected 4 items
test_mod_02.py x.s.
[100%]
====================================================== 2 passed, 1 skipped, 1 xfailed in 0.38s ======================================================
第一个问题是 pytest-dependency
如果在会话范围内使用,则使用完整的测试节点名称。这意味着您必须完全匹配该字符串,该字符串从不包含诸如“.”之类的相对路径。在你的情况下。
您必须使用 "tests/test_mod_01.py::test_c"
或 "test_mod_01.py::test_c"
之类的东西,而不是使用 "./test_mod_01.py::test_c"
,具体取决于您的测试根所在的位置。
第二个问题是 pytest-dependency
只有在其他测试所依赖的测试在同一测试会话中之前 运行 时才会起作用,例如在您的情况下, test_mod_01
和 test_mod_02
模块都必须在同一个测试会话中。在已经 运行.
请注意,这也意味着如果您 运行 按默认顺序进行测试,则您不能在 test_mod_01
中进行测试依赖于 test_mod_02
中的测试。您必须确保测试 运行 的顺序正确,方法是相应地调整名称,或者使用一些排序插件,如 pytest-order, which has an option (--order-dependencies) 在这种情况下需要时对测试进行排序。
免责声明:我是pytest-order
的维护者。