深度解析 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'了。

【总结】

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

相关推荐
建筑工程企业管理系统7 分钟前
工程进度统计管理系统自动化汇总数据,解决施工企业手工对账误差难题
大数据·人工智能·自动化
Cc.Y44 分钟前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究1 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology
Smoothcloud润云1 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
jsjzsl21 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
天远数科1 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消金信贷风控与多头共债排查网关
运维·人工智能·架构·自动化
2601_954811822 小时前
机器视觉教学套件选型指南:五维技术参数对比与课程体系评估
python·数码相机
jack186892 小时前
安卓手机忘记锁屏密码怎么办? 无需密码也可解锁
android·智能手机
小马不起床2 小时前
零基础玩转 FastAPI_05:后端课程模块
python·fastapi
小王2043 小时前
Day 41:模型注意力机制 — SE / CBAM / ECA
python·深度学习·机器学习