Pytest-mark使用详解(跳过、标记、参数 化)

1.前言

在工作中我们经常使用@pytest.mark.XXXX进行装饰器修饰,后面的XXX的不同,在pytest中有不同的作

用,其整体使用相对复杂,我们单独将其抽取出来做详细的讲解。

2.@pytest.mark.skip()/skipif()跳过用例

import pytest
#无条件跳过:@pytest.mark.skip 或者@pytest.mark.skip(reason='XXXXXX');状态为:
SKIPPED
@pytest.mark.skip()
def test_001():
print('test_001:无条件跳过')
#不满足条件就不跳过,正常执行,通过为passed,不通过为failed
@pytest.mark.skipif(1==2,reason='条件成立的时候跳过,不成立的时候不跳过')
def test_002():
print('test_002:条件不成立不跳过')
#满足条件就就跳过,并给出跳过的原因:状态为SKIPPED
@pytest.mark.skipif(1==1,reason='条件成立的时候跳过,不成立的时候不跳过')
def test_003():
print('test_003:条件成立,跳过')

3.xfail标记用例结果

当由于确切的原因,我们指定某个用例执行会失败,如:用例覆盖的功能还未完成、用例测试时被阻塞

等时,可以使用xfail将用例标记起来。

3.1 xfail的装饰器用法

3.1.1 @pytest.mark.xfail不带参数用法

import pytest
'''
使用@pytest.mark.xfail标记用例,表示期望这个用例执行失败。
标记后的用例会正常执行,只是失败时不再显示堆栈信息,最终的结果有两个:
用例执行失败时(XFAIL:符合预期的失败)、用例执行成功时(XPASS:不符合预期的成功)
'''
#通过状态为Xpass:表示不符合预期的成功
@pytest.mark.xfail
def test_004():
assert 1==1
#不通过状态为Xfail:表示符合预期的失败
@pytest.mark.xfail
def test_005():
assert 1==2

3.1.2 @pytest.mark.xfail()带参数用法

import pytest
'''
pytest.mark.xfail(condition=None, reason=None, strict=False, raises=None,
run=True)
condition位置参数,默认值为None,表示只有满足条件时才标记用例,不满足条件不标记用例
reason关键字参数,默认值为None,表示可以指定一个reason字符串,说明标记用例的原因;
strict关键字参数,默认值为False:
当strict=False时,如果用例执行失败,结果标记为XFAIL,表示符合预期的失败;如果用例执行成功,结
果标记为XPASS,表示不符合预期的成功;
当strict=True时,无论用例是否执行成功,结果都将标记为FAILED;
raises关键字参数,默认值为None:
可以指定为一个异常类或者多个异常类的元组,表示我们期望用例上报指定的异常;
如果用例的失败不是因为所期望的异常导致的,pytest将会把测试结果标记为FAILED;
run关键字参数,默认值为True:
当run=False时,pytest不会再执行测试用例,直接将结果标记为XFAIL;
'''
@pytest.mark.xfail(condition=1==2,reason='条件不成立,用例不会被标记')
def test_004():
assert 1==1 #条件不成立,用例不会被标记,test_004正常执行,成功passed
@pytest.mark.xfail(condition=1==2,reason='条件不成立,用例不会被标记')
def test_005():
assert 1!=1 #条件不成立,用例不会被标记,test_005正常执行,失败failed
@pytest.mark.xfail(condition=1!=2,reason='条件成立,用例被标记')
def test_006():
assert 1==1 #条件成立,用例被标记,执行成功状态标记为XPASS
@pytest.mark.xfail(condition=1!=2,reason='条件成立,用例被标记')
def test_007():
assert 1==2 #条件成立,用例被标记,执行失败状态标记为XFAIL
@pytest.mark.xfail(condition=1!=2,reason='条件成立,用例被标记',strict=True)
def test_008():
print('strict=True,无论用例执行成功还是失败,状态均标记为failed')
#assert 1==1
#assert 1==2
@pytest.mark.xfail(condition=1!=2,reason='条件成立,用例被标记',strict=True,raises=
(ZeroDivisionError,))
def test_009():
print(1/0) #用例执行失败,导致失败的原因为期望的异常导致,用例结果标记为XFAIL
assert 1 == 1 #用例执行成功,直接标记为Failed
# assert 1 != 1 #用例执行失败,导致失败的原因不为期望的异常导致,用例结果标记为Failed
@pytest.mark.xfail(condition=1!=2,reason='条件成立,用例被标记',strict=True,raises=
(ZeroDivisionError,),run=False)
def test_010():
print('run=False,不允许用例,直接标记用例为XFAIL')
print(1/0)

3.2 xfail的非装饰器用法

可以通过pytest.xfail方法在用例执行过程中直接标记用例结果为XFAIL,并跳过剩余的部分

4.@pytest.mark.标记

关于执行被标记的用例,这个在上一讲,已经讲过,这里不再累述

5.@pytest.mark.parametrize()进行参数化

import pytest
import yaml
#传递多个参数,多个参数,多个参数名称写入一个字符串,值写入一个容器,容器内分别为对应参数的值
@pytest.mark.parametrize('a,b',[(1,2),(3,4)])
def test_001(a,b):
print(a,b)
#传递一个参数,这个参数的多组值写入一个容器
@pytest.mark.parametrize('kwargs',[{'k':'v1'},{'k':'v2'}])
def test_002(kwargs):
print(kwargs['k'])
#yaml文件传值,这种方式需要主要文件路径的变化,如果有问题,可以写文件的绝对路径,一般结合
fixture使用好点
@pytest.mark.parametrize('kwargs',
yaml.safe_load(open('../data/login.yaml','r',encoding='utf-8')))
def test_003(kwargs):
print(kwargs)
if __name__ == '__main__':
pytest.main()

 执行结果如下:

 

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

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

相关文章

基于 Spring Boot 的井字棋游戏开发与实现

目录 引言 项目概述 项目搭建 1. 环境准备 2. 创建 Spring Boot 项目 3. 项目结构 代码实现 1. DemoApplication.java 2. TicTacToeController.java 3. pom.xml 电脑落子策略 - Minimax 算法 findBestMove 方法 minimax 方法 运行游戏 总结 引言 在软件开发领域&…

【算法笔记】贪心算法

一、什么是贪心算法? 贪心算法是一种在每一步选择中都采取当前看起来最优(最“贪心”)的策略,从而希望得到全局最优解的算法设计思想。 核心思想:每一步都做出局部最优选择,不回退。适用场景:…

现代c++获取linux所有的网络接口名称

现代c获取linux所有的网络接口名称 前言一、在linux中查看网络接口名称二、使用c代码获取三、验证四、完整代码如下五、总结 前言 本文介绍一种使用c获取本地所有网络接口名称的方法。 一、在linux中查看网络接口名称 在linux系统中可以使用ifconfig -a命令列举出本机所有网络…

打印及判断回文数组、打印N阶数组、蛇形矩阵

打印回文数组 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1方法1: 对角线对称 左上和右下是对称的。 所以先考虑左上打印, m i n ( i 1 , j 1 ) \text min(i1,j1) min(i1,j1),打印出来: 1 1 1 1 1 2 2 2 1 2 3 3 1 2 …

详解UnityWebRequest类

什么是UnityWebRequest类 UnityWebRequest 是 Unity 引擎中用于处理网络请求的一个强大类,它可以让你在 Unity 项目里方便地与网络资源进行交互,像发送 HTTP 请求、下载文件等操作都能实现。下面会详细介绍 UnityWebRequest 的相关内容。 UnityWebRequ…

UE5 在旋转A的基础上执行旋转B

用径向slider实现模型旋转时,得到的结果与ue编辑器里面的结果有很大出入。 问题应该是 两个FRotator(0,10,0)和(10,20,30), 两个FRotator的加法结果为&…

4.2 Prompt工程与任务建模:高效提示词设计与任务拆解方法

提示词工程(Prompt Engineering)和任务建模(Task Modeling)已成为构建高效智能代理(Agent)系统的核心技术。提示词工程通过精心设计的自然语言提示词(Prompts),引导大型语…

MySQL 索引的最左前缀匹配原则是什么?

MySQL 索引的最左前缀匹配原则详解 最左前缀匹配原则(Leftmost Prefix Principle)是 MySQL 复合索引(联合索引)查询优化中的核心规则,理解这一原则对于高效使用索引至关重要。 核心概念 定义:当查询条件…

SQL命令

一、控制台中查询命令 默认端口号:3306 查看服务器版本: mysql –version 启动MySQL服务:net start mysql 登录数据库:mysql -u root -p 查看当前系统下的数据库:show databases; 创建数据库:create…

新增 29 个专业,科技成为关键赛道!

近日,教育部正式发布《普通高等学校本科专业目录(2025年)》,新增 29 个本科专业,包括区域国别学、碳中和科学与工程、海洋科学与技术、健康与医疗保障、智能分子工程、医疗器械与装备工程、时空信息工程、国际邮轮管理…

零基础上手Python数据分析 (23):NumPy 数值计算基础 - 数据分析的加速“引擎”

写在前面 —— 超越原生 Python 列表,解锁高性能数值计算,深入理解 Pandas 的底层依赖 在前面一系列关于 Pandas 的学习中,我们已经领略了其在数据处理和分析方面的强大威力。我们学会了使用 DataFrame 和 Series 来高效地操作表格数据。但是,你是否好奇,Pandas 为何能够…

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现 文章目录 需求:参考资料架构图了解Camera相关专栏零散知识了解部分相机源码参考,学习API使用,梳理流程,偏应用层Camera2 系统相关 修改文件-修改方案修改文件:修改…

HarmonyOS 框架基础知识

参考文档:HarmonyOS开发者文档 第三方库:OpenHarmony三方库中心仓 基础特性 Entry:关键装饰器 Components:组件 特性EntryComponent​​作用范围仅用于页面入口可定义任意可复用组件​​数量限制​​每个页面有且仅有一个无数量…

前端分页与瀑布流最佳实践笔记 - React Antd 版

前端分页与瀑布流最佳实践笔记 - React Antd 版 1. 分页与瀑布流对比 分页(Pagination)瀑布流(Infinite Scroll)展示方式按页分批加载,有明确页码控件滚动到底部时自动加载更多内容,无明显分页用户控制用…

Linux网络编程:TCP多进程/多线程并发服务器详解

Linux网络编程:TCP多进程/多线程并发服务器详解 TCP并发服务器概述 在Linux网络编程中,TCP服务器主要有三种并发模型: 多进程模型:为每个客户端连接创建新进程多线程模型:为每个客户端连接创建新线程I/O多路复用&am…

详解springcloudalibaba采用prometheus+grafana实现服务监控

文章目录 1.官网下载安装 prometheus和grafana1.promethus2.grafana 2. 搭建springcloudalibaba集成prometheus、grafana1. 引入依赖,springboot3.2之后引入如下2. 在yml文件配置监控端点暴露配置3. 在当前启动的应用代码中添加,在prometheus显示的时候附加当前应用…

数据分析1

一、常用数据处理模块Numpy Numpy常用于高性能计算,在机器学习常常作为传递数据的容器。提供了两种基本对象:ndarray、ufunc。 ndarray具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 ufunc提供了对数组快速运算的标准数学函数。 ndar…

DeepSeek智能时空数据分析(六):大模型NL2SQL绘制城市之间连线

序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…

2023ICPC合肥题解

文章目录 F. Colorful Balloons(签到)E. Matrix Distances(思维小结论)J. Takeout Delivering(最短路)G. Streak Manipulation(二分dp)C. Cyclic Substrings(回文自动机) 题目链接 F. Colorful Balloons(签到) int n;cin>>n;for(int i1;i<n;i) cin>>s[i];map<…

数字技术驱动下教育生态重构:从信息化整合到数字化转型的路径探究

一、引言 &#xff08;一&#xff09;研究背景与问题提出 在当今时代&#xff0c;数字技术正以前所未有的速度和深度渗透到社会的各个领域&#xff0c;教育领域也不例外。从早期的教育信息化整合到如今的数字化转型&#xff0c;教育系统正经历着一场深刻的范式变革。 回顾教…