我是一个有python单元测试的新手,尤其是coverage.py。是否需要覆盖报告包括实际测试文件的覆盖范围?
以下是我HTML report的屏幕截图。
您可以看到该报告包含tests/test_credit_card
。起初我试图从报告中省略tests/
目录,如下所示:
coverage html --omit=tests/ -d tests/coverage
我尝试了该命令的几个变体,但我可以不在我的生活中得到测试/排除。在接受失败后,我开始怀疑测试文件是否假设包含在报告中。
有人可以对此有所了解吗?
答案 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/*
对于覆盖率报告的问题,您可以通过以下方式考虑测试和覆盖率:
运行pytest
或unittest
时,将执行源代码的所有测试用例
运行coverage
时,它会显示源代码中未被使用的部分。
当您运行具有覆盖率的pytest(类似pytest -v --cov
之类的程序时,它将运行所有测试用例 ,并且会显示未使用的部分源代码。< / p>
额外:
[html]
directory = tests/coverage/html_report/
每次运行{{1}时,这都会在tests/coverage/html_report/
内创建 html , js , css 等。 }或coverage
答案 5 :(得分:0)
您还可以显式指定要覆盖其代码的目录,而无需说出要忽略的内容。在.coveragerc
文件中,如果感兴趣的目录称为demo
,则看起来像
[run]
source = demo