Pytest框架中pytest.mark功能

2024-06-17 01:12
文章标签 pytest mark 框架 功能

本文主要是介绍Pytest框架中pytest.mark功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

mark功能

1. 使用@pytest.mark.skip

2. 使用@pytest.mark.skipif

3. 使用 @pytest.mark.xfail

4使用@pytest.mark.parametrize

5 使用@pytest.mark.自定义标记

6 使用@pytest.mark.usefixtures

pytest 的mark功能在pytest官方文档是这样解释的:
https://docs.pytest.org/en/latest/how-to/mark.html

由于英语不好,只能百度翻译如下:

通过使用pytest.mark助手,您可以轻松地设置测试函数的元数据。您可以在API参考中找到内置标记的完整列表。或者,您可以使用CLI-pytest-标记列出所有标记,包括内置标记和自定义标记。

以下是一些内置标记:

usefixtures-在测试函数或类上使用fixtures

filterwarnings-筛选测试函数的某些警告

skip-始终跳过测试函数

skipif-如果满足特定条件,则跳过测试函数

xfail-如果满足特定条件,则产生“预期失败”结果

parameterize-对同一测试函数执行多个调用。

创建自定义标记或将标记应用于整个测试类或模块很容易。这些标记可以由插件使用,也通常用于通过-m选项在命令行上选择测试。

我们可以通过 @pytest.mark装饰器来为测试函数做标记。

1 mark功能

使用@pytest.mark的功能时,我们跳到原始代码文件中,看到其实用到的如下类

下面主要介绍几个常用的风mark功能

1. 使用@pytest.mark.skip

@pytest.mark.skip 装饰器可以用来无条件地跳过某个测试。

import pytest@pytest.mark.skip
def test_1():assert Truedef test_2():assert True

以上用例执行结果:test_1不会被执行

2. @pytest.mark.skipif

与 @pytest.mark.skip 不同,@pytest.mark.skipif 允许我们基于某个条件来跳过测试。如果给定的条件为真,则测试会被跳过。

举例:根据python版本判断是否执行某用例。

import pytest
import sys
def value_a_b():if sys.version_info < (3, 8):return 'a'else:return 'b'
@pytest.mark.skipif(str(value_a_b()=='b'),reason='当值为b时不执行用例')
def test_1():assert Truedef test_2():assert True

用例执行结果如下:当前python版本为3.10,当函数返回value_a_b返回值为‘b’时,用例被skip。

使用 @pytest.mark.xfail

该功能标记一个测试用例为预期失败。

举例:标记测试用例test_1为预期失败用例

@pytest.mark.xfail(reason="该用例执行会失败")
def test_1():assert Falsedef test_2():assert True

用例执行结果如下:

4使用@pytest.mark.parametrize

可以为测试函数提供多个输入和期望的输出,从而在一次运行多个测试用例

语法:

@pytest.mark.parametrize("arg1, arg2", [("value1","value2" ), ("value3", "value4"), ...])

  • arg1, arg2:这些是在测试函数内部使用的参数名
  • [("value1","value2" ), ("value3", "value4"), ...]:这是一个包含元组的列表,每个元组对应一组测试参数。

举例:用例中传入2个参数arg1和arg2,对应3组参数

import pytest@pytest.mark.parametrize("arg1, arg2", [(1,2), (3,4),(5,6)])
def test_1(arg1,arg2):print(f'\narg1+arg2 = {arg1+arg2}')

执行后结果:运行了3条用例

5 @pytest.mark.自定义标记

除了上述的内置标记外,我们可以使用 @pytest.mark 装饰器为测试用例添加标记。例如标记测试用例为version1_1_0,我们可以使用 -m version1_1_0来只运行这些测试用例。

使用方式跟-k参数类似,可以填and 或者or等表达式符号。

举例:将test_1和test_2标记为version1_1_0,将test_3标记为version1_1_1

#函数1
@pytest.mark.version1_1_0
def test_1():assert 1==1print('\n用例test_1执行成功')class TestCase(): @pytest.mark.version1_1_0def test_2(self): #函数2assert 1 == 1print('\n用例test_2执行成功') @pytest.mark.version1_1_1def test_3(self): #函数3assert 1 == 1print('\n用例test_3执行成功')

pytest.main(['-v','-m version1_1_0','test_case3.py']),执行结果如下:只执行被标记的用例test_1,test_2

6 使用@pytest.mark.usefixtures

在测试类和测试函数中使用@pytest.mark.usefixtures运行定义的fixture函数

举例:定义一个fixture

@pytest.fixture(scope='class')
def class_setup_teardown():print("\nClass setup (equal to setup_class)")# 设置代码 yieldprint("\nClass teardown (equal to teardown_class)")# 清理代码

在测试类中注明使用上面定义的 fixture

@pytest.mark.usefixtures("class_setup_teardown")
class Testcase:def test_one(self):print("\nRunning test_one")# 测试代码def test_two(self):print("\nRunning test_two")# 测试代码

用例执行后结果如下:两种方式都实现了测试类setup和teardown的功能


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

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

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

----感谢读者的阅读和学习,点个赞和关注,谢谢大家

这篇关于Pytest框架中pytest.mark功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068072

相关文章

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env

【机器学习】半监督学习可以实现什么功能?

目录 一、什么是机器学习二、半监督学习算法介绍三、半监督学习算法的应用场景四、半监督学习可以实现什么功能? 一、什么是机器学习 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到使用算法和统计模型来分析大量数据,识别其中的模式和关系,并利用这些信息来预测未来事件或做出决策。机器学习可以应用于各种领域,包括图像识别、自然语言

BD错误集锦6——【IDEA报错】tomcat server功能无效,报错Java EE: EJB, JPA, Servlets

在网上查找原因,发现是非法关闭IDEA导致的。 Open Settings | Plugns and enable it. 在设置中enable JAVA EE和tomcat server即可。 参考: https://stackoverflow.com/questions/43607642/intellij-idea-plugin-errorproblems-found-loadin

[分布式网络通讯框架]----Zookeeper客户端基本操作----ls、get、create、set、delete

Zookeeper数据结构 zk客户端常用命令 进入客户端 在bin目录下输入./zkCli.sh 查看根目录下数据ls / 注意:要查看哪一个节点,必须把路径写全 查看节点数据信息 get /第一行代码数据,没有的话表示没有数据 创建节点create /sl 20 /sl为节点的路径,20为节点的数据 注意,不能跨越创建,也就是说,创建sl2的时候,必须确保sl

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

Java中的集合框架使用技巧

Java中的集合框架使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中集合框架的使用技巧,这些技巧能够帮助我们更高效地处理数据和优化程序性能。 Java集合框架概述 Java集合框架提供了一组实现了各种集合接口的类和接口,用于存储和操作数据。它包括列表、集合、队列和映射等数据结构,能够满足不

小车启动底盘功能包

传感器与小车底盘的集成 新建功能包 catkin_create_pkg mycar_start roscpp rospy std_msgs ros_arduino_python usb_cam ydlidar_ros_driver 功能包下创建launch文件夹,launch文件夹中新建launch文件,文件名start.launch。 内容如下 <!-- 机器人启动文件:1.启动底盘2