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

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

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

python 复制代码
@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中的参数会按照笛卡尔积进行排序,当时我们并没有关心它们的执行顺序,例如像下面这样写,执行结果会怎样呢?

python 复制代码
@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' 如何实现呢?

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

python 复制代码
@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'了。

【总结】

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

相关推荐
流水落花春去也1 分钟前
用yolov8 训练,最后形成训练好的文件。 并且能在后续项目使用
python
Serendipity_Carl2 分钟前
数据可视化实战之链家
python·数据可视化·数据清洗
消失的旧时光-19438 分钟前
从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透
android·数据结构·链表
方白羽8 分钟前
Android 中Flags从源码到实践
android·app·客户端
深蓝电商API9 分钟前
从数据采集到商业变现:网络爬虫技术的实战与边界
android·爬虫
普通网友14 分钟前
Objective-C 类的方法重载与重写:区别与正确使用场景
开发语言·ios·objective-c
小裴(碎碎念版)28 分钟前
文件读写常用操作
开发语言·爬虫·python
TextIn智能文档云平台32 分钟前
图片转文字后怎么输入大模型处理
前端·人工智能·python
ujainu43 分钟前
Python学习第一天:保留字和标识符
python·学习·标识符·保留字
CodeCraft Studio43 分钟前
用“录制宏”轻松实现文档自动化:ONLYOFFICE 宏功能实践解析
运维·自动化·onlyoffice·录制宏·创建宏·文档自动化·文档协同