I am trying to find the coverage using coverage module for a django project but gets
Coverage.py warning: No data was collected. (no-data-collected)
My project folder has src and tests folders.
When I run
coverage run -m pytest && coverage report
It produces a report with 100% coverage with the list of files inside the tests folder. Whereas when I run
coverage run --source=src -m pytest && coverage report
it says
Coverage.py warning: No data was collected. (no-data-collected)
No data to report.
When I try to give the source=src
or include=src
in the .coveragerc
also the same warning occurs. The tests passes for all the above cases.
I want the coverage of the src folder. Is it because I am missing some path setting?
coverage
(used by pytest-cov
) needs the tests folder to contain an __init__.py
before it will collect any data.
I added __init__.py
to the tests folder and then coverage collected the data as expected.
Refer to http://thomas-cokelaer.info/blog/2017/01/pytest-cov-collects-no-data-on-travis/
I had the same issue and the problem was with the path I was running the tests.
What is working now:
Structure
~/Projects/ProjectName
├── manage.py
├── tests
├── src
│ ├── app_one
├── .coveragerc
Command:
~/Projects/ProjectName$ coverage run manage.py test
and my .coveragerc:
[run]
include = */src/*
omit = *migrations*, *tests*
plugins = django_coverage_plugin
The problem is that you're not specifying which dir to get coverage from.
You can specify that in the .coveragerc
file or on the command line:
pytest tests -v --cov-report term --cov-report html:htmlcov --cov-report xml --cov-fail-under=90 --cov=<the-dir-to-colect-coverage-from>
If you desire you can only execute pytest tests
and add pytest
args on pytest.ini
at your project root:
[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>
Bonus:
If you want to omit files from the coverage you can add a .coveragerc
file on your project root:
[run]
omit =
# omit everything in the folder
proj-ab/api/confs/
# omit file
proj-ab/models/file-not-covered.py
Requirements:
On these examples I'm using requirements: pytest==4.6.2
and pytest-cov==2.7.1
I had the same issue and the above answers did not fully solve it. It turns out you need to have __init__.py
was in every subdirectory that has a test.
if you need to use 'source' in your .coveragerc
, you can write as below
[run]
source = src
omit = *migrations*, *tests*
plugins = django_coverage_plugin
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With