Python中的代码覆盖率和测试覆盖率

2025年1月5日 | 阅读 7 分钟

在本教程中,我们将学习代码覆盖率和测试覆盖率之间的一些重要区别。我们还将理解这些概念的基础知识。这些概念非常相似,因此可能难以区分。掌握这些原则将使您能够识别项目中可能缺乏全面测试覆盖率的重要方面,从而最终增强应用程序的健壮性。

广义来说,代码覆盖率是一个目标,意味着当您的代码在测试中执行时,它被认为已实现完全的代码覆盖率。另一方面,测试覆盖率是主观的,会受到您考虑的元素和定义的范围的影响。

什么是代码覆盖率?

随着项目规模的增长,确定所有代码部分都已彻底测试变得越来越困难。这也很难弄清楚有多少代码未被测试以及这些未测试的部分在哪里。这就是代码覆盖率的价值所在。它揭示了您代码中缺乏测试覆盖率的部分,使您能够有效地探索和识别这些差距。

代码覆盖率通过检查测试期间使用的代码部分来工作。它还给您一个百分比,显示您的代码被测试了多少。可以将其视为塑造粘土 - 要实现 100% 的代码覆盖率,您需要调整您的测试,就像将一团粘土塑造成特定的形状一样。

假设您的代码就像一个巨大的拼图,每一块拼图都是一行代码。代码覆盖率会跟踪在测试期间哪些拼图块已到位,哪些仍缺失。它告诉您拼图完成了多少百分比。

此信息很有帮助,因为它表明您的代码中的哪些部分可能存在问题或错误,因为它们尚未经过测试。它就像一张地图,可以引导您找到需要更多关注和测试的区域,使您的软件更可靠。

当然,以下是代码覆盖率特征的简单解释:

  1. 衡量测试进度 - 代码覆盖率可帮助您了解您的代码已被测试了多少。它就像一个进度条,告诉您在测试软件方面取得了多大的进展。
  2. 未覆盖区域 - 它突出了您代码中未被测试的部分。这些就像房间里的黑暗角落,需要仔细查看。
  3. 百分比指示器 - 代码覆盖率给您一个百分比,显示您的代码被测试了多少。它就像您测试工作的记分卡。
  4. 检测差距 - 它有助于您发现测试中的差距。就像拼图缺少零件一样,代码覆盖率会识别出您可能忽略了测试的区域。
  5. 提高可靠性 - 通过关注未覆盖的部分,您可以使软件更加可靠。这就像修复围栏中的薄弱环节,使其更安全。
  6. 测试指导 - 它就像一张地图,显示您应该在哪里集中测试工作,从而使您的测试策略更有效。
  7. 质量保证 - 代码覆盖率通过确保所有代码都经过彻底测试来为软件的整体质量做出贡献,从而降低了出现意外问题的可能性。

总之,代码覆盖率是一个有用的工具,它通过指示您代码的哪些部分需要更多关注来帮助您确保您的软件经过充分测试且可靠。

Python 中的代码覆盖率

Python 中的代码覆盖率是一种衡量您的 Python 代码被测试用例测试了多少的方法。它有助于您确定 Python 程序哪些部分被测试覆盖,哪些部分未被覆盖。这对于确保您的代码健壮可靠非常重要。我们将使用 unittest 模块以及 coverage 模块。coverage 模块用于获取代码覆盖率。我们可以使用以下命令进行安装。

让我们理解以下示例 -

示例 - Sample.py

测试用例 - sample_test.py

现在运行以下命令以获取总覆盖率。

测试覆盖率

测试覆盖率就像一个衡量标准,用于衡量我们的测试覆盖了代码可以做的所有不同事情的程度。想象一下您有一堆粘土,并且您想用它制作所有可能的物品。我们之前覆盖 100% 代码的测试在测试覆盖率方面还不够,因为用粘土可以创造出很多东西。所以,当我们谈论测试覆盖率时,我们的意思是要确保我们的测试考虑了代码中所有不同的可能性和场景。

测试覆盖率的特征

测试覆盖率的特征是描述测试如何有效评估代码的重要方面。以下是测试覆盖率的关键特征:

  1. 范围:测试覆盖率评估测试执行代码的程度。它衡量哪些代码部分已被测试,哪些尚未被测试。
  2. 测量单位:测试覆盖率可以使用各种单位进行测量,例如代码行(行覆盖率)、分支(分支覆盖率)、语句(语句覆盖率)或函数(函数覆盖率)。
  3. 百分比:测试覆盖率通常表示为百分比。例如,70% 的代码覆盖率意味着 70% 的代码已被测试执行。
  4. 代码路径:测试覆盖率还可以考虑代码的不同执行路径,包括主路径或备用路径,以确保所有逻辑流程都经过测试。
  5. 分支覆盖率:这衡量了测试期间已执行的决策点(分支)的百分比,确保了真分支和假分支都被执行。
  6. 语句覆盖率:它侧重于评估代码中的每个语句是否已被测试执行。
  7. 函数或方法覆盖率:这评估了代码中的所有函数或方法是否已被测试调用。
  8. 边界覆盖率:确保测试覆盖输入范围的边缘和边界,有助于在这些关键点检测潜在问题。
  9. 代码复杂度:一些覆盖率指标考虑代码复杂度因素,例如圈复杂度,它考虑了代码中的分支和决策点。

这些特征有助于开发人员和测试人员评估其测试工作的全面性和有效性,确保代码得到充分执行并识别潜在问题。

Python 中的测试覆盖率

与代码覆盖率不同,代码覆盖率只需要有限数量的断言,在这种情况下,我们将需要包含更多断言。在处理上一节中提到的示例代码时,我们需要考虑一组额外的断言。

让我们理解以下示例 -

示例 -

结论

本教程介绍了代码覆盖率和测试覆盖率之间的基本区别,阐明了它们在软件开发中的重要性。代码覆盖率是一个客观的度量标准,确保在测试期间执行所有代码部分,帮助识别未测试的区域。另一方面,测试覆盖率更加主观,侧重于基于不同场景和潜在结果的测试的全面性。

提供的 Python 代码示例演示了如何使用 unittest 框架和 coverage 模块来实现测试覆盖率。这些测试用例彻底评估了函数,提供了对其行为和可靠性的见解。