Pytest plugin for measuring coverage.
.. start-badges
.. list-table:: :stub-columns: 1
* - docs
- |docs|
* - tests
- | |github-actions| |requires|
|
* - package
- | |version| |conda-forge| |wheel| |supported-versions| |supported-implementations|
| |commits-since|
.. |docs| image:: https://readthedocs.org/projects/pytest-cov/badge/?style=flat :target: https://readthedocs.org/projects/pytest-cov :alt: Documentation Status
.. |github-actions| image:: https://github.com/pytest-dev/pytest-cov/actions/workflows/test.yml/badge.svg :alt: GitHub Actions Status :target: https://github.com/pytest-dev/pytest-cov/actions
.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/pytest-dev/pytest-cov?branch=master&svg=true :alt: AppVeyor Build Status :target: https://ci.appveyor.com/project/pytestbot/pytest-cov
.. |requires| image:: https://requires.io/github/pytest-dev/pytest-cov/requirements.svg?branch=master :alt: Requirements Status :target: https://requires.io/github/pytest-dev/pytest-cov/requirements/?branch=master
.. |version| image:: https://img.shields.io/pypi/v/pytest-cov.svg :alt: PyPI Package latest release :target: https://pypi.org/project/pytest-cov
.. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/pytest-cov.svg :target: https://anaconda.org/conda-forge/pytest-cov
.. |commits-since| image:: https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v4.1.0.svg :alt: Commits since latest release :target: https://github.com/pytest-dev/pytest-cov/compare/v4.1.0...master
.. |wheel| image:: https://img.shields.io/pypi/wheel/pytest-cov.svg :alt: PyPI Wheel :target: https://pypi.org/project/pytest-cov
.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/pytest-cov.svg :alt: Supported versions :target: https://pypi.org/project/pytest-cov
.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/pytest-cov.svg :alt: Supported implementations :target: https://pypi.org/project/pytest-cov
.. end-badges
This plugin produces coverage reports. Compared to just using coverage run
this plugin does some extras:
coverage run -m pytest
you will have slightly different sys.path
(CWD will be
in it, unlike when running pytest
).All features offered by the coverage package should work, either through pytest-cov's command line options or through coverage's config file.
Install with pip::
pip install pytest-cov
For distributed testing support install pytest-xdist::
pip install pytest-xdist
pytest-cov 2.0
is using a new .pth
file (pytest-cov.pth
). You may want to manually remove the older
init_cov_core.pth
from site-packages as it's not automatically removed.
Uninstall with pip::
pip uninstall pytest-cov
Under certain scenarios a stray .pth
file may be left around in site-packages.
pytest-cov 2.0
may leave a pytest-cov.pth
if you installed without wheels
(easy_install
, setup.py install
etc).pytest-cov 1.8 or older
will leave a init_cov_core.pth
.::
pytest --cov=myproj tests/
Would produce a report like::
-------------------- coverage: ... ---------------------
Name Stmts Miss Cover
----------------------------------------
myproj/__init__ 2 0 100%
myproj/myproj 257 13 94%
myproj/feature4286 94 7 92%
----------------------------------------
TOTAL 353 20 94%
http://pytest-cov.rtfd.org/
The data file is erased at the beginning of testing to ensure clean data for each test run. If you
need to combine the coverage of several test runs you can use the --cov-append
option to append
this coverage data to coverage data from previous test runs.
The data file is left at the end of testing so that it is possible to use normal coverage tools to examine it.
For distributed testing the workers must have the pytest-cov package installed. This is needed since the plugin must be registered through setuptools for pytest to start the plugin on the worker.
For subprocess measurement environment variables must make it from the main process to the subprocess. The python used by the subprocess must have pytest-cov installed. The subprocess must do normal site initialisation so that the environment variables can be detected and coverage started.
Whilst this plugin has been built fresh from the ground up it has been influenced by the work done on pytest-coverage (Ross Lawley, James Mills, Holger Krekel) and nose-cover (Jason Pellerin) which are other coverage plugins.
Ned Batchelder for coverage and its ability to combine the coverage results of parallel runs.
Holger Krekel for pytest with its distributed testing support.
Jason Pellerin for nose.
Michael Foord for unittest2.
No doubt others have contributed to these tools as well.
#558 <https://github.com/pytest-dev/pytest-cov/pull/558>
_.--cov-report=''
is used without --cov-fail-under
).
Contributed by Jonathan Stewmon in #589 <https://github.com/pytest-dev/pytest-cov/pull/589>
_.#582 <https://github.com/pytest-dev/pytest-cov/pull/582>
_.#572 <https://github.com/pytest-dev/pytest-cov/pull/572>
_.#565 <https://github.com/pytest-dev/pytest-cov/pull/565>
_.Note that this release drops support for multiprocessing.
--cov-fail-under
no longer causes pytest --collect-only
to fail
Contributed by Zac Hatfield-Dodds in #511 <https://github.com/pytest-dev/pytest-cov/pull/511>
_.
Dropped support for multiprocessing (mostly because issue 82408 <https://github.com/python/cpython/issues/82408>
_). This feature was
mostly working but very broken in certain scenarios and made the test suite very flaky and slow.
There is builtin multiprocessing support in coverage and you can migrate to that. All you need is this in your
.coveragerc
::
[run] concurrency = multiprocessing parallel = true sigterm = true
Fixed deprecation in setup.py
by trying to import setuptools before distutils.
Contributed by Ben Greiner in #545 <https://github.com/pytest-dev/pytest-cov/pull/545>
_.
Removed undesirable new lines that were displayed while reporting was disabled.
Contributed by Delgan in #540 <https://github.com/pytest-dev/pytest-cov/pull/540>
_.
Documentation fixes.
Contributed by Andre Brisco in #543 <https://github.com/pytest-dev/pytest-cov/pull/543>
_
and Colin O'Dell in #525 <https://github.com/pytest-dev/pytest-cov/pull/525>
_.
Added support for LCOV output format via --cov-report=lcov
. Only works with coverage 6.3+.
Contributed by Christian Fetzer in #536 <https://github.com/pytest-dev/pytest-cov/issues/536>
_.
Modernized pytest hook implementation.
Contributed by Bruno Oliveira in #549 <https://github.com/pytest-dev/pytest-cov/pull/549>
_
and Ronny Pfannschmidt in #550 <https://github.com/pytest-dev/pytest-cov/pull/550>
_.
Note that this release drops support for Python 2.7 and Python 3.5.
#500 <https://github.com/pytest-dev/pytest-cov/pull/500>
_.#494 <https://github.com/pytest-dev/pytest-cov/pull/494>
_ and
#495 <https://github.com/pytest-dev/pytest-cov/pull/495>
_.--cov-reset
CLI option.
Contributed by Danilo Šegan in
#459 <https://github.com/pytest-dev/pytest-cov/pull/459>
_.--cov-fail-under
CLI option.
Contributed by ... Ronny Pfannschmidt's desire for skark in
#480 <https://github.com/pytest-dev/pytest-cov/pull/480>
_.#488 <https://github.com/pytest-dev/pytest-cov/pull/488>
_.#481 <https://github.com/pytest-dev/pytest-cov/pull/481>
_.toml
requirement.
Contributed by Thomas Grainger in
#477 <https://github.com/pytest-dev/pytest-cov/pull/477>
_.toml
requirement to be always be directly required (instead of being required through a coverage extra).
This fixes issues with pip-compile (pip-tools#1300 <https://github.com/jazzband/pip-tools/issues/1300>
).
Contributed by Sorin Sbarnea in #472 <https://github.com/pytest-dev/pytest-cov/pull/472>
.show_contexts
.
Contributed by Brian Rutledge in #473 <https://github.com/pytest-dev/pytest-cov/pull/473>
_.toml
extra to install requirements in setup.py.
Contributed by Christian Riedel in #410 <https://github.com/pytest-dev/pytest-cov/pull/410>
_.pytest_cov.__version__
to have the right value (string with version instead of a string
including __version__ =
).setup.py
.
Contributed by Chris Sreesangkom in #467 <https://github.com/pytest-dev/pytest-cov/pull/467>
_.#470 <https://github.com/pytest-dev/pytest-cov/pull/470>
_.#451 <https://github.com/pytest-dev/pytest-cov/pull/451>
_.#433 <https://github.com/pytest-dev/pytest-cov/pull/433>
_.examples <https://github.com/pytest-dev/pytest-cov/tree/master/examples>
_
directory) to support running tox -e pyXY
. Now the example configures a suffixed coverage data file,
and that makes the cleanup environment unnecessary.
Contributed by Ganden Schaffner in #435 <https://github.com/pytest-dev/pytest-cov/pull/435>
_.console_scripts
entrypoint that confused some Gentoo build script.
I didn't ask why it was so broken cause I didn't want to ruin my day.
Contributed by Michał Górny in #434 <https://github.com/pytest-dev/pytest-cov/pull/434>
_.coverage context <https://coverage.readthedocs.io/en/stable/contexts.html>
_
when using subprocesses.
Contributed by Bernát Gábor in #443 <https://github.com/pytest-dev/pytest-cov/pull/443>
_.#429 <https://github.com/pytest-dev/pytest-cov/pull/429>
_.pytest-xdist
2.0, which breaks compatibility with pytest-xdist
before 1.22.3 (from 2017).
Contributed by Zac Hatfield-Dodds in #412 <https://github.com/pytest-dev/pytest-cov/pull/412>
_.LocalPath has no attribute startswith
failure that occurred when using the pytester
plugin
in inline mode.--no-cov
warning. Now it's only shown if --no-cov
is present before --cov
.setup.py
so that pytest>=4.6
is required.RemovedInPytest4Warning
when using Pytest 3.10.
Contributed by Michael Manganiello in #354 <https://github.com/pytest-dev/pytest-cov/pull/354>
_.#339 <https://github.com/pytest-dev/pytest-cov/pull/339>
_.#363 <https://github.com/pytest-dev/pytest-cov/pull/>
_ and
#364 <https://github.com/pytest-dev/pytest-cov/pull/364>
_.#336 <https://github.com/pytest-dev/pytest-cov/pull/336>
_ and
#367 <https://github.com/pytest-dev/pytest-cov/pull/367>
_.--cov-append
to always enable data_suffix
(a coverage setting).
Contributed by Harm Geerts in
#387 <https://github.com/pytest-dev/pytest-cov/pull/387>
_.--cov-append
to handle loading previous data better
(fixes various path aliasing issues).#306 <https://github.com/pytest-dev/pytest-cov/issues/306>
_ and
coveragepy#881 <https://github.com/nedbat/coveragepy/issues/881>
_#348 <https://github.com/pytest-dev/pytest-cov/issues/348>
_ -
regression when only certain reports (html or xml) are used then --cov-fail-under
always fails.RecursionError
that can occur when using
cleanup_on_signal <https://pytest-cov.readthedocs.io/en/latest/subprocess-support.html#if-you-got-custom-signal-handling>
__ or
cleanup_on_sigterm <https://pytest-cov.readthedocs.io/en/latest/subprocess-support.html#if-you-got-custom-signal-handling>
__.
See: #294 <https://github.com/pytest-dev/pytest-cov/issues/294>
_.
The 2.7.x releases of pytest-cov should be considered broken regarding aforementioned cleanup API.#321 <https://github.com/pytest-dev/pytest-cov/pull/321>
_#338 <https://github.com/pytest-dev/pytest-cov/pull/338>
_.os.devnull
.
Contributed by Thomas Grainger in #332 <https://github.com/pytest-dev/pytest-cov/pull/332>
_.#319 <https://github.com/pytest-dev/pytest-cov/pull/319>
_.--cov-fail-under
.
Contributed by Martín Gaitán in #311 <https://github.com/pytest-dev/pytest-cov/pull/311>
_.#298 <https://github.com/pytest-dev/pytest-cov/pull/298>
,
#299 <https://github.com/pytest-dev/pytest-cov/pull/299>
and
#307 <https://github.com/pytest-dev/pytest-cov/pull/307>
_.#313 <https://github.com/pytest-dev/pytest-cov/pull/313>
,
#314 <https://github.com/pytest-dev/pytest-cov/pull/314>
,
#315 <https://github.com/pytest-dev/pytest-cov/pull/315>
,
#316 <https://github.com/pytest-dev/pytest-cov/pull/316>
,
#325 <https://github.com/pytest-dev/pytest-cov/pull/325>
,
#326 <https://github.com/pytest-dev/pytest-cov/pull/326>
,
#334 <https://github.com/pytest-dev/pytest-cov/pull/334>
_ and
#335 <https://github.com/pytest-dev/pytest-cov/pull/335>
_.--cov-context
CLI options that enables coverage contexts. Only works with coverage 5.0+.
Contributed by Ned Batchelder in #345 <https://github.com/pytest-dev/pytest-cov/pull/345>
_.AttributeError: 'NoneType' object has no attribute 'configure_node'
error when --no-cov
is used.
Contributed by Alexander Shadchin in #263 <https://github.com/pytest-dev/pytest-cov/pull/263>
_.#255 <https://github.com/pytest-dev/pytest-cov/pull/255>
,
#266 <https://github.com/pytest-dev/pytest-cov/pull/266>
,
#272 <https://github.com/pytest-dev/pytest-cov/pull/272>
,
#271 <https://github.com/pytest-dev/pytest-cov/pull/271>
and
#269 <https://github.com/pytest-dev/pytest-cov/pull/269>
_.pytest_cov.embed.cleanup_on_sigterm
to be reentrant (signal deliveries while signal handling is
running won't break stuff).pytest_cov.embed.cleanup_on_signal
for customized cleanup.#265 <https://github.com/pytest-dev/pytest-cov/pull/265>
_ or
#262 <https://github.com/pytest-dev/pytest-cov/pull/262>
_.#267 <https://github.com/pytest-dev/pytest-cov/pull/267>
_.#253 <https://github.com/pytest-dev/pytest-cov/pull/253>
_ and
#230 <https://github.com/pytest-dev/pytest-cov/pull/230>
_.#224 <https://github.com/pytest-dev/pytest-cov/pull/224>
_ and
#223 <https://github.com/pytest-dev/pytest-cov/pull/223>
_.#211 <https://github.com/pytest-dev/pytest-cov/issues/211>
).
Contributed by Daniel Hahler in #228 <https://github.com/pytest-dev/pytest-cov/pull/228>
.addopts
in documentation. Contributed by Samuel Giffard in
#195 <https://github.com/pytest-dev/pytest-cov/pull/195>
_.TypeError: 'NoneType' object is not iterable
in certain xdist configurations. Contributed by Jeremy Bowman in
#213 <https://github.com/pytest-dev/pytest-cov/pull/213>
_.no_cover
marker and fixture. Fixes
#78 <https://github.com/pytest-dev/pytest-cov/issues/78>
_.no_cover
check when running doctests. Contributed by Terence Honles in
#200 <https://github.com/pytest-dev/pytest-cov/pull/200>
_.#130 <https://github.com/pytest-dev/pytest-cov/issues/161>
.
Contributed by Ryan Hiebert & Ionel Cristian Mărieș in
#178 <https://github.com/pytest-dev/pytest-cov/pull/178>
.#161 <https://github.com/pytest-dev/pytest-cov/issues/161>
_.#165 <https://github.com/pytest-dev/pytest-cov/issues/165>
_.2.5.0
).
Fixes #157 <https://github.com/pytest-dev/pytest-cov/issues/157>
_.data_file
name in .coveragerc
.
Fixes #145 <https://github.com/pytest-dev/pytest-cov/issues/145>
.
Contributed by Jannis Leidel & Ionel Cristian Mărieș in
#156 <https://github.com/pytest-dev/pytest-cov/pull/156>
.--cov-fail-under
is used. Contributed by Francis Niu in PR#141 <https://github.com/pytest-dev/pytest-cov/pull/141>
_.--cov-branch
option. Fixes #85 <https://github.com/pytest-dev/pytest-cov/issues/85>
_.#144 <https://github.com/pytest-dev/pytest-cov/issues/144>
_.--cov
is used multiple times. Fixes #151 <https://github.com/pytest-dev/pytest-cov/issues/151>
_.Added a "disarm" option: --no-cov
. It will disable coverage measurements. Contributed by Zoltan Kozma in
PR#135 <https://github.com/pytest-dev/pytest-cov/pull/135>
_.
WARNING: Do not put this in your configuration files, it's meant to be an one-off for situations where you want to disable coverage from command line.
Fixed broken exception handling on .pth
file. See #136 <https://github.com/pytest-dev/pytest-cov/issues/136>
_.
#124 <https://github.com/pytest-dev/pytest-cov/issues/124>
_.addoption
use. Contributed by Florian Bruhin in PR#127 <https://github.com/pytest-dev/pytest-cov/pull/127>
_.PR#125 <https://github.com/pytest-dev/pytest-cov/pull/125>
_.PR#113 <https://github.com/pytest-dev/pytest-cov/pull/113>
_.coverage report
and
error if coverage fails to find the source instead of just printing a warning.
Contributed by David Szotten in PR#116 <https://github.com/pytest-dev/pytest-cov/pull/116>
_.--cov
parameter was used with xdist.
Contributed by Michael Elovskikh in PR#120 <https://github.com/pytest-dev/pytest-cov/pull/120>
_.skip_covered
and added --cov-report=term-skip-covered
command
line options. Contributed by Saurabh Kumar in PR#115 <https://github.com/pytest-dev/pytest-cov/pull/115>
_.>= 4.0
.--cov-report=annotate
.coverage 4.0b2
.--cov-append
command line options. Contributed by Christian Ledermann
in PR#80 <https://github.com/pytest-dev/pytest-cov/pull/80>
_.--cov-fail-under
, akin to the new fail_under
option in coverage-4.0
(automatically activated if there's a [report] fail_under = ...
in .coveragerc
).--cov-report=term
to automatically upgrade to --cov-report=term-missing
if there's [run] show_missing = True
in .coveragerc
.--cov
so it can be used with no path argument (in which case the source
settings from .coveragerc
will be used instead)..pth
installation to work in all cases (install, easy_install, wheels, develop etc)..pth
uninstallation to work for wheel installs.data_suffix=True
option (instead of the
custom suffixing).coverage.control.process_startup
).pytest-cov 1.8.X
.