pytest测试框架pytest-cov插件生成代码覆盖率

news2025/1/21 15:45:25

      Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-cov插件,用于生成测试覆盖率报告,帮助开发者了解哪些部分的代码被测试覆盖,哪些部分还需要进一步的测试。

pytest-cov 支持多种报告格式,包括纯文本、HTML、XML 等,开发者可以根据需要选择合适的报告格式。

并且可以配合之前文章介绍的pytest-xdist插件进行分布式测试。

官方文档:
https://pytest-cov.readthedocs.io/en/latest/index.html

适配版本说明:

python >= 3.6

pytest-cov安装

使用pip命令安装: pip install pytest-cov (安装在pytest工程所运行的python环境,python的安装目录或者虚拟环境目录,可以参考之前文章查看运行环境pycharm配置pytest运行环境)

通过pycharm安装:打开设置,按照如下图中安装插件(windows系统)

pytest-cov运行

使用时无需导入,直接在pytest运行命令中添加参数即可。主要有以下参数:

--cov=PATH:需要分析的代码路径。

--cov-report=type:要生成的报告类型:html,xml,json,lcov,term,term-missing等。

--cov-config=path覆盖范围的配置文件。默认.coveragerc。

--no-cov-on-fail:如果测试运行失败,不要报告覆盖范围。

--no-cov:完全禁用覆盖报告。

--cov-reset:重置迄今为止在选项中积累的cov源。

--cov-fail-under=MIN如果总覆盖率小于MIN,则失败。

--cov-append:结果附加到现有的数据文件中,而不是覆盖它。

--cov-branch启用分支覆盖。

--cov-context选择设置动态上下文的方法。

生成测试覆盖率报告

举例:我们的测试工程目录如下:src目录有两个python程序文件,testcase目录是测试用例。testcode.py和testclass.py中的内容如下:简单的比较函数

在test_case2.py文件中导入两个python模块,设计2条用例分别覆盖函数功能,通过参数化又不完全覆盖函数的所有代码。test_case_1传入2组参数,test_case_2传入1组参数。

import pytest
import sys
sys.path.append('..')
from src import testcode,testclass

@pytest.mark.parametrize('a,b',((1,1),(2,1)))
def test_case_1(a,b):
     testcode.compare(a,b)

@pytest.mark.parametrize('a,b',((1,1),(3,3)))
def test_case_2(a,b):
      testclass.testclass().compare(a,b)

在pytest执行语句中添加参数-cov=../src --cov-report=html,分析src目录的代码覆盖率,并生成html测试报告。

执行后默认在测试用例目录下创建htmlcov的目录,并生成html测试报告。

在浏览器下打开index.html报告,报告内容如下:

Files显示的是模块的覆盖率信息。

点击Functions查看函数覆盖率:

点击Classes查看类的覆盖率:

点进某个文件查看文件内的行覆盖详细信息:绿色表示覆盖,红色未覆盖

testclass文件:

testcode文件:

在一些大型的pytest工程中,用例很多,一般会使用分布式执行,比如开头提到的使用pytest-xdist插件的分布式执行功能,参数中添加-n 2可以起两个进程执行等。

其他参数的简要介绍

--no-cov-on-fail:如果测试运行失败,不要报告覆盖范围。

举例:设置用例会执行失败(比如上面的用例中加上assert False),当执行参数带上--no-cov-on-fail时,用例执行有失败时,就不会产生覆盖率报告。

--no-cov:完全禁用覆盖报告。

当执行命令加上该参数后,不会生成代码覆盖率报告。

--cov-fail-under=MIN如果总覆盖率小于MIN,则认为不达标。

举例:执行命令增加参数--cov-fail-under=90要求覆盖率不低于90%

当执行后结果如下:覆盖率不达标,会有报错信息。

--cov-context:当我们在多个执行用例时希望累积这些代码覆盖率时我们可以加上该参数--cov-context=test(参数设置其他值会报错)。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

---祝愿大家都能够龙腾虎跃,步步高升!!!

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

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

相关文章

修复vcruntime140.dll方法分享

修复vcruntime140.dll方法分享 最近在破解typora的时候出现了缺失vcruntime140.dll文件的报错导致软件启动失败。所以找了一番资料发现都不是很方便的处理,甚至有的dll处理工具还需要花钱????,我本来就是为…

前端学习 Vue 插槽如何实现组件内容分发?

目录 一、Vue.js框架介绍二、什么是Vue 插槽三、Vue 插槽的应用场景四、Vue 插槽如何实现组件内容分发 一、Vue.js框架介绍 Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它设计得非常灵活,可以轻松地被集成到现有的项目中,也可以作为一个完整…

新型发电系统——光伏行业推动能源转型

一、发展背景 “十四五”期间,随着“双碳”目标提出及逐步落实,本就呈现出较好发展势头的分布式光伏发展有望大幅提速。就“十四五”光伏发展规划,国家发改委能源研究所可再生能源发展中心副主任陶冶表示,“双碳”目标意味着国家…

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打 哈喽小伙伴们好,我是Stark-C~ 很多有经验的电脑玩家在自己DIY电脑选购内存条的时候,除了内存总容量,最看重的参数那就是频率了。内存频率和我们常说的CPU主频一样&…

计网之IP

IP IP基本认识 不使用NAT时,源IP地址和目的IP地址不变,只要源MAC和目的MAC地址在变化 IP地址 D类是组播地址,E类是保留地址 无分类地址CIDR 解决直接分类的B类65536太多,C类256太少a.b.c.d/x的前x位属于网路号,剩…

pytest测试框架pytest-random-order插件随机执行用例顺序

Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-random-order插件,随机设置pytest测试用例的运行顺序,并对随机性进行一些控制。 官方文档: https://pytest-cov.readthedocs.io/en/latest/index.html 适配版本说明&#x…

ComfyUI局部重绘的四种方式 (附件工作流在最后)

前言 局部重绘需要在图片中选择重绘区域,点击图片右击选择Open in MaskEditor(在蒙版编辑器中打开),用鼠标描绘出需要重绘的区域 方式一:重绘编码器 这种方式重绘比较生硬,需要额外搭配使用才行 方式二&…

ThreadPoolExecutor基于ctl变量的声明周期管理

个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor?可以参考: 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值&#xff…

逆变器--学习笔记(一)

并网: 逆变器中的“并网”指的是逆变器将其产生的交流电与电网同步,并输送到公共电网中。并网逆变器通常用于太阳能发电系统和其他分布式发电系统,将其产生的电能输送到电网供其他用户使用。 THD谐波失真总量: 逆变器的THD(Tot…

【TB作品】温度DS18B20读取,温控风扇,ATMEGA128单片机,Proteus仿真

读取温度; PWM风扇控制; 蜂鸣器控制。 写博客介绍这个基于ATmega128的作品时,可以从以下几个方面展开描述: 概述 介绍项目的背景和目的,说明使用ATmega128的原因以及项目的整体架构。 硬件设计 主要元件 详细列出…

180Kg大载重多旋翼无人机技术详解

一、机体结构与材料 180Kg大载重多旋翼无人机在机体结构上采用了高强度轻量化设计。其主体框架采用航空铝合金材料,既保证了机体的结构强度,又减轻了整体重量。同时,关键部位如连接件、旋翼支撑臂等则采用碳纤维复合材料,以进一步…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口,电商企业可以实现商品同步功能: 商品信息同步:通过接口可以实时同步主流电商平台上的商品信息,包括商品标题、价格、库存、销量等数据,确保企业在自…

微服务中的Docker详细学习

Docker的个人理解 首先我对于Docker的理解分为两部分,第一是对名字上的理解,我们都知道docker的英文翻译是“码头工人”的意思,所以我们也可以理解为docker是码头上的一个个集装箱的使用。这也与他的图标很相似。其次我是对于其功能上的理解&…

Excel显示/隐藏批注按钮为什么是灰色?

在excel中,经常使用批注来加强数据信息的提示,有时候会把很多的批注显示出来,但是再想将它们隐藏起来,全选工作表后,“显示/隐藏批注”按钮是灰色的,不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

002-基于Sklearn的机器学习入门:回归分析(上)

本节及后续章节将介绍机器学习中的几种经典回归算法,所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇,将介绍基础的线性回归方法,包括线性回归、逻辑回归、多项式回归和岭回归等。 2.1 回归分析概述 回归(Regression&…

【知识学习】Unity3D中Scriptable Render Pipeline的概念及使用方法示例

Unity3D中的Scriptable Render Pipeline(SRP)是一种高度可定制的渲染管线框架,允许开发者完全控制渲染流程,以适应不同的渲染需求和硬件平台。SRP使得开发者可以编写自己的渲染逻辑,包括摄像机管理、渲染设置、光照处理…

使用RNN模型构建人名分类器

使用RNN模型构建人名分类器 1 项目需求和实现分析 短文本分类问题 2 数据处理三部曲 场景1:数据处理三部曲示意图 场景2:三个字母onehot编码形状分析 3 构建RNN模型 4 构建训练函数并进行训练 - 有关模型、损失函数、优化器三者在pytorch中的表示 5…

还不知道工业以太网和现场总线区别???

工业以太网 工业以太网是一种专为工业环境设计的网络通信技术,它基于标准的以太网技术,但针对工业应用进行了优化。工业以太网能够适应高温、低温、防尘等恶劣工业环境,采用TCP/IP协议,与IEEE 802.3标准兼容,并在应用层…

fastapi+vue3前后端分离开发第一个案例整理

开发思路 1、使用fastapi开发第一个后端接口 2、使用fastapi解决cors跨域的问题。cors跨域是浏览器的问题,只要使用浏览器,不同IP或者不同端口之间通信,就会存在这个问题。前后端分离是两个服务,端口不一样,所以必须要…

【课程总结】Day13(上):使用YOLO进行目标检测

前言 在上一章《【课程总结】Day11(下):YOLO的入门使用》的学习中,我们通过YOLO实现了对图片的分类任务。本章的学习内容,将以目标检测为切入口,了解目标检测流程,包括:数据标准、模…