在 PyCharm 里获得代码覆盖率

当为源代码添加测试代码后,如何知道测试得是否充分呢?通常会通过代码覆盖(Code coverage)。代码覆盖是软件测试中的一种度量,描述源代码被测试的比例和程度,所得比例称为代码覆盖率。在PyCharm内,可以在较低运行开销下,对代码执行覆盖率进行测量。本节的主要内容是讲解如何如何带代码覆盖执行测试,如何查看结果等等。(这是PyCharm 专业版提供的功能)

1. 一些基本概念

代码覆盖率(Code Coverage)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。它也是对测试工作进行量化的重要指标之一,根据其覆盖内容的不同,又可以细分为:语句覆盖、判定覆盖、条件覆盖、路径覆盖以及循环覆盖等等,强度也是从弱到强。在所有这些覆盖中语句覆盖(Statement coverage)是最简单的,也是最常用的,PyCharm 默认支持的就是语句覆盖

  1. 语句覆盖/代码行覆盖:目标保证程序中每一条语句最少执行一次,其覆盖标准无法发现判定中逻辑运算的错误。
  2. 判定覆盖/分支覆盖:是指选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次,但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误。
  3. 条件覆盖:是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支。
  4. 条件组合覆盖:是使每个判定中条件结果的所有可能组合至少出现一次,因此判定本身的所有可能解说也至少出现一次,同时也是每个条件的所有可能结果至少出现一次。
  5. 路径覆盖: 是每条可能执行到的路径至少执行一次,试图覆盖软件中的所有路径;

【补充说明】对于敏捷开发团队而言,代码覆盖率是每个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. 小结

本节内容是对执行测试内容的补充,通过代码覆盖的结果我们能快速查看到哪些代码还没被测试到,方便我们补充新的测试用例,帮助我们找到测试死角。
图片描述