Pytest精通指南(18)多种手段过滤或升级警告


文章目录

      • 前言
      • 使用命令行实现过滤
        • 未处理警告,执行结果
        • 升级警告
        • 忽略警告
        • 忽略警告摘要
      • 使用装饰器实现过滤
        • 装饰方法
        • 装饰类
        • 装饰模块
      • 使用配置文件实现过滤


请添加图片描述

前言

pytest 中执行测试时,可能会出现警告,这些警告通常是由于代码中存在某些可能导致问题或不符合最佳实践的情况。

警告可能涉及各种方面,如未使用的变量、未实现的函数、过时的库用法等。

使用命令行实现过滤

模拟警告的代码示例

import warningsdef test_case_01():print("进入test_case_01函数")# 手动抛出一个警告warnings.warn(UserWarning("手动抛出一个警告"))assert 1 == 1
未处理警告,执行结果

执行命令pytest testcase/test_case_01.py -s -v

请添加图片描述

升级警告

执行命令pytest testcase/test_case_01.py -s -v -W error::UserWarning

请添加图片描述

忽略警告

执行命令pytest testcase/test_case_01.py -s -v -W ignore::UserWarning

请添加图片描述

忽略警告摘要

执行命令pytest testcase/test_case_01.py -s -v --disable-warnings

请添加图片描述

使用装饰器实现过滤

pytest 中,@pytest.mark.filterwarnings 装饰器允许我们向特定的测试项添加警告筛选器,以实现对警告的更细粒度控制。

通常,Pythonwarnings 模块用于控制警告的输出,而 pytest 通过其插件系统集成了对警告的管理。@pytest.mark.filterwarnings 装饰器提供了一种方便的方式来为特定的测试函数或方法定义警告筛选器。

我们可以使用 @pytest.mark.filterwarnings 来指定:

  • 要匹配的警告类别。
  • 警告消息的匹配模式。
  • 如何处理匹配的警告(例如,忽略它们或将其转换为错误)。
装饰方法

示例代码

import warningsimport pytestdef test_case_01():print("进入test_case_01函数")warnings.warn(UserWarning("手动抛出一个警告信息"))assert 1 == 1# 忽略指定类型的警告信息
# @pytest.mark.filterwarnings("ignore::UserWarning")
# 忽略匹配正则表达式的警告信息
@pytest.mark.filterwarnings("ignore:.*模拟.*")
def test_case_02():print("进入test_case_02函数")warnings.warn(UserWarning("模拟程序中出现的警告信息"))assert 1 == 1

执行结果

请添加图片描述

装饰类

示例代码:忽略含有自定义的警告

import warningsimport pytest@pytest.mark.filterwarnings("ignore:.*自定义.*")
class TestClassDemo2:print("进入类的内部")def test_case_01(self):print("进入test_case_01函数")warnings.warn(UserWarning("意外警告"))assert 1 == 1def test_case_02(self):print("进入test_case_02函数")warnings.warn(UserWarning("自定义警告"))assert 1 == 1def test_case_03(self):print("进入test_case_03函数")assert 1 == 1

执行结果

请添加图片描述

装饰模块

示例代码

import warningsimport pytest# 不指定需要忽略的警告类型,表示忽略全部警告
# pytestmark = pytest.mark.filterwarnings("ignore")
# 忽略匹配正则表达式的警告信息
pytestmark = pytest.mark.filterwarnings("ignore:.*自定义.*")def test_case():print("进入test_case函数")warnings.warn(UserWarning("自定义警告"))assert 1 == 1class TestClassDemo2:print("进入类的内部")def test_case_01(self):print("进入test_case_01函数")warnings.warn(UserWarning("意外警告"))assert 1 == 1def test_case_02(self):print("进入test_case_02函数")warnings.warn(UserWarning("自定义警告"))assert 1 == 1def test_case_03(self):print("进入test_case_03函数")assert 1 == 1

执行结果

请添加图片描述

使用配置文件实现过滤

pytest.ini配置文件代码

[pytest]
filterwarnings =ignoreerror::UserWarning

示例代码

import warningsdef test_case():print("进入test_case函数")assert 1 == 1class TestClassDemo2:print("进入类的内部")def test_case_01(self):print("进入test_case_01函数")warnings.warn(ImportWarning("模拟导入过时模块警告"))assert 1 == 1def test_case_02(self):print("进入test_case_02函数")warnings.warn(RuntimeWarning("模拟运行时警告"))assert 1 == 1def test_case_03(self):print("进入test_case_03函数")warnings.warn(SyntaxWarning("模拟语法警告"))assert 1 == 1def test_case_04(self):print("进入test_case_04函数")warnings.warn(UserWarning("自定义警告"))assert 1 == 1

执行结果

请添加图片描述

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

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

相关文章

代码随想录算法训练营Day58|LC739 每日温度LC496 下一个更大元素I

一句话总结:单调栈专题! 原题链接:739 每日温度 很简单的单调栈入门题。 在使用单调栈解决此题之前,先要想到:单调栈要什么时候用呢?怎么才能想到用单调栈呢? 什么时候用单调栈呢?…

海信发布《黑神话:悟空》定制电视E8N新品,重塑大屏游戏体验

4月17日,在“AI美好生活”2024海信电视E8系列新品发布会上,海信电视官宣成为《黑神话:悟空》全球官方合作伙伴。同时,海信电视还为广大游戏玩家带来了《黑神话:悟空》的显示CP,推出了官方定制电视——旗舰新…

基于SpringBoot的“论坛管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“论坛管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 论坛管理系统结构图 前台首页功能界面图 用户登录…

「GO基础」在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

C# 整数转罗马数字

罗马数字包含以下七种字符:I,V,X,L,C,D和M。 例如,罗马数字2写做 II ,即为两个并列的 1。12 写做XII,即为XII。27写做 XXVII,即为XXV II 。 通常情况下,罗马数字中小的数字在大的数字…

一个不同长度元素排序找行和列的需求

1、需求:三种长度的元素,分别是4、8、12,每一行的长度是12,超过12就排到下一行,我们将这三种类型的多个元素打乱,然后找到这些元素对应的行和列。 如下图: 2、解决思路: 创建一个长…

Ubuntu 20.04.6下载

下载地址:https://cn.ubuntu.com/download 下载版本:ubuntu-20.04.6-desktop-amd64.iso

OpenHarmony实战开发-如何实现进入页面,点击动画卡片,动画播放并且文本发生变化。

介绍 Lottie是一个适用于OpenHarmony的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染, 可以在各种屏幕尺寸和分辨率上呈现,并且支持动画的交互性,通过…

C++stack,queue,priority_queue容器(个人笔记)

C栈队列优先级队列 1.熟悉stack接口以及使用1.1stack的接口1.2stack的模拟实现1.3stack的一些笔试题 2.熟悉queue接口以及使用2.1queue的接口2.2queue的模拟实现2.3queue的笔试题 3.熟悉priority_queue的接口以及使用(底层堆)3.1priority_queue的接口3.2…

spdlog C++日志管理 安装和下载

下载地址 https://github.com/gabime/spdlog?tabreadme-ov-file 使用git拉取代码 按照操作进行编译 点击spdlog.sln,用vs2019打开,进行编译debug x64 每项都编译一下,会生成安装包 安装包下载路径 https://download.csdn.net/download…

【AI学习中常见专业英文缩写词的解释】

前言: 为了看着不无聊,文中插入了一些AI生成的狗图片 AI(Artificail Intelligence)人工智能: 让机器模拟和展示人类智能的技术。 GAI(Generative Artificail Intelligence)生成式人工智能: 利用复杂的算法、模型和规则,从大规…

mysql数据库表的数据显示到前端tableView

首先我们在ui视图设计中引入TableView, 定义一个model QSqlQueryModel *modelnew QSqlQueryModel(ui->tableView);model->setQuery(query);//将查询结果绑定到模型上ui->tableView->setModel(model); 将tableView内容设置成model然后就可以出现数据库的数据。示…

2.8 构建gradle环境

构建gradle环境 目录一、安装Java Development Kit (JDK)二、下载Gradle三、解压Gradle四、配置环境变量五、验证安装六、gradle构建java项目七、eclipse配置gradle 目录 一、安装Java Development Kit (JDK) Gradle是基于Java开发的,所以首先需要安装JDK。你可以从…

春秋云境:CVE-2022-32991[漏洞复现]

从CVE官网查询该漏洞相关信息 该漏洞是由于welcome.php中的eid参数包含了SQL注入漏洞 则我们的目标就在于寻找welcome.php地址以及相关的可注入eid参数 开启靶机 先在页面正常注册、登录一个账号。密码随便填 进入了home目录,这里有三个话题可以选择开启 随便选…

【服务器部署篇】Linux下Nginx的安装和配置

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

【MySQL】20. 使用C语言链接

mysql connect mysql的基础,我们之前已经学过,后面我们只关心使用 要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载 我们使用C接口库来进行连接 要正确使用,我们需要做一些准备工作: …

从零构建生产级 AI 应用 ChatWithPDF

前言 目前 AIGC 的浪潮很火,不管你是什么方向的程序员,都可以通过大模型去构建自己的 App,但是搜索资料学习的时候发现: 目前构建 AI 应用的中文资源比较少,大多数都是英文的。教程大多是 demo 级别,没有…

claude3会员版怎么在国内充值

由于国内尚未正式开放注册,许多用户可能感到有些不便。但在这个时代,如果没有几个得心应手的AI工具链接,似乎都与时代脱节了。今天推荐一个非常实用的Claude3镜像站点: https://hiclaude3.cn 这个站点不仅拥有简洁明了的对话操作…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展,车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中,大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网,以实现智慧出行的目标。 尤其是近来国内的华为…

JavaSE备忘录(未完)

文章目录 基本数据类型println 小知识除法( / ) 和 Infinity(无穷) 小知识除法InfinityInfinity 在除法中正负判断 求余(%) 小知识 基本数据类型 除 int、char 的包装类分别为 Integer、Character 外,其余基本数据类型的第一个字母大写就是它的包装类。 println 小…