preventing python coverage from including virtual environment site packages

前端 未结 3 426
天命终不由人
天命终不由人 2021-02-06 20:38

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:

<         


        
相关标签:
3条回答
  • 2021-02-06 21:12

    If using pytest, you can specify exclusive paths or files to test in setup.cfg (see docs):

    [pytest]
    # a directory
    testpaths = tests
    
    # exact file(s)
    python_files = tests/test1.py tests/test2.py
    

    It looks like if you include the python_files and testpaths parameters, then the python_files will only be used.

    0 讨论(0)
  • 2021-02-06 21:22

    Try using py.test and then specifiying your test options in a setup.cfg file. You will need to pip install pytest first.

    For example:

    [pytest]
    norecursedirs = build docs/_build *.egg .tox *.venv
    python_files = tests/functional* tests/integration*
    addopts =
        #--verbose
        --tb short
        # Turn on --capture to have brief, less noisy output
        # You will only see output if the test fails
        # Use --capture no if you want to see it all or have problems debugging
        --capture fd
        # --capture no
        # show extra test summary info as specified by chars (f)ailed, (E)error,      (s)skipped, (x)failed, (X)passed.
        - rfEsxX
        --junitxml junit.xml
        --cov workspace --cov-report xml --cov-report term-missing
    

    You can read more about configuring py.test here: https://pytest.org/latest/customize.html

    0 讨论(0)
  • 2021-02-06 21:36

    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.

    0 讨论(0)
提交回复
热议问题