让pytest在完整测试套件运行时才要求代码覆盖率
我正在使用类似下面的代码:
# .coveragerc
fail_under = 100
还有
# pytest.ini
[pytest]
addopts = --cov=modname/ --cov-report=term-missing
来确保我的测试套件在代码覆盖率不达到100%时会失败。
这样做是有效的,但问题是如果我只运行一部分测试,比如:
pytest some/specific/test.py
它就会抱怨说覆盖率没有达到100%,因为那个单独的测试文件并没有覆盖整个代码库。有没有更好的办法让pytest在运行完整的测试套件时才检查覆盖率呢?
相关问题:
- 暂无相关问题
2 个回答
2
你可以通过在命令中添加以下标志,暂时覆盖你的 .coveragerc
文件:
--cov-fail-under=x
这里的 x 是一个百分比,表示低于这个百分比就会失败(如果你把它设置为 0,那么代码覆盖率就不会导致失败)
所以,在你的情况下,你可以运行:
pytest some/specific/test.py --cov-fail-under=x
0
根据来自这个链接的建议,我在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()
这样做的好处是,它不仅仅是关闭了报告功能,还真正禁用了覆盖率检查,这样在这些情况下,测试运行得更快。