Python测试之测试覆盖率统计

本篇承接上一篇 Python测试框架之------ pytest介绍与示例,在此基础上介绍如何基于pytest进行测试的覆盖率统计。

要在使用 pytest 进行测试时检测代码覆盖率,可以使用 pytest-cov 插件。这个插件是基于 coverage.py,它能帮助你了解哪些代码部分被测试覆盖到,哪些没有。

安装 pytest-cov

首先,需要安装 pytest-cov。可以使用 pip 来安装:

复制代码
pip install pytest-cov

运行测试并生成覆盖率报告

安装完 pytest-cov 后,可以通过在 pytest 命令中加入 --cov 参数来启用覆盖率统计。以下是一些常见的用法:

  1. 生成覆盖率报告

    运行整个测试套件,并对整个项目生成覆盖率报告:

    bash 复制代码
    pytest --cov=my_project

    这里 my_project 应该替换成包或模块的名字。这将显示命令行中的覆盖率概要。

  2. 生成覆盖率报告,并指定覆盖哪些文件

    如果只想检查特定模块的覆盖率:

    bash 复制代码
    pytest --cov=my_project.module tests/
  3. 生成 HTML 覆盖率报告

    如果想生成一个详细的 HTML 覆盖率报告,可以添加 --cov-report 选项:

    bash 复制代码
    pytest --cov=my_project --cov-report=html

    这将在当前目录下的 htmlcov/ 文件夹中创建一个 HTML 报告。

配置文件 pytest.ini

对于更复杂的项目,可以通过修改 pytest.ini(或其他 Pytest 配置文件)来自定义覆盖率参数。例如:

ini 复制代码
# pytest.ini
[pytest]
addopts = --cov=my_project --cov-report=term-missing

这里的 --cov-report=term-missing 将在终端中显示哪些行没有被测试覆盖。

清晰可见的覆盖率报告

覆盖率报告有助于指导测试的编写。通过查看哪些代码行没有被测试覆盖,开发者可以决定是否需要添加更多的测试用例或调整现有的测试。

生成的 HTML 报告非常详细,列出了每个文件的行覆盖率,并高亮显示未被覆盖的代码行,非常适合进行深入分析。

通过这种方式,使用 pytest-cov 不仅可以帮助保证代码质量,还可以确保软件的可靠性和维护性。

产生的测试报告的格式如下:

复制代码
Name          Stmts   Miss  Cover
---------------------------------
module1.py       50      5    90%
module2.py      100     20    80%
---------------------------------
TOTAL           150     25    83%

这个摘要告诉我们module1.py有50条语句,其中5条没有在测试中执行;module2.py有100条语句,20条没有执行。整个项目的总覆盖率是83%,意味着大约83%的代码语句在测试中被执行了。

Stmts 代表的含义

在代码覆盖率报告中,"Stmts" 代表"Statements"的缩写,意思是"语句"。在编程中,一个语句是指一条执行的指令,它告诉计算机做些什么,比如赋值、调用函数、循环等。在覆盖率测试的上下文中,Stmts 数量指的是程序中所有可能执行的独立语句的总数。

覆盖率报告通常会包括几个关键指标:

  • Total Stmts:程序中所有语句的总数。
  • Miss Stmts:在测试运行期间没有被执行的语句数量。
  • Cover Stmts:在测试运行期间被执行的语句数量。
  • Coverage :覆盖率的百分比,计算方式通常是 (Cover Stmts / Total Stmts) * 100%。覆盖率越高,表明你的测试越有可能覆盖到代码的各个部分。

报告中的这个指标可以帮助开发者理解他们的测试覆盖到代码的哪些部分,以及哪些部分没有被覆盖到。理想情况下,你希望测试能够覆盖尽可能多的语句,以确保代码的各个分支都经过了测试,从而提高软件质量和可靠性。

实际示例注意

复制代码
project/  
├── src/  
│   ├── module1.py  
│   └── module2.py  
└── tests/  
    ├── test_module1.py  
    └── test_module2.py

在上一篇的项目结构中, 如果在project 目录下运行 pytest --cov, 则源码和测试代码都会被统计测试覆盖率, 如下图:

如果只需要统计源码的测试覆盖率,则执行语句 pytest --cov=src



相关推荐
是main不是漫23 分钟前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
apcipot_rain4 小时前
C++转Java日记(06)
java·开发语言
锋行天下8 小时前
langgraph 后端发自定义数据,前端接收方法概括
人工智能·python
benchmark_cc9 小时前
用 QuantDash 读取单只股票五档盘口:抽样、缺失值检查与复现记录
python·数据分析·pandas·量化交易·股票数据·quantdash
曲径海盗10 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
专注仿真10 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
jyOverQ10 小时前
我写了一个 CSDN Markdown 图片助手:告别本地图片逐张上传
python·工具·csdn
SomeOtherTime11 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood11 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青12 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树