Question

I am trying to get a pytest run to work with a coveragerc file. Settings in my .coveragerc file are not used, so I guess the file is not used at all.

See my project structure and pytest calls below! What am I doing wrong?

Project:

basepath/lib/
basepath/.coveragerc
basepath/test/test_lib
basepath/test/run.py

I call test/run.py from virtualenv

basepath$ python test/run.py

run.py

import pytest
pytest.main('test/test_lib -v --cov-report xml --cov lib --cov-config .coveragerc')

I tried to move .coveragerc in different directories i.e. lib/, test/, test/test_lib/ but none of them worked.

I expected to get a coverage file named "xxxcoverage" as set in .coveragerc but I always got the default one .coverage

.coveragerc

[run]
data_file = xxxcoverage
Was it helpful?

Solution

Reading the pytest documentation again and again...I found my "mistake":
Here it says:

Note that this plugin controls some options and setting the option in the config file will have no effect. These include specifying source to be measured (source option) and all data file handling (data_file and parallel options).

So my test was useless because the data_file option in .coveragerc has no effect.

I tested with the omit option and it worked!

.coveragerc has to be placed in the basepath as described above (and expected)

OTHER TIPS

I believe the answer changed a bit. Taken from https://pytest-cov.readthedocs.io/en/latest/config.html

You can point pytest-cov to a config file like this:

pytest --cov-config=.coveragerc
       --cov=myproj
       myproj/tests/

This plugin overrides the data_file and parallel options of coverage. Unless you also run coverage without pytest-cov it’s pointless to set those options in your .coveragerc.

If you use the --cov=something option (with a value) then coverage’s source option will also get overriden. If you have multiple sources it might be easier to set those in .coveragerc and always use --cov (wihout a value) instead of having a long command line with --cov=pkg1 --cov=pkg2 --cov=pkg3 ....

If you use the --cov-branch option then coverage’s branch option will also get overriden.

Therefore, the source option can be specified (at least if you run it with --cov without a value)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top