是否可以从coverage.py报告中排除测试目录?

Kyl*_*Fox 45 python testing code-coverage software-quality coverage.py

我是一个有python单元测试的新手,尤其是coverage.py.覆盖报告是否包含实际测试文件的覆盖范围是否可取?

以下是我的HTML报告的屏幕截图作为示例.

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

coverage html --omit=tests/ -d tests/coverage
Run Code Online (Sandbox Code Playgroud)

我尝试了该命令的几种变体,但我不能为我的生活得到测试/排除.在接受失败后,我开始怀疑是否应该将测试文件包含在报告中.

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

小智 43

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

  • 只需添加:可以使用逗号添加多个目录/文件,例如`--omit =“ * / test *,config / *。conf”` (2认同)
  • 应该是最高评价的答案。没人想创建覆盖配置文件 (2认同)

小智 33

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

[run]
omit = *tests*
Run Code Online (Sandbox Code Playgroud)

  • @lmiguelvargasf:省略选项是** multi-string **,因此您可以枚举要省略的多个目录(请参见[doc](https://coverage.readthedocs.io/en/latest/source.html#execution中的示例)) (2认同)

Kle*_*eri 27

如果任何 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
Run Code Online (Sandbox Code Playgroud)

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

coverage run manage.py test
Run Code Online (Sandbox Code Playgroud)

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

coverage run manage.py test --keepdb --parallel
Run Code Online (Sandbox Code Playgroud)

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


Nat*_*han 8

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

[run]
source = demo
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 8

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

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

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

[run]
omit =
    # omit anything in a .local directory anywhere
    */.local/*
    # omit everything in /usr
    /usr/*
    # omit this single file
    utils/tirefire.py
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以在您的.coveragerc:

[run]
omit = 
    # ignore all test cases in tests/
    tests/*
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

额外的

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

这将创建HTMLJSCSS等内tests/coverage/html_report/每次运行coveragepytest -v --cov