当前位置: 首页 > news >正文

Pytest框架 —— 用例标记和测试执行篇!

pytest用例标记和测试执行篇

上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。

一、pytest中内置的标记

pytest标记使用需要通过pytest.mark.标记来使用,pytest中为应对各种测试场景也内置了很多的标记。

1.1、pytest.mark.parametrize:用例参数化的标记

通过parametrize可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。

Demo:
@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)assert item > 50

1.2、pytest.mark.skip:跳过用例执行

通过skip装饰的用例,在执行的时候会无条件跳过,

参数reason:跳过测试函数的原因。

Demo
# 不写跳过原因
@pytest.mark.skip
def test_demo()assert item > 50# 写跳过原因
@pytest.mark.skip(reason='不需要执行')
def test_demo()assert item > 50

1.3、pytest.mark.skipif:根据条件跳过用例

skipif可以根据条件来决定是否跳过用例的执行, 如果条件为True则跳过测试函数执行。

参数 :condition —跳过的条件

参数 : reason —跳过的原因

Demo
a = 10
@pytest.mark.skipif(a > 20,reason='条件不成立,不执行')
def test_demo()assert item > 50
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

1.4、pytest.mark.xfail:标记预期失败的用例

xfail可以将测试函数标记为预期执行失败的用例。

参数 :condition — 将测试函数标记为 xfail 的条件(True/False )

参数 : reason — 测试函数被标记为 xfail 的原因

参数 : raises — 预期失败的异常类型

参数 : run — 是否应该实际执行测试函数。如果False,该函数将始终 xfail 并且不会被执行 。

参数 : strict — 严格模式(True/False )

Demo
a = 10
@pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError )
def test_demo()assert item > 50

1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具

usefixtures标记一般用于给测试类下面的测试方法统一设置测试夹具。

Demo
# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具
@pytest.mark.usefixtures('my_fixture这个夹具')
class TestDome:# 函数用例 指定测试夹具def test_02(self):print('----测试用例:test_01------')# 函数用例 指定测试夹具def test_03(self):print('----测试用例:test_02------')

二、自定义标记

pytest支持通过pytest.ini文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选.,

2.1、注册标记

pytest.ini文件注册标记的语法如下:
[pytest]markers =标记1标记2

2.2、标记函数

Demo:
# 用例前面加载标签:@pytest.mark.标签名  
@pytest.mark.maindef test_demo():pass

2.3、标记类

Demo:
# 方式一:直接类上面打标记
@pytest.mark.main
class TestClass(object):def test_demo1(self):assert 10 > 20# 方式二:通过类属性pytestmark,可以同时添加多个标记
class TestClass(object):pytestmark = [pytest.mark.main, pytest.mark.main]def test_demo1(self):assert 10 > 20

三、通过标记筛选用例执行

Demo:现有用例如下:
import pytest@pytest.mark.yuze
@pytest.mark.musen
def test_01():print("用例一")def test_02():print("用例二")@pytest.mark.musen
def test_03():print("用例三")@pytest.mark.musen
def test_04():print("用例四")@pytest.mark.yuze
def test_05():print("用例五")@pytest.mark.yuze
def test_06():print("用例六")

上面Demo中有6条测试用例,分别通过pytest.mark.yuze和pytest.mark.musen进行标记了,接下来我们一起来看看如何通过标记选择用例执行。

3.1、通过单个标记筛选

语法:pytest -m '标签名'
Demo: pytest -m musen

执行结果如下:

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 3 deselected / 3 selected                                                                                                               
test_mode.py ...      [100%]
========================== 3 passed, 3 deselected in 0.29s ==========================

可以看到执行结果执行了3条用例,3条未选中。

3.2、同时选中多个标记

语法:pytest -m "标记1 or 标记2"

命令: pytest -m "musen ro yuze"

执行通过musen或者yuze 标记的的用例。执行结果如下:

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 1 deselected / 5 selected                                                                                                               
test_mode.py .....      [100%]
========================== 5 passed, 1 deselected in 0.29s ==========================

从上述结果可以看到,只要加了musen或yuze这两个标记中的任意一个

语法: pytest -m "标记1 and 标记2"

命令: pytest -m "musen and yuze"

执行通过musen和yuze这两个标记同时标记的用例。执行结果如下

========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 5 deselected / 1 selected                                                                                                               
test_mode.py .      [100%]
========================== 1 passed, 5 deselected in 0.29s ==========================

END今天的分享就到此结束了!点赞关注不迷路~!

相关文章:

  • k8s搭建(一、环境配置与docker安装)
  • 【Python常见数据结构操作-持续更新】
  • 利用Jmeter做接口测试(功能测试)全流程分析!
  • Go在Win10上接收UDP组播数据
  • Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch
  • python作业题百度网盘,python作业答案怎么查
  • 汽车零配件装配产线中使用RFID技术和不使用RFID技术的优缺点
  • Go 泛型发展史与基本介绍
  • Spring系列:基于Spring-Jdbc实现事务
  • HBase基础知识(六):HBase 对接 Hive
  • 前后端访问报错
  • MyBatis的缓存
  • Python pandas 操作 excel 详解
  • electron autoUpdater自动更新使用示例 客户端+服务端
  • Debian Linux完全卸载gitlab-ce
  • 自己简单写的 事件订阅机制
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • echarts的各种常用效果展示
  • HTTP那些事
  • Java 多线程编程之:notify 和 wait 用法
  • JAVA并发编程--1.基础概念
  • Mysql优化
  • React16时代,该用什么姿势写 React ?
  • Redux 中间件分析
  • 关于字符编码你应该知道的事情
  • 回顾 Swift 多平台移植进度 #2
  • 记一次用 NodeJs 实现模拟登录的思路
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​Python 3 新特性:类型注解
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)计算机毕业设计高校学生选课系统
  • (十三)Flask之特殊装饰器详解
  • (算法)硬币问题
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)SpringBoot3---尚硅谷总结
  • (转)scrum常见工具列表
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)OpenStack Hacker养成指南
  • .naturalWidth 和naturalHeight属性,
  • .NET Core引入性能分析引导优化
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .Net中ListT 泛型转成DataTable、DataSet
  • :not(:first-child)和:not(:last-child)的用法
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [1127]图形打印 sdutOJ
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [5] CUDA线程调用与存储器架构
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [go] 策略模式