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

时间:2009-10-27 06:08:07

标签: python testing software-quality code-coverage coverage.py

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

以下是我HTML report的屏幕截图。

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

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

我尝试了该命令的几个变体,但我可以在我的生活中得到测试/排除。在接受失败后,我开始怀疑测试文件是否假设包含在报告中。

有人可以对此有所了解吗?

6 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:20)

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

[run]
omit = *tests*

答案 2 :(得分:14)

如果任何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

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

答案 3 :(得分:8)

  

编辑:我想我现在同意以下评论,认为这不是一个好消息   将生产代码测试与测试测试混合的想法   码。我无法删除已接受的答案,所以我会保持不变。

     

** 请低估我的答案! **


查看测试的覆盖范围是一个好主意,因为它可以指出问题。如果你的测试代码没有运行,那么编写它就没有多大意义了!

我总是得到的是当我给两个单元测试函数同名时 - 我在原版之后几个月添加了一个新测试并恰好选择了相同的名称。 unittest框架不会抱怨这个 - 其中一个函数隐藏了另一个,它只是不会运行其中一个测试!详细的报道报告会立即显示问题。

如果您的测试中还有其他代码未运行,那么这也可能指向其他错误,尽管通常会有几行样板代码可能无法覆盖,具体取决于调用测试的方式,所以不要痴迷于达到100%。

如果你有不再需要的测试代码,那么删除总是好的!

答案 4 :(得分:2)

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

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

下面的代码块显示了如何omit(取自latest documentation)用于多个文件和目录。

[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/*

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

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

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

  • 当您运行具有覆盖率的pytest(类似pytest -v --cov之类的程序时,它将运行所有测试用例 ,并且会显示未使用的部分源代码。< / p>

额外

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

每次运行{{1}时,这都会在tests/coverage/html_report/内创建 html js css 等。 }或coverage

答案 5 :(得分:0)

您还可以显式指定要覆盖其代码的目录,而无需说出要忽略的内容。在.coveragerc文件中,如果感兴趣的目录称为demo,则看起来像

[run]
source = demo