
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
pytest-cov
Advanced tools
.. start-badges
.. list-table:: :stub-columns: 1
* - docs
- |docs|
* - tests
- |github-actions|
* - 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
.. |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 .. |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
.. |commits-since| image:: https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v7.1.0.svg :alt: Commits since latest release :target: https://github.com/pytest-dev/pytest-cov/compare/v7.1.0...master
.. end-badges
This plugin provides coverage functionality as a pytest plugin. Compared to just using coverage run this plugin does some extras:
--cov-context=test to have the full test name including parametrization as the context).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 6.3 and older were using a .pth file to enable coverage measurements in subprocesses. This was removed in pytest-cov 7 - use coverage's patch options <https://coverage.readthedocs.io/en/latest/config.html#run-patch>_ to enable subprocess measurements.
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%
https://pytest-cov.readthedocs.io/en/latest/
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.
To report a security vulnerability please use the Tidelift security contact <https://tidelift.com/security>_.
Tidelift will coordinate the fix and disclosure.
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.
Fixed total coverage computation to always be consistent, regardless of reporting settings.
Previously some reports could produce different total counts, and consequently can make --cov-fail-under behave different depending on
reporting options.
See #641 <https://github.com/pytest-dev/pytest-cov/issues/641>_.
Improve handling of ResourceWarning from sqlite3.
The plugin adds warning filter for sqlite3 ResourceWarning unclosed database (since 6.2.0).
It checks if there is already existing plugin for this message by comparing filter regular expression.
When filter is specified on command line the message is escaped and does not match an expected message.
A check for an escaped regular expression is added to handle this case.
With this fix one can suppress ResourceWarning from sqlite3 from command line::
pytest -W "ignore:unclosed database in <sqlite3.Connection object at:ResourceWarning" ...
Various improvements to documentation.
Contributed by Art Pelling in #718 <https://github.com/pytest-dev/pytest-cov/pull/718>_ and
"vivodi" in #738 <https://github.com/pytest-dev/pytest-cov/pull/738>.
Also closed #736 <https://github.com/pytest-dev/pytest-cov/issues/736>.
Fixed some assertions in tests.
Contributed by in Markéta Machová in #722 <https://github.com/pytest-dev/pytest-cov/pull/722>_.
Removed unnecessary coverage configuration copying (meant as a backup because reporting commands had configuration side-effects before coverage 5.0).
Dropped support for subprocesses measurement.
It was a feature added long time ago when coverage lacked a nice way to measure subprocesses created in tests.
It relied on a .pth file, there was no way to opt-out and it created bad interations
with coverage's new patch system <https://coverage.readthedocs.io/en/latest/config.html#run-patch>_ added
in 7.10 <https://coverage.readthedocs.io/en/7.10.6/changes.html#version-7-10-0-2025-07-24>_.
To migrate to this release you might need to enable the suprocess patch, example for .coveragerc:
.. code-block:: ini
[run] patch = subprocess
This release also requires at least coverage 7.10.6.
Switched packaging to have metadata completely in pyproject.toml and use hatchling <https://pypi.org/project/hatchling/>_ for
building.
Contributed by Ofek Lev in #551 <https://github.com/pytest-dev/pytest-cov/pull/551>_
with some extras in #716 <https://github.com/pytest-dev/pytest-cov/pull/716>_.
Removed some not really necessary testing deps like six.
#712 <https://github.com/pytest-dev/pytest-cov/pull/712>_
and #714 <https://github.com/pytest-dev/pytest-cov/pull/714>_.#706 <https://github.com/pytest-dev/pytest-cov/pull/706>_.Added a version requirement for pytest's pluggy dependency (1.2.0, released 2023-06-21) that has the required new-style hookwrapper API.
Removed deprecated license classifier (packaging).
Disabled coverage warnings in two more situations where they have no value:
The plugin now adds 3 rules in the filter warnings configuration to prevent common coverage warnings being raised as obscure errors::
default:unclosed database in <sqlite3.Connection object at:ResourceWarning once::PytestCovWarning once::CoverageWarning
This fixes most of the bad interactions that are occurring on pytest 8.4 with filterwarnings=error.
The plugin will check if there already matching rules for the 3 categories
(ResourceWarning, PytestCovWarning, CoverageWarning) and message (unclosed database in <sqlite3.Connection object at) before adding the filters.
This means you can have this in your pytest configuration for complete oblivion (not recommended, if that is not clear)::
filterwarnings = [ "error", "ignore:unclosed database in <sqlite3.Connection object at:ResourceWarning", "ignore::PytestCovWarning", "ignore::CoverageWarning", ]
--cov-context and the no_cover marker are used together.#678 <https://github.com/pytest-dev/pytest-cov/pull/678>_.#675 <https://github.com/pytest-dev/pytest-cov/issues/675>_.--cov-precision.coverage report would.--cov-precision cli option that can override the value set in your coverage configuration.#623 <https://github.com/pytest-dev/pytest-cov/pull/623>_.#630 <https://github.com/pytest-dev/pytest-cov/pull/630>,
#631 <https://github.com/pytest-dev/pytest-cov/pull/631>,
#632 <https://github.com/pytest-dev/pytest-cov/pull/632>_ and
#633 <https://github.com/pytest-dev/pytest-cov/pull/633>_.pyproject.toml example in the docs.
Contributed by Dawn James in #626 <https://github.com/pytest-dev/pytest-cov/pull/626>_.#584 <https://github.com/pytest-dev/pytest-cov/pull/584>_.#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/pull/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/latest/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/363>_ 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/v2.8.0/subprocess-support.html#if-you-got-custom-signal-handling>__ or
cleanup_on_sigterm <https://pytest-cov.readthedocs.io/en/v2.8.0/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.FAQs
Pytest plugin for measuring coverage.
We found that pytest-cov demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.