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、测试独立性:确保每次迭代的测试用例是独立的,不会相互影响。可以在每次迭代前重置测试环境。
总结:在本文中,我们介绍了四种实现重复执行测试用例的方法,并显示当前迭代次数和剩余执行次数。这些方法各有优缺点,可以根据具体需求选择最适合的方法。希望这些方法能帮助你更好地进行测试管理,提高测试效率和代码稳定性。个人推荐采用第四种类参数的方式。
相关文章:

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

一文入门SpringSecurity 5
目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长,看源码的时候要见名知意&am…...
IPython的HTML魔法:%%html_header命令全解析
IPython的HTML魔法:%%html_header命令全解析 在IPython和Jupyter Notebook中,%%html_header是一个魔术命令,它允许用户在Notebook的单元格中添加HTML头部(head)内容。这个功能特别有用,当你需要定制Notebo…...
将SQL中的占位符替换成参数
将SQL中的占位符替换成参数 描述 描述 此方法是将SQL中的${}或#{}替换为直接拼接到SQL中或直接替换为?的形式。具体详情看下面代码。 import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** author HuYu* date 2023-09-21* since 1.0**…...

锁相环 vivado FPGA
原理 同步状态/跟踪状态:相位差在2kπ附近,频率差为0到达上述状态的过程称为捕获过程锁相环的捕获带:delta w的最大值,大于这个值的话就不能捕获鉴相器(PD-phase discriminator):相乘加LPF&…...

英语科技写作 希拉里·格拉斯曼-蒂(英文版)pdf下载
下载链接: 链接1:https://pan.baidu.com 链接2:/s/1fxRUGnlJrKEzQVF6k1GmBA 提取码:b69t 由于是英文版,可能有些看着不太方便,可以在网页版使用以下软件中英文对照着看,看着更舒服,…...
《Dynamic Statistical Learning in Massive Datastreams》论文阅读笔记
论文地址: https://www3.stat.sinica.edu.tw/ss_newpaper/SS-2023-0195_na.pdf 论文题目翻译:《在大规模数据流中的动态统计学习》 核心观点: 动态跟踪和筛选框架(DTS):论文提出了一个在线学习和模型更新的新框架&…...

【数据分享】2008-2022年我国省市县三级的逐日NO2数据(excel\shp格式)
空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据和2013-2022年的省市县三级的逐日SO2数据(均可查看之前的文章获悉详情)! 本次…...

JavaEE (1)
web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行 交互. 流程图如下 Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它是一个容器&…...

事务、函数和索引
什么是事务? 事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。 特点 一个事务中如果有一个数据库操作失败,那么整个事务…...

Android APP 基于RecyclerView框架工程(知识体系积累)
说明:这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来(比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多,工程量的增加,后期想高效的分析和查找并不容易)…...

【iOS】GCD
参考文章:GCD函数和队列原理探索 之前写项目的时候,进行耗时的网络请求使用GCD处理过异步请求,但对一些概念都很模糊,这次就来系统学习一下GCD相关 相关概念 什么是GCD? Grand Center Dispatch简称GCD,是…...

C语言 | Leetcode C语言题解之第282题给表达式添加运算符
题目: 题解: #define MAX_COUNT 10000 // 解的个数足够大 #define NUM_COUNT 100 // 操作数的个数足够大 long long num[NUM_COUNT] {0};long long calc(char *a) { // 计算表达式a的值// 将数字和符号,入栈memset(num, 0, sizeof(num));in…...
如何使用 API list 极狐GitLab 容器镜像仓库中的 tag?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
粒子群算法PSO优化BP神经网络(PSO-BP)回归预测——Python和MATLAB实现
下面是一个使用Python实现的粒子群算法(PSO)优化反向传播神经网络(BP)的示例代码。 以下是具体的代码实现: python import numpy as np from sklearn.datasets import make_regression from sklearn.model_selection…...
React-router路由配置及跳转
1、V6对比V5的修改内容 1、API: useNavigate 代替了useHistory 。 2、废弃了Route组件的exact属性。 3、组件 <Routes>代替了<Switch> 4、组件NavLink中移除了 activeStyle activeClassName 属性。 2、安装依赖react-router-dom npm install react-router-dom…...

vue3【实战】可编辑的脱敏信息
<script lang"ts" setup> import { ref, onMounted } from "vue"; let real_name ref("朝阳");let name ref("");onMounted(() > {name.value des_name(real_name.value); });function focusing() {name.value real_name…...

S71200 - 笔记
1 S71200 0 ProfiNet - 2 PLC编程 01.如何零基础快速上手S7-1200_哔哩哔哩_bilibili 西门子S7-1200PLC编程设计学习视频,从入门开始讲解_哔哩哔哩_bilibili...

linux系统查历史cpu使用数据(使用sar 查询cpu和网络占用最近1个月历史数据)。
一 sar 指令介绍 在 Linux 系统中,sar 是 System Activity Reporter 的缩写,是一个用于收集、报告和保存系统活动信息的工具。它是 sysstat 软件包的一部分,提供了丰富的系统性能数据,包括 CPU、内存、网络、磁盘等使用情况&am…...

Edge浏览器加载ActiveX控件
背景介绍 新版Edge浏览器也是采用Chromium内核,虽然没有谷歌浏览器市场占有率高,但是依托微软操作系统的优势,Edge浏览器还是发展很强劲,占据着市场第二的位置。随着微软停止服务IE浏览器,曾经风光无限的IE浏览器页退出…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...