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



相关推荐
z are12 分钟前
包含 Python 与 Jupyter的Anaconda的下载安装
开发语言·python·jupyter
武昌库里写JAVA20 分钟前
99AutoML 自动化机器学习实践--NNI 自动化机器学习工具包
c语言·开发语言·数据结构·算法·二维数组
傻啦嘿哟26 分钟前
在Excel中通过Python运行公式和函数实现数据计算
开发语言·python·excel
使者大牙26 分钟前
【PyTorch单点知识】深入了解 nn.ModuleList和 nn.ParameterList模块:灵活构建动态网络结构
人工智能·pytorch·python·深度学习
qh0526wy41 分钟前
量化交易的个人见解
python
qq_426938481 小时前
git-fork操作指南
git·python
matrixlzp1 小时前
Python 解析 JSON 数据
python
小李很执着1 小时前
【深度智能】:迈向高级时代的人工智能全景指南
人工智能·python·深度学习·算法·机器学习·语言模型
Peanuts.1 小时前
VUE使用echarts编写甘特图(组件)
开发语言·javascript·echarts
东离与糖宝1 小时前
Rust 所有权 借用与引用
开发语言·后端·rust