Python测试之测试覆盖率统计

news2024/9/21 18:41:10

本篇承接上一篇 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
在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PySide6-QML】2. 添加菜单栏

文章目录 前言实现添加菜单栏添加菜单添加子菜单点击动作添加快捷键 前章回顾:【PySide6-QML】1. 创建新项目 前言 本文使用 MenuBar 添加工具菜单栏,Action 添加子菜单,并添加快捷键和动作回调。 实现 添加菜单栏 import QtQuick.Contr…

centos mongodb安装+开机启动

1.mongodb安装 Centos系统中mongodb的安装详解_centos安装mongodb-CSDN博客 步骤1-下载 下载地址:Download MongoDB Community Server | MongoDB 步骤2-安装-修改配置 Centos系统中mongodb的安装详解_centos安装mongodb-CSDN博客 下载包到 /usr/local/ 解压 tar…

新一代RK3576芯片,3588平替吗?

瑞芯微RK3576是一款高性能、低功耗的SoC(系统级芯片)处理器,适用于基于ARM的PC、边缘计算设备、个人移动互联网设备等多种应用场景。它采用Arm架构的八核心CPU,集成了GPU、MCU、NPU、VPU等多种计算核心,并具有丰富的外…

基于深度学习的交通标志检测识别系统(含UI界面、yolov5、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov5、yolov5 SE注意力机制,两个模型都已训练好,可直接使用。 数据集:     网上下载的数据集,格式都已转好,可…

K8S对接Ceph分部署存储

文章目录 一、Ceph理论知识1、Ceph简介2、Ceph分布式存储的优点3、Ceph核心组件 二、部署Ceph高可用集群1、服务器环境信息2、部署前环境准备工作3、部署Ceph监控服务Monitor4、激活Ceph存储服务OSD 三、K8S对接Ceph存储1、K8S对接Ceph RBD实现数据持久化2、基于Ceph RBD生成PV…

【精选】基于数据可视化的智慧社区内网平台(程序员阿龙出品精品)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

游戏出海,燃动全球,“安全”如何通关?

泼天的富贵落在了游戏圈,用事实打脸了男人消费不如狗的谬论。 这几天,无论是游戏圈内人还是圈外人,无人不知晓《黑神话:悟空》。这部头顶「3A国产游戏之光」的作品自6月8日预售以来,全平台销量超过800万份,…

基于R语言的统计分析基础:数据结构

R语言是一种用于统计分析和图形表示的编程语言和软件环境,它提供了多种数据结构以存储和操作数据。这些数据结构包括向量、矩阵、数组、数据框、列表、因子、Tibble、环境、公式、调用以及表达式。 向量(Vector) 向量是R中最基本的数据结构…

InstantID: Zero-shot Identity-Preserving Generation in Seconds

https://arxiv.org/pdf/2401.07519#page9.73https://github.com/instantX-research/InstantID?tabreadme-ov-filehttps://github.com/instantX-research/InstantID/pull/89/files 问题引入 目标是生成和reference图片相符合的图片,特别是人脸;现在基于…

C++必修:unordered_set/unordered_map

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. unordered_set的介绍 unordered_set是一种关联式容器,它具有以下几…

使用MVC设计模式根据软件系统设计建设高校数字化教育教学资源共享平台

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(6 分) 【问题 3】(10 分) 答案 【问题 1】答案 【问题 2】答案 【问题 3】解析 相关推荐 案例 阅读以下关于软件系统设计的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 某软件企业受该省教育部门委托…

【SpringCloud Alibaba】(九)学习 Gateway 服务网关

目录 1、网关概述1.1、没有网关的弊端1.2、引入 API 网关 2、主流的 API 网关2.1、NginxLua2.2、Kong 网关2.3、Zuul 网关2.4、Apache Shenyu 网关2.5、SpringCloud Gateway 网关 3、SpringCloud Gateway 网关3.1、Gateway 概述3.2、Gateway 核心架构 4、项目整合 SpringCloud …

【妙招大放送】:苹果手机数据恢复的4个技巧来啦!

手机是我们日常生活中不可或缺的一部分,它存储着照片、视频、联系人等许多重要的数据。但是,意外时有发生,我们有时会因为软件崩溃或者是手机损坏等的原因导致这些重要的数据丢失。那么,对于苹果用户来说,苹果手机数据…

电源技术中的深力科强力推荐一款低功耗、高效率同步降压变换器SiLM6609 致力于为您提供高品质电源技术解决方案

在能源紧张且智能化技术高速发展的当下,电源是电子设备不可或缺的核心。电源的质量和效率直接关系到设备的稳定运行和能耗控制,对于提高设备性能和降低运营成本至关重要。 为应对现代电子设备对性能与能耗的严苛要求,SiLM6609——低功耗、高…

.NET 一款通过白名单程序执行命令的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Adobe Photoshop PS v25.6 下载安装教程(PS下载)

前言 Adobe Photoshop 是一款专业强大的图片处理工具,从照片编辑和合成到数字绘画、动画和图形设计,一流的图像处理和图形设计应用程序是几乎每个创意项目的核心所在。利用 Photoshop 在桌面上的强大功能,您可以在灵感来袭时随时随地进行创作…

vue2使用electron-builder打包-使用electron的api实现文件下载

本项目用的是vue2版本开发,最后使用electron-builder打包成桌面应用程序 一、需求描述 1、用户点击按钮,下载html文件 2、代码 exportHtml() { //.html是放在public文件夹下面的本地文件axios.get("/html/合同模板.html").then(res > {let…

网络通信和TCP/IP协议详解

目录 网络协议 一、计算机网络是什么? 定义和分类 计算机网络发展简史 二、计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 IP、TCP 和UDP TCP/IP 网络传输中的数据 地址和端口号 MAC 地址 IP 地址 端口号 综述 三、TCP 特性 TCP 三次握…

2024最新影视视频APP源码/猕猴桃影视系统源码/独立后台(支持安卓端+苹果端)

源码简介: 最新影视视频APP源码,它是猕猴桃影视系统源码,它有个独立的后台,无论你是安卓还是苹果用户,都能轻松使用呢。 绿豆源码、绿豆影视、小乌2.1,还有猕猴桃影视。追影兔新版本的整体结构设计已经全…

Transformer模型-3-基本工作流程

继 《Transformer模型-2-模型架构》该文主讲Transformer的基本工作流程。 第一步: 获取输入句子某单词的向量X。 X:是指某单词的向量,transformer是分别计算word embedding和position embedding并将两者相加得到向量X。 Embedding Embeddings 是一种将现…