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

news2024/11/15 19:52:21

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

历史攻略:

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 log


def 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 wrapper

    return decorator


class 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 log


class TestDemo2(object):
    count = 3

    @pytest.mark.parametrize("iteration", range(count))
    def test_02(self, iteration):
        remaining = self.count - iteration - 1
        log.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 log


class TestDemo3(object):
    count = 3

    def test_03(self):
        for i in range(self.count):
            remaining = self.count - i - 1
            log.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 log


class TestDemo4(object):
    count = 3
    current_count = 0

    @pytest.mark.repeat(count)
    def test_04(self):
        TestDemo4.current_count += 1
        log.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 pytest

if __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、测试独立性:确保每次迭代的测试用例是独立的,不会相互影响。可以在每次迭代前重置测试环境。

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

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

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

相关文章

3.多租户调研1

https://gitee.com/xiaoqiangBUG/hello-ruoyi-cloud.git 1.mybatis plus 的插件 TenantLineInnerInterceptor 是 MyBatis Plus 框架中的一个拦截器,它用于实现多租户系统的数据隔离。在多租户应用中,不同的租户应该只能访问到自己的数据,而…

URL过滤、DNS过滤和内容过滤的总结

目录 URL过滤 URL和URI URL -- 统一资源定位符 URI --- 统一资源的标识符 URL和URI之间的区别 URL过滤的方式 HTTP协议获取URL的方式 HTTP协议做控制管理的流程 HTTPS协议做控制管理的流程 1,配置SSL的解密功能 2,直接针对加密流量进行过滤 例…

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…

深入解析 GPT-4o mini:强大功能与创新应用

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

品牌故事线:如何在活动策划中保持品牌信息的连贯性?

在活动运营中保持品牌一致性和传达清晰的品牌信息,是确保活动成功并提升品牌形象的关键。 以下是一些具体的方法和建议。 码字不易,如果回答对你有所帮助,请不吝给一个三连哦! 一、明确品牌定位与核心价值 首先,需…

一起刷C语言菜鸟教程100题(27-35)

先说明这个虽然菜鸟教程也有答案,但是这个专栏的博客是自己过手写了一遍,有自己的理解,有些习题自己是变化了一些,更适合练手,也会写的更普遍一些~ 今天我们一起继续刷题,链接放在这里供大家自行使用 C 语…

小红书(社招二面)算法原题

萝卜快跑涨价 距离我们上次谈 萝卜快跑 不足半月,萝卜快跑迎来了不少"反转"。 先是被曝远程后台有人操控,真实日成本超 400: 最近还被不少网友吐槽:萝卜快跑涨价了,如今价格和网约车持平。 据不少博主实测&a…

如何在 Windows 上安装并配置 VNC 远程连接树莓派,并结合Cpolar实现公网远程访问

目录 ⛳️推荐 前言 1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 2. Windows安装VNC远程树莓派 3. 使用VNC Viewer公网远程访问树莓派 3.1 安装Cpolar步骤 3.2 配置固定的公网地址 3.3 VNC远程连接测试 4. 固定远程连接公网地址 4.1 固定TCP地址测试 ⛳️推荐…

FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前我们分享了FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发。这次我们去分享实战开发《在线…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母,需要的个数 (2)再创一个字典的方法统计,输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

【C++ —— AVL树】

C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结:代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素…

在QT中使用多线程并发服务器(C++)

什么是多线程并发服务器?在QT里如何使用多线程并发服务器呢? 多线程并发服务器是一种网络服务器设计,它能够同时处理多个客户端的请求。在多线程服务器中,主线程负责监听和接受来自客户端的连接请求,每当有一个新的连…

DNS服务器的搭建

1、DNS服务器端软件 DNS 的域名解析都是 udp/53 . 主从之间的数据传输默认使 ⽤tcp/53 DNS服务器端软件: Bind是⼀款开放源码的DNS服务器软件,Bind由美国加州⼤学Berkeley(伯克 利)分校开发和维护的,全名为Berkele…

美容院如何提高门店销售业绩?博弈美业收银系统分享五大策略

美容院要如何增加门店业绩?各位老板可以考虑以下几个方面的策略: 一、品牌宣传和营销: • 制定全面的营销计划,包括线上和线下宣传。可以利用社交媒体、网站、本地广告等多种渠道提升品牌知名度。 • 开展促销活动吸引新客户&a…

PYTHON学习笔记(七、python数据结构--集合)

目录 (4)set集合 1、集合的创建方式 1)使用{ }直接创建集合 2)使用内置函数set( )创建集合 3)使用“ 集合生成式 ”生成集合 2、集合的访问方式 1)使用for循环遍历 3、集合的修改操作 4、集合的…

SvelteKit - 1. 初始化项目

官方 doc - create a project 1、基本环境 (下面是我这里的环境,亲测用 node 14 和 16 install 会报错) node:20.9.0 npm:10.1.0 2、初始化项目 npm create sveltelatest my-app cd my-app npm install npm run de…

本地部署、微调大模型

本地部署、微调大模型 一、本地部署大模型 1.部署 更新git-lfs apt-get updateapt-get install git-lfs2. 这里极容易出错,如果报错就初始化git git lfs install git init git lfs install3.下载ChatGLM-6B源代码 git clone https://github.com/THUDM/ChatGLM…

华为强制恢复出厂设置后如何恢复数据?数据重生的2个方法介绍

华为作为全球知名的手机品牌,其产品在市场上广受欢迎。然而,有时由于各种原因,我们可能需要强制恢复出厂设置,这往往意味着数据的丢失。那么,如何在华为强制恢复出厂设置后,让数据“重生”呢?本…

赋能安防摄像头云台:国产大功率机壳开关旭之源电源可靠、高效的优势

由GIS地图、图像采集、传输、控制、显示等设备和控制软件组成的“天网系统”通过对固定区域进行实时监控和信息记录,为社会治安和城市管理提供了强有力的支撑。 随着技术的不断革新和升级,天网技术逐渐拓展到全国范围,并在各个城市和乡村实现…