Pytest----如何通过filterwarnings配置不显示告警或将告警报错
admin
2024-03-15 20:47:03
0

【原文链接】Pytest----如何通过filterwarnings配置不显示告警或将告警报错

首先在脚本中人工抛出一条告警,测试代码如下所示:

import pytest
import warningsdef test_demo1():print("in test_demo1 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1

执行结果如下所示,即这里在执行结果中也显示了一条告警信息。

(demo-HCIhX0Hq) E:\demo>pytest -s
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 1 itemtest_demo.py in test_demo1 ...
.==================== warnings summary =====================
test_demo.py::test_demo1E:\demo\test_demo.py:7: SyntaxWarning: warning,used to test...warnings.warn(SyntaxWarning("warning,used to test..."))-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============== 1 passed, 1 warning in 0.02s ===============(demo-HCIhX0Hq) E:\demo>

在脚本中可以通过filterwarnings来配置告警信息的处理方式,比如将其忽略不显示,则代码如下,即此时在测试函数中加一个装饰器装饰,在装饰器中使用ignore,注意当按照告警类型忽略不显示的时候,ignore后面是两个冒号。

import pytest
import warnings@pytest.mark.filterwarnings("ignore::SyntaxWarning")
def test_demo1():print("in test_demo1 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1

执行结果如下,即不再有告警信息。

(demo-HCIhX0Hq) E:\demo>pytest -s
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 1 itemtest_demo.py in test_demo1 ...
.==================== 1 passed in 0.02s ====================(demo-HCIhX0Hq) E:\demo>

同理,若将告警转换为报错,则只需要将代码中的装饰器中的ignore修改为error即可,如下:

import pytest
import warnings@pytest.mark.filterwarnings("error::SyntaxWarning")
def test_demo1():print("in test_demo1 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1

执行结果如下,可以看到此时用例失败了,原因就是这个告警。

(demo-HCIhX0Hq) E:\demo>pytest -s
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 1 itemtest_demo.py in test_demo1 ...
F======================== FAILURES =========================
_______________________ test_demo1 ________________________@pytest.mark.filterwarnings("error::SyntaxWarning")def test_demo1():print("in test_demo1 ...")
>       warnings.warn(SyntaxWarning("warning,used to test..."))
E       SyntaxWarning: warning,used to test...test_demo.py:7: SyntaxWarning
================= short test summary info =================
FAILED test_demo.py::test_demo1 - SyntaxWarning: warning,used to test...
==================== 1 failed in 0.07s ====================(demo-HCIhX0Hq) E:\demo>

除此以外,还可以通过对告警信息进行正则匹配,比如当使用ignore时,此时ignore后面只跟一个冒号,冒号后面的即对告警信息的正则表达式,比如如下代码,即test_demo1中匹配告警信息中有test字符的就忽略,而test_demo2中则匹配告警信息中有demo字符的忽略,从代码分析,显然test_demo2中的告警信息无法匹配,即按照理论分析,test_demo1中的告警会忽略不显示,而test_demo2中的告警则会显示。

import pytest
import warnings@pytest.mark.filterwarnings("ignore:.*test.*")
def test_demo1():print("in test_demo1 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1@pytest.mark.filterwarnings("ignore:.*demo.*")
def test_demo2():print("in test_demo2 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1

执行结果如下,执行结果确实如此,即test_demo2中的告警继续报出来了,而test_demo1中的告警并未显示。

(demo-HCIhX0Hq) E:\demo>pytest -s
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 2 itemstest_demo.py in test_demo1 ...
.in test_demo2 ...
.==================== warnings summary =====================
test_demo.py::test_demo2E:\demo\test_demo.py:13: SyntaxWarning: warning,used to test...warnings.warn(SyntaxWarning("warning,used to test..."))-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============== 2 passed, 1 warning in 0.02s ===============(demo-HCIhX0Hq) E:\demo>

同理,将告警转换为报错信息,也是同样支持正则表达式的,比如如下代码:

import pytest
import warnings@pytest.mark.filterwarnings("error:.*test.*")
def test_demo1():print("in test_demo1 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1@pytest.mark.filterwarnings("error:.*demo.*")
def test_demo2():print("in test_demo2 ...")warnings.warn(SyntaxWarning("warning,used to test..."))assert 1==1

执行结果如下,显然test_demo1中的告警与正则表达匹配,因此报错了,而test_demo2中的告警并未匹配到正则表达式,因此不会报错,所以继续报出了告警信息。

(demo-HCIhX0Hq) E:\demo>pytest -s
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 2 itemstest_demo.py in test_demo1 ...
Fin test_demo2 ...
.======================== FAILURES =========================
_______________________ test_demo1 ________________________@pytest.mark.filterwarnings("error:.*test.*")def test_demo1():print("in test_demo1 ...")
>       warnings.warn(SyntaxWarning("warning,used to test..."))
E       SyntaxWarning: warning,used to test...test_demo.py:7: SyntaxWarning
==================== warnings summary =====================
test_demo.py::test_demo2E:\demo\test_demo.py:13: SyntaxWarning: warning,used to test...warnings.warn(SyntaxWarning("warning,used to test..."))-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================= short test summary info =================
FAILED test_demo.py::test_demo1 - SyntaxWarning: warning,used to test...
========= 1 failed, 1 passed, 1 warning in 0.07s ==========(demo-HCIhX0Hq) E:\demo>

相关内容

热门资讯

【加密货币支持的规则扩大信托银... 【加密货币支持的规则扩大信托银行服务获得美国最终批准】美国银行业监管机构正在扩大贷款机构在国家信托牌...
覆铜板量价齐升 生益科技202... 面对每天上千份上市公司公告该看哪些?重大事项公告动辄几十页几百页重点是啥?公告里一堆专业术语不知道算...
3 个穴位,调帕金森,不费力也... 3 个穴位,调帕金森,不费力也不花钱。只要你手抖、肢体僵硬、走路不稳的时候,按这 3 个穴位,就能舒...
“以租代买”为何受青睐?“万物... 最近一段时间,在最长春节假期的带动下,我国的消费市场活力十足。然而,在“买买买”之外,也有些人把“租...
新一批香港互认基金获批 【导读】新一批香港互认基金获批 中国基金报记者 格林 中国基金报记者获悉,摩根亚洲股票高息基金、富达...
春节假期产销两旺 “白沙好物”... 2月27日,记者从白沙电商中心获悉,今年春节假期,在浓厚的节日消费氛围带动下,“白沙好物”市场持续火...
损失4万5,和解金4100多,... 【文/羽扇观金工作室 陶立烽】 损失将近4万5,和解金才4100多,亏的越多补偿越少?国投瑞银白银...
雷军直播新一代SU7门把手:增... 红星资本局2月28日消息 2月27日,小米创办人、董事长兼CEO雷军在小米汽车工厂里进行直播,与多位...
迎接50万亿存款迁徙|搬家的钱... 开栏语:一场规模高达50万亿的存款迁徙正蓄势待发。站在财富配置的历史拐点,如何审视这波天量资金的洪流...
大连航天医院费用公开透明|下肢... 大连航天医院静脉曲张专科学科带头人杨红东:下肢静脉曲张在人群中发病率大概在7%左右。下肢静脉曲张最主...
【锋行链盟】A轮融资流程及核心... A轮融资是创业公司发展的重要里程碑,通常发生在种子轮/天使轮之后、B轮之前。此时公司已完成产品验证(...
原创 未... 在快速变化的时代,把握趋势往往意味着抓住先机。本文将深入探讨十大关键发展趋势,它们不仅塑造着我们的生...
太突然!002855,71岁董... 每经记者|蔡鼎 每经编辑|何小桃 董兴生 2月27日晚间,捷荣技术(SZ002855,股价16.4...
原创 今... 2026年2月27日,你走进周大福金店,柜姐微笑着告诉你今日金价是每克1576元。 你或许觉得这个价...
致远互联2025年实现营收9.... 本报讯 (记者向炎涛)2月27日,北京致远互联软件股份有限公司(以下简称“致远互联”)发布2025年...
A股突发!600481,被证监... 【导读】双良节能因涉嫌信息披露误导性陈述等违法违规行为被立案 中国基金报记者 夏天 公司表示,目前...
高人预测:5年后,手持两套房以... 前几年,谁家要是两三套房,那简直就是“别人眼里的成功模板”。 过年亲戚一坐,有人开口就是:“早听我的...
刘强东雷军同框C位!中德交流排... 今年刘强东和雷军同框的画面好像有点多哦。 在2月25号下午的中德经济顾问委员会座谈会上,刘强东和雷军...
万达20亿元转让上海颛桥万达广... 财联社2月27日电,记者从独立信源处获悉,万达以20.48亿元的价格出售了旗下位于上海的颛桥万达广场...
德邦基金“大V带货”风波后,8... 作者 | 郑理、刘银平 来源 | 独角金融 2月14日,德邦基金一纸公告,揭开了公司管理层的重要调整...