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

pytest:4种方法实现 - 重复执行用例 - 展示迭代次数

简介:在软件测试中,我们经常需要重复执行测试用例,以确保代码的稳定性和可靠性。在本文中,我们将介绍四种方法来实现重复执行测试用例,并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程,提升测试效率。

历史攻略:

pytest常用命令行参数解析

pytest-cov:好用的统计代码测试覆盖率插件

Pytest用例自定义 - 重复、并行、串行

Python:封装logging模块和引用

四种实现方法解析:

方法1:使用自定义装饰器
方法2:使用 pytest 的参数化
方法3:在测试方法内部使用循环
方法4:使用类参数

方法1:使用自定义装饰器

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo1.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import logdef repeat(count):def decorator(func):def wrapper(*args, **kwargs):for i in range(count):log.info(f"当前迭代次数: {i + 1}, 剩余次数: {count - i - 1}")func(*args, **kwargs)return wrapperreturn decoratorclass TestDemo1(object):count = 3@repeat(count)def test_01(self):log.info(f"迭代时间: {datetime.datetime.now()}:{self.count}")pytest.assume(3 > 2)

方法2:使用 pytest 的参数化

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo2.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import logclass TestDemo2(object):count = 3@pytest.mark.parametrize("iteration", range(count))def test_02(self, iteration):remaining = self.count - iteration - 1log.info(f"当前迭代次数: {iteration + 1}, 剩余次数: {remaining}")pytest.assume(3 > 2)

方法3:在测试方法内部使用循环

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo3.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import logclass TestDemo3(object):count = 3def test_03(self):for i in range(self.count):remaining = self.count - i - 1log.info(f"当前迭代次数: {i + 1}, 剩余次数: {remaining}")pytest.assume(3 > 2)

方法4:使用类参数

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:47
# file: test_demo4.py
# 公众号: 玩转测试开发
import pytest
import datetime
from logger import logclass TestDemo4(object):count = 3current_count = 0@pytest.mark.repeat(count)def test_04(self):TestDemo4.current_count += 1log.info(f"当前迭代次数: {TestDemo4.current_count}, 剩余次数: {self.count - TestDemo4.current_count}")pytest.assume(3 > 2)

程序入口:main.py

# -*- coding: utf-8 -*-
# time: 2024/5/12 17:46
# file: main.py
# 公众号: 玩转测试开发
import os
import time
import pytestif __name__ == "__main__":""""-s": 输出调试信息,包括 print 打印的信息。这通常在调试时使用,因为它会显示测试用例中的所有 print 输出。"-v": 显示更详细的信息."-n=num": 启用多线程或分布式运行测试用例。这需要安装 pytest-xdist 插件模块。允许并行运行的测试用例数量。"-k=value": 只执行用例的 nodeid 包含指定值的用例。这可以用于根据表达式匹配并运行特定的测试用例。"-m"=标签名: 执行被 @pytest.mark.标签名 标记的用例。这允许你根据定义的标签来过滤和运行测试用例。"-x": 一旦有任何一个用例执行失败,就停止当前线程的测试执行。"--maxfail=num": 与 -x 功能相似,但允许指定失败用例的最大数量后停止执行。"--reruns=num": 失败用例重跑指定次数。这需要安装 pytest-rerunfailures 插件模块。"""now = time.strftime("%Y_%m_%d_%H_%M_%S")pytest.main(["-s", "./tests",  '--alluredir', f'./report/xml_{now}'])cmd = rf'allure generate ./report/xml_{now} -o ./report/report_{now} --clean'print(f"{cmd}")os.system(cmd)

运行结果:

图片

Allure:

图片

注意事项:

1、避免全局变量冲突:在方法四中,我们使用了类变量来追踪迭代次数。如果有多个测试类同时运行,可能会导致变量冲突。建议在每个测试类中使用不同的变量名称。

2、性能考虑:在大量重复执行的情况下,打印日志或控制台输出可能会影响性能。可以根据需要调整输出频率或记录方式。

3、测试独立性:确保每次迭代的测试用例是独立的,不会相互影响。可以在每次迭代前重置测试环境。

总结:在本文中,我们介绍了四种实现重复执行测试用例的方法,并显示当前迭代次数和剩余执行次数。这些方法各有优缺点,可以根据具体需求选择最适合的方法。希望这些方法能帮助你更好地进行测试管理,提高测试效率和代码稳定性。个人推荐采用第四种类参数的方式。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java周总结7.20day
  • Python学习笔记—100页Opencv详细讲解教程
  • .NET 通过系统影子账户实现权限维持
  • 当Excel处理神器EasyExcel遇上Apache POI:一场关于依赖的趣味‘撞车’冒险
  • swift小知识点(二)
  • 使用APEXSQL LOG解析sql server事务日志,进行审计与数据恢复
  • 手撕排序算法:冒泡排序
  • GPT-5一年半后发布
  • 【Linux】编辑器vscode与linux的联动
  • 通过 Nginx 修复 CORS 漏洞
  • Web3D:WebGL为什么在渲染性能上输给了WebGPU。
  • Mysql集合转多行
  • 更加深入Mysql-04-MySQL 多表查询与事务的操作
  • 2024.7.20 暑期训练记录(6)
  • pytest钩子hook使用2
  • 分享的文章《人生如棋》
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angular Elements 及其运作原理
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • happypack两次报错的问题
  • iOS 颜色设置看我就够了
  • JAVA SE 6 GC调优笔记
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript创建对象的四种方式
  • MySQL用户中的%到底包不包括localhost?
  • PHP的Ev教程三(Periodic watcher)
  • uva 10370 Above Average
  • vue--为什么data属性必须是一个函数
  • 近期前端发展计划
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 进程与线程(三)——进程/线程间通信
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​如何在iOS手机上查看应用日志
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (二)linux使用docker容器运行mysql
  • (十三)MipMap
  • (十一)c52学习之旅-动态数码管
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)setTimeout 和 setInterval 的区别
  • .axf 转化 .bin文件 的方法
  • .gitignore文件_Git:.gitignore
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net - 类的介绍
  • .NET Core WebAPI中封装Swagger配置
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET微信公众号开发-2.0创建自定义菜单
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题