【问题标题】:Using omit flag in Python coverage.py API在 Python coverage.py API 中使用省略标志
【发布时间】:2012-01-13 14:48:01
【问题描述】:

我正在使用 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 的信息(有很多关于如何在命令行上执行此操作的信息),有人知道使这项工作的正确语法是什么吗?

【问题讨论】:

    标签: python regex code-coverage coverage.py


    【解决方案1】:

    尝试在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*
    

    默认情况下,coverage 调用会考虑 .coveragerc 文件,但如果您想确保使用:

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

    或者,您可以更改配置文件名并将其作为参数传递:

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

    【讨论】:

    • 显然现在 html 块只允许专门针对 HTML 报告输出的选项。为了在报告中省略某些文件,omit 选项必须在[report] 块中定义。见coverage.readthedocs.io/en/coverage-4.0.3/config.html
    • 同样显然空格很重要,你不能从第一行开始有不同的省略
    【解决方案2】:

    创建这个.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
    

    【讨论】:

      【解决方案3】:

      来自http://nedbatchelder.com/code/coverage/api.html#api的文档

      include 和 omit 是文件名模式的列表。匹配的文件 include 将被测量,匹配 omit 的文件不会。每一个都会 也接受单个字符串参数。

      那就试试吧……

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

      【讨论】:

        猜你喜欢
        • 2015-07-10
        • 2021-11-15
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 2015-01-19
        • 2012-08-28
        • 2012-06-15
        • 2018-05-01
        相关资源
        最近更新 更多