让pytest在完整测试套件运行时才要求代码覆盖率

4 投票
2 回答
1852 浏览
提问于 2025-06-18 04:10

我正在使用类似下面的代码:

# .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()

这样做的好处是,它不仅仅是关闭了报告功能,还真正禁用了覆盖率检查,这样在这些情况下,测试运行得更快。

撰写回答