PyCharm:社区版是否包含覆盖率?

15

据我所知,“测试覆盖率”功能仅在专业版中可用(代码覆盖率)。

如何在PyCharm社区版中查看我的测试的代码覆盖率?

3个回答

21

正如您已经发现的那样,测试覆盖功能仅在专业版PyCharm中提供。

可以使用一个外部Python包来执行测试套件的覆盖率。这个包的名字叫coverage
您可以使用以下命令轻松安装它:

pip install coverage

那么,您可以通过PyCharm终端直接使用它(确保解释器是正确的)。

这里是一个快速示例:
假设您有一个像这样的项目结构

- project_name
    - src
        - some_code.py
    - unittests
        - test_1.py
        - test_2.py  

要运行所有单元测试文件夹,您需要在PyCharm终端中键入以下命令:

coverage run --source=./unittests -m unittest discover -s unittests/ && coverage report

请注意,此示例中我从project_name目录开始运行命令。

这样做可以运行单元测试并显示覆盖率报告。

另一个有趣的选项是创建HTML报告。如果您有此需求,请使用以下命令:

coverage run --source=./unittests -m unittest discover -s unittests/ && coverage html

这样将会添加一个新文件夹,其中包含HTML报告的所有源代码。

Coverage软件包有很多选项,可以以不同方式进行自定义设置,因此请查看文档


2
顺便提一下,unittest discover是一个关键词短语,因此您不应更改它。您需要更改命令的唯一部分以匹配测试目录是 --source=./unittests-s unittests/ - Floating Sunfish

9
您可以使用 PyCrunch插件来实现此功能。

UI

作为额外的福利,当受影响的文件发生变化时,测试将重新运行。
声明:我是这个插件的作者。

我花了一两个小时非常沮丧地尝试让PyCrunch工作。我怀疑它可能可以在最简单的测试中工作,但当我终于成功发现一个测试时,我放弃了,因为我需要的导入停止了发现。当通过PyCharm或控制台运行时,所有测试都可以正常运行。config.yaml的文档也是错误的 - 前缀连字符和后缀斜杠会破坏事情。这不是一个好的体验。我希望我在评估之前没有点赞。 - lukkea
哦,看起来Gleb Sevruk是PyCrunch的作者。如果我在阅读这个答案时知道了这一点,我会对它更加谨慎。当他在这里回答问题并推荐他的插件时,他确实应该披露这一点。(https://github.com/gleb-sevruk/pycrunch-engine) - lukkea
2
抱歉给您带来了麻烦,很难听到您遇到这样的挫折。通常情况下,在我的所有项目中都可以使用(除了异步IO测试),并且需要以更复杂的方式组织代码以满足工具的要求。与.Net替代品Ncrunch相同,第一次在复杂项目上设置它花费了我几天时间。我认为这不是一种适当的方式来反馈非商业产品,没有特定的细节。这对我和其他用户都没有帮助。相反,最好在github上开一个票或提交PR。免责声明已添加。 - Gleb Sevruk
有没有一种方法可以自动警告,如果一个函数没有被相应的单元测试函数覆盖,但是被父函数的测试覆盖了? - Stefan

0
首先你需要安装coverage。
pip install coverage

然后运行给定的命令(Django 应用程序)

coverage run --source='.' manage.py test --keepdb
coverage report --skip-covered -m

1
这看起来像是Giordano的答案。为什么要有第二个答案?你的答案有什么不同/更好的地方? - guettli
命令略有不同,例如keepdb不会在每次运行时创建临时数据库,并在终端上显示报告,skip-covered将跳过代码覆盖率达到100%的文件。 - Ankush Sahu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接