pytest-cov-不计算集成测试目录的覆盖率

时间:2020-03-09 21:20:27

标签: python unit-testing pytest coverage.py

我具有以下目录结构:

./
    src/
    tests/
        unit/
        integration/

我想使用pytest在unit/integration/中运行所有测试,但是我只希望coverage.py在运行时计算src/目录的覆盖率unit/测试(运行integration/测试时不)。

我正在使用的命令(计算tests/下所有测试的覆盖率):

pytest --cov-config=setup.cfg --cov=src

带有setup.cfg文件:

[tool:pytest]
testpaths = tests

[coverage:run]
branch = True

我知道我可以在集成测试中为每个测试功能添加@pytest.mark.no_cover装饰器,但是我宁愿标记整个目录,而不是装饰大量功能。

1 个答案:

答案 0 :(得分:1)

您可以动态附加标记。下面的示例在pytest_collection_modifyitems挂钩的自定义隐式中进行了此操作。将代码放在项目根目录的conftest.py中:

from pathlib import Path
import pytest


def pytest_collection_modifyitems(items):
    no_cov = pytest.mark.no_cover
    for item in items:
        if "integration" in Path(item.fspath).parts:
            item.add_marker(no_cov)