在 PyCharm 里获得代码覆盖率
当为源代码添加测试代码后,如何知道测试得是否充分呢?通常会通过代码覆盖(Code coverage)。代码覆盖是软件测试中的一种度量,描述源代码被测试的比例和程度,所得比例称为代码覆盖率。在PyCharm内,可以在较低运行开销下,对代码执行覆盖率进行测量。本节的主要内容是讲解如何如何带代码覆盖执行测试,如何查看结果等等。(这是PyCharm 专业版提供的功能)
1. 一些基本概念
代码覆盖率(Code Coverage)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。它也是对测试工作进行量化的重要指标之一,根据其覆盖内容的不同,又可以细分为:语句覆盖、判定覆盖、条件覆盖、路径覆盖以及循环覆盖等等,强度也是从弱到强。在所有这些覆盖中语句覆盖(Statement coverage)是最简单的,也是最常用的,PyCharm 默认支持的就是语句覆盖。
- 语句覆盖/代码行覆盖:目标保证程序中每一条语句最少执行一次,其覆盖标准无法发现判定中逻辑运算的错误。
- 判定覆盖/分支覆盖:是指选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次,但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误。
- 条件覆盖:是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支。
- 条件组合覆盖:是使每个判定中条件结果的所有可能组合至少出现一次,因此判定本身的所有可能解说也至少出现一次,同时也是每个条件的所有可能结果至少出现一次。
- 路径覆盖: 是每条可能执行到的路径至少执行一次,试图覆盖软件中的所有路径;
【补充说明】对于敏捷开发团队而言,代码覆盖率是每个Sprint要完成的硬性质量标准(Exit Criteria)之一,覆盖率高低根据项目的不同而不同:75%,80%甚至100%都是可能的。
2. 配置代码覆盖参数
主菜单:File/PyCharm -> Settings/Preferences dialog -> Build, Execution, Deployment -> Coverage.
Tips: 在执行前,确保 Use bundled coverage.py 选项是被选中的, 并安装coverage 包。
3. 使用代码覆盖运行
我们依然以本章第一小节test_rectangle.py为例运行测试,PyCharm 提供了多种带代码覆盖运行方式。
-
在编辑器内, 右键从上下文菜单选择
Run <name> with Coverage
-
在 Project 工具窗口,右键从上下文菜单选择
Run <name> with Coverage
-
选择期望的 运行/调试 配置, 在主菜单选择
Run -> Run <run/debug configuration name> with coverage.
-
在主工具栏, 点击
Run <run/debug configuration name> with Coverage
按钮
4. 查看代码覆盖结果
在程序结束运行后, 就会在 Project 与 Coverage 工具窗口显示语句覆盖结果
在编辑器中打开其中的文件,可以看到侧边框用绿色显示了覆盖的行,红色显示了未覆盖的行。
除此以外,可以查看历史的覆盖率结果。 主菜单 Run -> Show Coverage Data
5. 生成覆盖率报告
主菜单选择 Run -> Generate Coverage Report
或者 在 Coverage 工具窗口点击 Generate Coverage Report 按钮。在"Generate Coverage Report"对话框中,指定将存储生成报表的目录就可以了。
6. 小结
本节内容是对执行测试内容的补充,通过代码覆盖的结果我们能快速查看到哪些代码还没被测试到,方便我们补充新的测试用例,帮助我们找到测试死角。