在Python coverage.py API中使用omit标志

12 投票
3 回答
28021 浏览
提问于 2025-04-17 07:46

我正在使用python的coverage.py来创建一个非常基础的测试套件,并且覆盖率检测运行得很好。不过,我的覆盖率报告里包含了所有调用的/usr/local/lib库和所有的__init__.py文件。

现在我的覆盖率报告的调用情况是这样的:

self.cov.html_report(directory='coverage', omit='*Test*, */usr/local/lib*,*__init__*')

我的目标是使用omit标志,去掉所有包含“Test”、 “/usr/local/lib”或“__init__”字样的类。因为我在网上找不到太多关于这个API的资料(网上有很多关于如何在命令行上做的),所以有人知道正确的语法应该是什么吗?

3 个回答

2

根据文档内容,来自 http://nedbatchelder.com/code/coverage/api.html#api

include 和 omit 是文件名模式的列表。符合 include 的文件会被计算在内,而符合 omit 的文件则不会。它们也都可以接受一个单独的字符串作为参数。

所以可以这样尝试...

self.cov.html_report(directory='coverage', omit=['*Test*', '/usr/local/lib*', '__init__*'])
6

创建这个 .coveragerc 文件

# .coveragerc to control coverage.py
[run]
branch = True
omit =
        *Test*
        */usr/local/lib*
        */__init__.py


[report]
omit =
        *Test*
        */usr/local/lib*
        */__init__.py

# Regexes for lines to exclude from consideration
exclude_lines =
    # Have to re-enable the standard pragma
    pragma: no cover

    # Don't complain about missing debug-only code:
    def __repr__
    if self\.debug

    # Don't complain if tests don't hit defensive assertion code:
    raise AssertionError
    raise NotImplementedError

    # Don't complain if non-runnable code isn't run:
    if 0:
    if __name__ == .__main__.:

ignore_errors = True

[html]


directory = coverage_html_report
22

试着在coverage()调用中省略不需要的文件:

self.cov = coverage.coverage(omit=['*Test*', '*/usr/local/lib*','*__init__*'])

我建议使用覆盖率配置文件(默认是 .coveragerc):

# .coveragerc to control coverage.py

[run]
omit =
        *__init__*
        */usr/local/lib*
        *Test*

[html]
omit =
        *__init__*
        */usr/local/lib*
        *Test*

默认情况下,覆盖率调用会考虑 .coveragerc 文件,但如果你想确保这一点,可以使用:

self.cov = coverage.coverage(config_file=True)

另外,你也可以更改配置文件的名称,并将其作为参数传递:

self.cov = coverage.coverage(config_file='/your/path/.coverage_config_file')

撰写回答