[TIP] How to stop coverage from visiting /usr/local when running pytes?

Steve Wang fair800 at yahoo.com
Fri May 24 15:58:46 PDT 2013


Hi, 

I'm trying to introduce pytest and coverage to our project, but I'm puzzled by the amount of data collected by coverage that I didn't ask for. 
What can I do to stop coverage from visiting /usr/local? Any suggestions/advice? Thanks.

More details:

(1) the simple test script is directly copied out of this page: http://pytest.org/latest/getting-started.html#getstarted

~/lab/proj$ cat test_sample.py
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

(2) If I run py.test by hand, the test finished in less than a half a second:

~/lab/proj$ which py.test
/usr/local/bin/py.test

~/lab/proj$ py.test test_sample.py
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.3.5
plugins: cov
collected 1 items

test_sample.py F

=================================== FAILURES ===================================
_________________________________ test_answer __________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
=========================== 1 failed in 0.46 seconds ===========================

(3) However, if i run the same test under the control of 'coverage', then it takes a lot more time than I expect

~/lab/proj$ which coverage
/usr/local/bin/coverage

~/lab/proj$ coverage erase

~/lab/proj$ coverage run /usr/local/bin/py.test test_sample.py
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.3.5
plugins: cov
collected 1 items

test_sample.py F

=================================== FAILURES ===================================
_________________________________ test_answer __________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
=========================== 1 failed in 2.96 seconds ===========================


(4) And I noticed that a huge .coverage file was created

~/lab/proj$ la -l .coverage
-rw-r--r-- 1 pi pi 16083 May 24 18:29 .coverage

(5) And indeed, there's all sorts of data collecte from /usr/local. How can I stop coverage from going there?

~/lab/proj$ coverage report
Name                                                                                           Stmts   Miss  Cover
------------------------------------------------------------------------------------------------------------------
/usr/local/bin/py                                                                                  4      0   100%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/__init__                             5      0   100%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_apipkg                            131     34    74%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_builtin                           188    140    26%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_code/__init__                       0      0   100%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_code/code                         518    172    67%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_code/source                       294    155    47%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_error                              50     11    78%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_io/__init__                         0      0   100%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_io/capture                        264    114    57%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_io/saferepr                        35     16    54%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_io/terminalwriter                 215    149    31%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_path/__init__                       0      0   100%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_path/common                       232    113    51%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_path/local                        558    356    36%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_std                                11      5    55%
/usr/local/lib/python2.7/dist-packages/py-1.4.14-py2.7.egg/py/_xmlgen                            168    114    32%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/__init__                     1      0   100%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/__init__          78     15    81%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/newinterpret     244    171    30%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/oldinterpret     402    327    19%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/reinterpret       36     12    67%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/rewrite          436    302    31%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/assertion/util             172    114    34%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/capture                    163     52    68%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/config                     355    120    66%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/core                       387    106    73%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/doctest                     75     54    28%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/genscript                   51     38    25%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/helpconfig                 138     79    43%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/hookspec                    57      0   100%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/junitxml                   142     92    35%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/main                       463    131    72%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/mark                       131     72    45%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/monkeypatch                 71     40    44%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/nose                        37     12    68%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/pastebin                    56     38    32%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/pdb                         73     44    40%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/python                    1163    631    46%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/recwarn                     65     52    20%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/resultlog                   80     62    23%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/runner                     289    101    65%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/skipping                   197    134    32%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/terminal                   382    171    55%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/tmpdir                      42     24    43%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/_pytest/unittest                   147    115    22%
/usr/local/lib/python2.7/dist-packages/pytest-2.3.5-py2.7.egg/pytest                               8      2    75%
/usr/local/lib/python2.7/dist-packages/pytest_cov-1.6-py2.7.egg/pytest_cov                        44     27    39%
/usr/local/lib/python2.7/dist-packages/setuptools-0.6c11-py2.7.egg/pkg_resources                1247    996    20%
test_sample                                                                                        4      0   100%
------------------------------------------------------------------------------------------------------------------
TOTAL                                                                                           9909   5513    44%


(5) Finally, I did try the -omit switch, however, it still took a long time. 
It feels like that coverage went to /usr/local anyway, collected the data and then threw it away.
I don't have hard evidence that it did that. I tried to use pdb to step into coverage
but failed to see exactly what it was doing.

~/lab/proj$ coverage run --omit=/usr/local/* /usr/local/bin/py.test test_sample.py
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.3.5
plugins: cov
collected 1 items

test_sample.py F

=================================== FAILURES ===================================
_________________________________ test_answer __________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
=========================== 1 failed in 2.91 seconds ===========================
~/lab/proj$ 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20130524/cc84db40/attachment-0001.html>


More information about the testing-in-python mailing list