0

我想运行一些测试,这些测试依赖于使用pytestpytest-dependency的其他测试的成功。

我有这个目录结构:

根/
  测试/
    眼镜/
      a_test.py
      b_test.py

a_test.py的内容:

import pytest

@pytest.mark.dependency()
def test_a():
    assert 1

@pytest.mark.dependency()
def test_b():
    assert 1

b_test.py 的内容:

import pytest


test_dependencies = [
    "tests/specs/a_test.py::test_a",
    "tests/specs/a_test.py::test_b",
]

@pytest.mark.dependency(depends=test_dependencies, scope="session")
def test_c():
    assert 1

要执行测试,我从根目录运行此命令:python -m pytest --rootdir=tests

我的问题是依赖项(test_a 和 test_b)通过,但是依赖项测试(test_c)被跳过

根据pytest-dependency 的文档

...

请注意,会话范围内的引用必须使用依赖项的完整节点 ID。此节点 id 由模块路径、测试类的名称(如果适用)和测试的名称组成,以双冒号“::”<br/>
...

知道为什么它不能像预期的那样工作吗?

4

1 回答 1

0

对于未来的读者,在这句话中:

...

请注意,会话范围内的引用必须使用依赖项的完整节点 ID。此节点 id 由模块路径、测试类的名称(如果适用)和测试的名称组成,以双冒号“::”分隔</p>

...

模块路径是相对于--rootdir参数的,所以 test_dependencies 应该是:

test_dependencies = [
    "specs/a_test.py::test_a",
    "specs/a_test.py::test_b",
]

PS:经过测试,看起来pytest按字母顺序加载测试模块(至少在同一目录中),因此您需要确保在依赖测试之前加载依赖项。

于 2020-05-15T23:30:40.833 回答