I am using something like
# .coveragerc
fail_under = 100
and
# pytest.ini
[pytest]
addopts = --cov=modname/ --cov-report=term-missing
to make it so that my test suite runs the coverage and fails if it isn't 100%.
This works, but the problem is that if I run only a subset of the tests, like
pytest some/specific/test.py
it then complains that the coverage is not 100%, because of course that one single test file doesn't cover the entire codebase. Is there a better way to make pytest run coverage, but only when running the full test suite?
Using a tip from https://github.com/pytest-dev/pytest-cov/issues/418#issuecomment-657219659, I came up with the following (in conftest.py
):
def pytest_configure(config):
if config.args not in [[], ['mylib'], ['mylib/']]:
cov = config.pluginmanager.get_plugin('_cov')
cov.options.no_cov = True
if cov.cov_controller:
cov.cov_controller.pause()
This also has the benefit of actually disabling coverage, not just the reporting, which makes the tests run faster in these cases.