0

参考从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 ======================================================
4

1 回答 1

1

第一个问题是,pytest-dependency如果在会话范围内使用,则使用完整的测试节点名称。这意味着您必须完全匹配该字符串,该字符串从不包含“。”之类的相对路径。在你的情况下。而不是 using "./test_mod_01.py::test_c",您必须使用"tests/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,如果需要的话,它有一个选项(--order-dependencies)来排序测试一个案例。

免责声明:我是pytest-order.

于 2021-09-15T19:36:59.980 回答