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. It can show which parts of your code are being exercised by tests, and which are not.

The latest version is coverage.py 5.3, released September 13, 2020. It is supported on:

Python versions 2.7, 3.5, 3.6, 3.7, 3.8, and 3.9 beta.

PyPy2 7.3.1 and PyPy3 7.3.1.

For Enterprise¶ Available as part of the Tidelift Subscription.

Coverage and thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. If you want the flexibility of open source and the confidence of commercial-grade software, this is for you. Learn more.

Quick start¶ Getting started is easy: Install coverage.py: $ pip install coverage For more details, see Installation. Use coverage run to run your test suite and gather data. However you normally run your test suite, you can run your test runner under coverage. If your test runner command starts with “python”, just replace the initial “python” with “coverage run”. Instructions for specific test runners: pytest unittest nosetest If you usually use: $ pytest arg1 arg2 arg3 then you can run your tests under coverage with: $ coverage run -m pytest arg1 arg2 arg3 Many people choose to use the pytest-cov plugin, but for most purposes, it is unnecessary. Change “python” to “coverage run”, so this: $ python -m unittest discover becomes: $ coverage run -m unittest discover Nose has been unmaintained for a long time. You should seriously consider adopting a different test runner. Change this: $ nosetests arg1 arg2 to: $ coverage run -m nose arg1 arg2 To limit coverage measurement to code in the current directory, and also find files that weren’t executed at all, add the --source=. argument to your coverage command line. Use coverage report to report on the results: $ coverage report -m Name Stmts Miss Cover Missing ------------------------------------------------------- my_program.py 20 4 80% 33-35, 39 my_other_module.py 56 6 89% 17-23 ------------------------------------------------------- TOTAL 76 10 87% For a nicer presentation, use coverage html to get annotated HTML listings detailing missed lines: $ coverage html Then open htmlcov/index.html in your browser, to see a report like this.