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

深度解析 pytest 参数化与 --count 执行顺序的奥秘

有这样一个业务场景,登录不同地区的账号,重复500遍,以验证登录功能是否正常。

登录的代码如下,其中login_data是一个fixture,用来组织数据:

@pytest.mark.parametrize("login_data", ['cn_test', 'us', 'eu'], indirect=True) 
def test_login_change_region(appium_service, ios_driver, login_data):...

那么如何实现重复登录500遍呢?按照之前文章介绍过的内容来说,在设置--count 500即可,但这样你会发现,'cn_test'登录了500遍、'us'登录了500遍、'eu'登录了500遍。

之前文章讲过,两个parametrize中的参数会按照笛卡尔积进行排序,当时我们并没有关心它们的执行顺序,例如像下面这样写,执行结果会怎样呢?

@pytest.mark.parametrize("repeat_count", list(range(2)))
@pytest.mark.parametrize("login_data", ['cn_test', 'us', 'eu'], indirect=True) 
def test_login_change_region(appium_service, ios_driver, login_data, repeat_count: int):...

首先总次数肯定是6次,没问题,那么顺序呢?实际执行的顺序是这样的:

'cn_test'登录了2遍、'us'登录了2遍、'eu'登录了2遍。不是第1遍登录'cn_test'、'us'、'eu',第2遍登录'cn_test'、'us'、'eu'。

那么如果我就是想要 第1遍登录'cn_test'、'us'、'eu',第2遍登录'cn_test'、'us'、'eu' 如何实现呢?

这里介绍一种方法,手动组合参数以获得所需的执行顺序:

@pytest.mark.parametrize("login_data", ['cn_test', 'us', 'eu'] * 2, indirect=True)  # 重复2次
def test_login_change_region(appium_service, ios_driver, login_data):# 登录逻辑

这样得到的顺序就是:第1遍登录'cn_test'、'us'、'eu',第2遍登录'cn_test'、'us'、'eu'了。

【总结】

同样的操作,但是不同的执行顺序可能会发现不同的问题,这样就需要我们控制测试方法的执行顺序,所以我们不仅要考虑如何编写测试方法,还有考虑它们的执行顺序。

http://www.lryc.cn/news/520780.html

相关文章:

  • 【traefik】forwadAuth中间件跨namespace请求的问题
  • java学习记录16
  • 【Lua学习之旅】之单行/多行注释
  • [Effective C++]条款45 运用成员函数模板接受所有兼容类型
  • Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
  • 【python基础——异常BUG】
  • 解决Qt打印中文字符出现乱码
  • 第三十八章 Spring之假如让你来写MVC——适配器篇
  • 服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.
  • 昵称 校验
  • MATLAB学习笔记目录
  • 基于单片机的语音控制玩具汽车的设计
  • Qt WORD/PDF(五)使用Json一键填充Word表格
  • vue3+ts的几个bug调试
  • DVWA靶场CSRF漏洞通关教程及源码审计
  • 前端开发:HTML常见标签
  • 【机器学习】主动学习-增加标签的操作方法-样本池采样(Pool-Based Sampling)
  • 【Rust自学】11.9. 单元测试
  • 深入理解Web存储机制:Cookie、SessionStorage与LocalStorage的区别
  • SpringBoot之BeanDefinitionLoader类源码学习
  • 【芯片封测学习专栏 -- 2D | 2.5D | 3D 封装的区别和联系】
  • 从硬件设备看Linux
  • open3d+opencv实现矩形框裁剪点云操作(C++)
  • git 本地操作
  • PL/SQL语言的文件操作
  • linux lsof 和 fuser命令介绍
  • [Python学习日记-76] 网络编程中的 socket 开发 —— 介绍、工作流程、socket 模块用法和函数介绍
  • vue(七) vue进阶
  • [Transformer] The Structure of GPT, Generative Pretrained Transformer
  • Django Admin 自定义操作封装