Tox¶
When using tox you can have ultra-compact configuration - you can have all of it in
tox.ini
:
[tox]
envlist = ...
[tool:pytest]
...
[coverage:paths]
...
[coverage:run]
...
[coverage:report]
..
[testenv]
commands = ...
An usual problem users have is that pytest-cov will erase the previous coverage data by default, thus if you run tox with multiple environments you’ll get incomplete coverage at the end.
To prevent this problem you need to use --cov-append
. It’s still recommended to clean the previous coverage data to
have consistent output. A tox.ini
like this should be enough for sequential runs:
[tox]
envlist = clean,py27,py36,...
[testenv]
commands = pytest --cov --cov-append --cov-report=term-missing ...
deps =
pytest
pytest-cov
[testenv:clean]
deps = coverage
skip_install = true
commands = coverage erase
For parallel runs we need to set some dependencies and have an extra report env like so:
[tox]
envlist = clean,py27,py36,report
[testenv]
commands = pytest --cov --cov-append --cov-report=term-missing
deps =
pytest
pytest-cov
depends =
{py27,py36}: clean
report: py27,py36
[testenv:report]
deps = coverage
skip_install = true
commands =
coverage report
coverage html
[testenv:clean]
deps = coverage
skip_install = true
commands = coverage erase
Depending on your project layout you might need extra configuration, see the working examples at https://github.com/pytest-dev/pytest-cov/tree/master/examples for two common layouts.