Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

preventing python coverage from including virtual environment site packages

I am new to coverage and ran into a strange problem. My coverage is taking my virtual environment site packages into account. Here is the output of the coverage run:

coverage run test.py .................... ---------------------------------------------------------------------- Ran 20 tests in 0.060s  OK (atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master)       [19:58:45] $ coverage report Name                                                                              Stmts   Miss  Cover ----------------------------------------------------------------------------------------------------- /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/__init__               18      0   100% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/_compat                38     20    47% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/app                   528    255    52% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/blueprints            156    118    24%                              .                              .                              . /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/urls               412    215    48% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/utils              242    175    28% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wrappers           568    298    48% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wsgi               448    352    21% atcatalog/__init__                                                                    7      0   100% atcatalog/views/__init__                                                              0      0   100% atcatalog/views/publang                                                               7      0   100% atcatalog/views/pubtext                                                               1      0   100% atcatalog/views/userlang                                                             13      0   100% atcatalog/views/users                                                                 5      0   100% atcatalog/views/usertext                                                             14      0   100% test                                                                                120      0   100% ----------------------------------------------------------------------------------------------------- TOTAL                                                                             12530   8044    36% (atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master)       [19:58:55] 

Here is the structure of my project directory which resides under home:

workspace/ ├── README.md ├── atcatalog │   ├── __init__.py │   ├── __init__.pyc │   ├── static │   ├── templates │   └── views │       ├── __init__.py │       ├── __init__.pyc │       ├── publang.py │       ├── publang.pyc │       ├── pubtext.py │       ├── pubtext.pyc │       ├── userlang.py │       ├── userlang.pyc │       ├── users.py │       ├── users.pyc │       ├── usertext.py │       └── usertext.pyc ├── requirements.txt ├── run.py └── test.py 

I had the virtual environment at first inside the project directory and now moved it out to ~/Envs with virtualenvwrapper, but the problem persisted. run.py and test.py are not special in any way, they both import app from atcatalog. I also tried to find ways to omit the virtual environment directory, but google gave no answer (surprisingly). I don't think it is the purpose of coverage to test already well tested site-packages. So I would exclude them from the run.

How can I accomplish to avoid coverage having testing my site-packages?

like image 833
Johannes Maria Frank Avatar asked Aug 22 '15 20:08

Johannes Maria Frank


People also ask

What is Pragma no cover?

That exact # pragma: no cover is the hint that the part of code should be ignored by the tool -- see Excluding code from coverage .

How does Python coverage work?

Coverage.py is a tool for measuring code coverage of Python programs. It monitors your program, noting which parts of the code have been executed, then analyzes the source to identify code that could have been executed but was not. Coverage measurement is typically used to gauge the effectiveness of tests.

How many stages are there in coverage py?

Coverage.py works in three phases: Execution: Coverage.py runs your code, and monitors it to see what lines were executed. Analysis: Coverage.py examines your code to determine what lines could have run.


1 Answers

Thanks to tknickman I figured it out: Use either

coverage run --source <path to project dir> test.py 

or create a configuration file .coveragerc which resides in the directory you run coverage from, with the following content:

[run] source =     <path to project dir> 

This provides you do not have your virtual environment installed under the project directory. If you have the virtual environment installed under the project dir you can use

coverage run --source <project path> --omit <pattern> test.py 

Note that omit wants a file pattern like

~/projectdir/venv/* 

instead of a path.

The corresponding .coveragerc would look like this:

[run] source=     <path to project dir> omit=     <path to project dir>/<name of virtual env>/* 

I still think that like packages of the standard library any packages installed under site-packages should not be covered by default.

like image 126
Johannes Maria Frank Avatar answered Sep 24 '22 06:09

Johannes Maria Frank