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

      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(参数设置其他值会报错)。

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是 Elasticsearch 数据预热?

引言:在现代的信息检索和数据分析领域,Elasticsearch 已经成为一个广泛应用的分布式搜索和分析引擎。作为开源项目的一部分,Elasticsearch 提供了强大的实时搜索和分析能力,使得处理大规模数据变得更加高效和可靠。然而&#xff0…

GPT-5 一年半后发布,对此你有何期待?

IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。此外,穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的…

在线教育项目(一):如何防止一个账号多个地方登陆

使用jwt做验证,使用账号作为redis中的key,登录的时候生成token放到redis中,每次申请资源的时候去看token 有没有变,因为token每次登录都会去覆盖,只要第二次登录token就不一样了

在我们的大数据平台(XSailbaot)上进行企业级数据建模的思路

1. 背景 笔者所在的公司是差不多二十年前搞CIM(公共信息模型的)起家的。当时公司的前辈搞了基于CIS协议的模型服务器、数据服务器、模式编辑器等,形成了一套基于公共信息模型建模的平台系统。其中可视化建模,建好了模式类以后&am…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS,取得下行时钟同步,并获取小区的PCI;如果失败则转步骤1搜索下一个频点;否则继续后续步骤; 3.解析Mib,…

设计NOR Flash(SPI接口)的Flashloader(MCU: stm32f4)

目录 概述 1 软硬件 1.1 软硬件信息表 1.2 NOR Flash芯片(W25Q64BVSSI) 1.2.1 W25Q64BVSSI芯片介绍 1.2.2 NOR Flash接口 1.3 MCU与NOR Flash接口 2 SPI Flash功能实现 2.1 软件框架结构 2.2 代码实现 2.2.1 Dev_Inf文件 2.2.2 W25QXX驱动程…

区间动态规划——最长回文子串(C++)

难得心静。 ——2024年6月30日 什么是区间动态规划? 区间动态规划通常以连续区间的求解作为子问题,例如区间 [i, j] 上的最优解用dp[i][j]表示。先在小区间上进行动态规划得到子问题的最优解,再利用小区间的最优解合并产生大区间的最优解。 …

娱乐圈发生震动,AI大模型技术已经取代了SNH48的小偶像?

自2023年以来,全球都被包裹在AI的惊天大潮之中,所有行业都在主动或被动地迎接改变。目前,各行业已经有大量公司正在把AI作为自身发展的最佳路径。其中,娱乐行业作为最被人们熟知的行业也在面对AI的发展时,发生着巨大变…

视频共享融合赋能平台LntonCVS统一视频接入平台数字化升级医疗体系

医疗健康事关国计民生,然而,当前我国医疗水平的地区发展不平衡、医疗资源分布不均和医疗信息系统老化等问题,制约了整体服务能力和水平的提升。视频融合云平台作为推动数字医疗的关键工具,在医疗领域的广泛应用和普及,…

统计信号处理基础 习题解答11-1

题目 观测到的数据具有PDF 在μ给定的条件下,是相互独立的。均值具有先验PDF: 求μ的 MMSE 和 MAP 估计量。另外,当和时将发生什么情况? 解答 和两者都是独立高斯分布,与例题10.1一致,直接套用(10.11&am…

RedisAtomicInteger并发案例

🍰 个人主页:__Aurora__ 🍞文章有不合理的地方请各位大佬指正。 🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️ RedisAtomicInteger 提供了对整数的原子性操作&a…

《昇思25天学习打卡营第14天 | 昇思MindSpore基于MindNLP+MusicGen生成自己的个性化音乐》

14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构,可以分解为三个不同的阶段…

C++: 如何用C语言实现C++的虚函数机制?

前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C虚函数的机制。C中的虚函数机制实质上就是通过这种方式实现的,本文用c语言自定义虚函数表VTable实现了一下virtual的…

等保主机测评防骗指南(资产调研)

你是否测评时常被运维给忽悠?是否觉得以下的对话耳熟? 你:您好,请问你们的主机资产有哪些,包括服务器、数据库、中间件、应用系统等。 甲:我们资产就这两台服务器,数据库什么的都这上面&#…

OpenGL3.3_C++_Windows(25)

阴影失真:阴影的不真实感 条纹样式: 首先理解采样原理:同光的视角下,渲染一张深度图,每个像素,存储同一射线下的深度值(不断更新深度缓冲的结果),即最近片段的深度。接着&#xff0…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验,以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…

isspace()方法——判断字符串是否只由空格组成

自学python如何成为大佬(目录): https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isspace()方法用于判断字符串是否只由空格组成。isspace()方法的语法格式如下: str.isspace() 如果字符串中只包含空格&…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式,看到两本比较适合入门的书,一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式,因此很值得学习 本…

【算法】5分钟了解如何使用PCA主成份分析

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是PCA1.1.PCA的思想1.2.PCA的数学表示 二、什么是PCA的主成份与方差2.1.主成份的方差2.2.主成份的命名 三、如何使用PCA3.1.主成份的代码实现 主成份分析全称为PCA Principle Component Analysis ,它的主…

Linux虚拟串口设置

VSPD虚拟串口软件安装及使用 一、软件安装 1、Configure Virtual Serial Port Driver(VSPD) 1.1 首先下载 Configure Virtual Serial Port Driver(VSPD) 软件 链接:https://pan.baidu.com/s/11aGc2aHGUew5QZ0XhaWXJw 提取码:rmd7 1.2 安装时注意将…