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格式的动画,并在移动设备上进行本地渲染, 可以在各种屏幕尺寸和分辨率上呈现,并且支持动画的交互性,通过…

vue3 复制文本

vue-clipboard3 是一个为 Vue.js 框架设计的剪贴板操作库,它基于 Vue 3 Composition API。它提供了简单易用的方式来实现在 Vue.js 应用中复制文本到剪贴板的功能,而不需要手动处理浏览器的剪贴板 API。 主要特性: 简单易用: vue…

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…

2024年4月18号PMP每日三题含答案

2024年4月18号PMP每日三题含答案 1.一家公司启动一个项目,旨在下一季度结束前提高客户满意度。项目经理应该如何确定最佳实践? A.使用标杆对照 B.组织焦点小组会议 C.安排一次引导式研讨会 D.创建一份亲和图 1.解析:A是参考答案。标杆对照是…

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)生成式人工智能: 利用复杂的算法、模型和规则,从大规…

类与对象笔记-Java-第一部分

类 基本格式 class 类名{ 类体 } 类的声明 class People{ } class 植物{ } 类体 class Ladder{float above;float bottom;float height;float area;float computer(){area(abovebottom)*height/2.0f;return area;}void setHeight(float h){heighth;} } 成员变量 成…

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

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

c++ 拷贝构造函数 简单实验

1.概要 什么时候调用拷贝构造,就是有对象创建的时候,就会调用拷贝构造,无论对象是构造(类(来源))还是赋值(对象)都会调用拷贝构造。 赋值函数调用的时机是两个对象都已经…

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开发工作,但不知道从何处入手。于是,产…

使用 draw.io(现在称为 diagrams.net)进行图表设计和绘图

使用 draw.io(现在称为 diagrams.net)进行图表设计和绘图的体验通常是积极和高效的。以下是一些用户的使用心得,根据您提供的搜索结果进行总结: 界面简洁直观:draw.io 的用户界面设计简洁,使得新用户能够快…