91

我是 python 单元测试的菜鸟,尤其是coverage.py。是否希望覆盖率报告包含实际测试文件的覆盖率?

这是我的HTML 报告的屏幕截图作为示例。

您可以看到报告包括tests/test_credit_card. 起初我试图tests/从报告中省略目录,如下所示:

coverage html --omit=tests/ -d tests/coverage

我尝试了该命令的几种变体,但我一生都无法获得测试/排除。接受失败后,我开始怀疑测试文件是否应该包含在报告中。

任何人都可以对此有所了解吗?

4

5 回答 5

83

coverage html --omit="*/test*" -d tests/coverage

于 2013-12-23T07:30:08.860 回答
76

在项目根文件夹中创建.coveragerc文件,并包含以下内容:

[run]
omit = *tests*
于 2017-07-06T12:10:27.553 回答
36

如果任何 Django 开发人员需要一个 .coveragerc 用于他的项目,请将其留在这里。

[run]
source = .
omit = ./venv/*,*tests*,*apps.py,*manage.py,*__init__.py,*migrations*,*asgi*,*wsgi*,*admin.py,*urls.py

[report]
omit = ./venv/*,*tests*,*apps.py,*manage.py,*__init__.py,*migrations*,*asgi*,*wsgi*,*admin.py,*urls.py

在您的项目根目录中创建一个名为 .coveragerc 的文件,粘贴上面的代码,然后运行以下命令:

coverage run manage.py test

此外,如果您希望测试执行得更快,请改为运行此命令。

coverage run manage.py test --keepdb --parallel

这将保留测试数据库并将并行运行测试。

于 2020-03-26T10:39:29.330 回答
10

.coveragerc您可以通过在项目根目录中创建一个来指定要排除的目录。

它支持通配符(您可以使用它来排除虚拟环境)注释(对于有效跟踪非常有用)。

下面的代码块显示了如何omit(取自最新文档)与多个文件和目录一起使用。

[run]
omit =
    # omit anything in a .local directory anywhere
    */.local/*
    # omit everything in /usr
    /usr/*
    # omit this single file
    utils/tirefire.py

在你的情况下,你可以在你的.coveragerc

[run]
omit = 
    # ignore all test cases in tests/
    tests/*

对于覆盖率报告的问题,您可以通过以下方式考虑测试和覆盖率:

  • 运行pytestorunittest时,将执行源代码的所有测试用例

  • 运行时coverage,它会显示未使用的源代码部分。

  • 当您使用覆盖率运行 pytest(类似于pytest -v --cov)时,它会运行所有测试用例显示未使用的源代码部分。

额外

  • 您还可以在配置文件中指定 HTML 报告的位置,例如:
[html]
directory = tests/coverage/html_report/

这将在您每次运行时创建htmljscsstests/coverage/html_report/coveragepytest -v --cov

于 2020-11-05T20:01:14.820 回答
3

您还可以明确指定哪个目录包含您想要覆盖的代码,而不是说要省略哪些内容。在一个.coveragerc文件中,如果感兴趣的目录被调用demo,这看起来像

[run]
source = demo
于 2019-03-02T02:50:34.747 回答