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

127 投票
6 回答
71833 浏览
提问于 2025-04-15 15:24

我对Python的单元测试还不太熟悉,特别是coverage.py这个工具。请问在覆盖率报告中包含你实际测试文件的覆盖情况,这样做是否合适呢?

这里有一张我的HTML报告的截图作为例子。

你可以看到报告中包含了tests/test_credit_card。一开始我想把tests/这个文件夹从报告中排除,像这样:

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

我尝试了几种不同的命令,但就是无法把tests/排除在外。最后我放弃了,开始想是不是测试文件本来就应该包含在报告里。

有没有人能帮我解释一下这个问题呢?

6 个回答

56

把这个留在这里,以防有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

这样可以保留测试数据库,并且会并行运行测试。

112

这段代码的意思是:使用一个叫做“coverage”的工具来生成一个HTML格式的报告。这个报告会显示代码的测试覆盖率,也就是有多少代码被测试过了。这里的“--omit="*/test*"”部分是告诉工具在生成报告的时候,忽略掉所有在“test”文件夹里的文件。最后的“-d tests/coverage”是指定报告要保存到“tests/coverage”这个文件夹里。

114

在你的项目根目录下创建一个 .coveragerc 文件,并在里面加入以下内容:

[run]
omit = *tests*

撰写回答