Python测试之测试覆盖率统计

2024-08-26 03:20
文章标签 python 统计 测试 覆盖率

本文主要是介绍Python测试之测试覆盖率统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

安装 pytest-cov

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

pip install pytest-cov

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

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

  1. 生成覆盖率报告

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

    pytest --cov=my_project
    

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

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

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

    pytest --cov=my_project.module tests/
    
  3. 生成 HTML 覆盖率报告

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

    pytest --cov=my_project --cov-report=html
    

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

配置文件 pytest.ini

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

# 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
在这里插入图片描述



这篇关于Python测试之测试覆盖率统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107401

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数