pytest-cov - не учитывать покрытие для каталога интеграционных тестов - PullRequest
1 голос
/ 10 марта 2020

У меня следующая структура каталогов:

./
    src/
    tests/
        unit/
        integration/

Я хотел бы использовать pytest для запуска всех тестов как в unit/, так и integration/, но я бы хотел, чтобы cover.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 к каждой тестовой функции в интеграционных тестах, но я бы предпочел пометить весь каталог, а не украшать большое количество функций.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Вы можете прикрепить маркеры динамически. Приведенный ниже пример делает это в пользовательском значении хука pytest_collection_modifyitems. Поместите код в conftest.py в проекте root dir:

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)
0 голосов
/ 10 марта 2020

Добавьте файл с именем .coveragerc и добавьте следующее

[run]
omit = 
    */integration/*

При добавлении этого покрытия покрытие не будет учитывать указанные каталоги

...