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



相关推荐
SomeB1oody11 分钟前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
进制树1 小时前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
zzzzzz3101 小时前
AI 助手最危险的不是报错,而是“看起来成功”:我给工作流加了四道保险
人工智能·python
牛马也想出海1 小时前
亚马逊爬虫代理IP:IP类型选择与配置指南
开发语言·php
用户8356290780512 小时前
如何使用 Python 将 PowerPoint 转换为 PDF 文档
后端·python
菜冻鱼2 小时前
Python-pytorch-高级技巧
开发语言·人工智能·pytorch·python·深度学习·神经网络·聚类
lpfasd1232 小时前
python webview打包版卡死、开发版正常
开发语言·python
用户8356290780512 小时前
如何使用 Python 为 PowerPoint 幻灯片添加切换效果
后端·python
weixin_461408582 小时前
npm npx yarn
开发语言·前端·javascript
菜冻鱼2 小时前
Python-pytorch-模型保存与加载
开发语言·人工智能·pytorch·python·深度学习·机器学习