Предупреждение Coverage.py: данные не собраны. (данные не собираются)

Я пытаюсь найти покрытие, используя модуль покрытия для проекта django, но получаю

Coverage.py warning: No data was collected. (no-data-collected)

В папке моего проекта есть папки src и тесты.

Когда я бегу

coverage run -m pytest && coverage report

Он создает отчет со 100% покрытием со списком файлов внутри папки с тестами. Принимая во внимание, что когда я бегу

coverage run --source=src -m pytest && coverage report

это говорит

Coverage.py warning: No data was collected. (no-data-collected)
No data to report.

Когда я пытаюсь дать source=src или include=src в .coveragerc, также появляется такое же предупреждение. Тесты проходят для всех вышеперечисленных случаев.

Я хочу охват папки src. Это потому, что мне не хватает какой-то настройки пути?


person 1010101    schedule 14.11.2017    source источник
comment
Возможно, вы не запускаете код из папки src? Добавьте --debug=trace в строку выполнения покрытия. Он выведет информацию о каждом выполненном файле, отслеживается ли он, и если нет, то почему.   -  person Ned Batchelder    schedule 15.11.2017
comment
попробуйте заменить src на реальный путь. Он должен указывать на папку, а не на файл   -  person Philippe C    schedule 20.06.2018


Ответы (6)


coverage (используется pytest-cov) требует, чтобы папка с тестами содержала __init__.py, прежде чем он будет собирать какие-либо данные.

Я добавил __init__.py в папку с тестами, а затем покрытие собрало данные, как и ожидалось.

См. http://thomas-cokelaer.info/blog/2017/01/pytest-cov-collects-no-data-on-travis/

person louis_guitton    schedule 07.03.2020

У меня была такая же проблема, и проблема заключалась в пути, по которому я запускал тесты.

Что сейчас работает:

Структура

~/Projects/ProjectName
├── manage.py
├── tests
├── src
│   ├── app_one
├── .coveragerc

Команда:

~/Projects/ProjectName$ coverage run manage.py test

и мой .coveragerc:

[run]
include = */src/*
omit = *migrations*, *tests*
plugins = django_coverage_plugin
person Nadav    schedule 27.08.2018
comment
где находится файл .coveragerc? - person Nuance; 25.03.2019
comment
в папке ProjectName... обновит структуру выше - person Nadav; 25.03.2019
comment
и где вы сейчас запускаете pytest? - person Csaba Szilveszter; 03.05.2019

Проблема в том, что вы не указываете, из какого каталога получить покрытие.

Вы можете указать это в файле .coveragerc или в командной строке:

pytest tests -v --cov-report term --cov-report html:htmlcov --cov-report xml --cov-fail-under=90 --cov=<the-dir-to-colect-coverage-from>

При желании вы можете выполнить только pytest tests и добавить pytest аргументов к pytest.ini в корне вашего проекта:

[pytest]
addopts = -v --cov-report term --cov-report html:htmlcov --cov-report xml --cov-fail-under=<coverage-percentage-desired> --cov=<the-dir-to-colect-coverage-from>

Бонус:

Если вы хотите исключить файлы из покрытия, вы можете добавить файл .coveragerc в корень вашего проекта:

[run]
omit =
    # omit everything in the folder
    proj-ab/api/confs/
    # omit file
    proj-ab/models/file-not-covered.py

Требования. В этих примерах я использую требования: pytest==4.6.2 и pytest-cov==2.7.1.

person Lucas Mendes Mota Da Fonseca    schedule 16.07.2019
comment
Я считаю этот комментарий полезным с моей стороны, так как я ищу способы разрешить использование pytest-cov в своих модульных тестах. Спасибо за это! - person Lemon Calamitous; 30.07.2019

У меня была такая же проблема, и приведенные выше ответы не решили ее полностью. Оказывается, вам нужно, чтобы __init__.py был в каждом подкаталоге, в котором есть тест.

person Robert Yi    schedule 20.06.2020

если вам нужно использовать «источник» в вашем .coveragerc, вы можете написать, как показано ниже

[run]
source = src
omit = *migrations*, *tests*
plugins = django_coverage_plugin
person Ciel Li    schedule 24.05.2019

Я столкнулся с этой ошибкой с tox:

Coverage.py warning: No data was collected. (no-data-collected)

Моя конфигурация выполняет установку модуля и тестирует его, а не исходный код. Однако тестовое обнаружение обнаружило модуль, который я назвал test_*.py в своем пакете приложения, что вызвало PYTHONPATH путаницу и привело к невозможности собрать сведения о покрытии. Переименование модуля, чтобы он не начинался с test_, решило проблему.

person modle13    schedule 27.10.2020