我具有以下目录结构:
./
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
装饰器,但是我宁愿标记整个目录,而不是装饰大量功能。
答案 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)