pytest fixture分层设计:登录、数据和环境隔离
2022年3月记录,分类「pytest」。这篇更像工作笔记,记录的是一次问题拆解和复用清单。
拆分原则
fixture 写不好,自动化会越来越像一团共享状态。这篇记录的是我把登录、造数、清理和环境配置拆开后的做法,重点是让单条用例可以独立运行。
我更关注它在真实提测流程里怎么落地,而不是单独演示一个命令或脚本。
层级设计
- session 级只放环境配置和公共 client,不放业务数据。
- function 级 fixture 负责创建订单、用户、审批单这类会被修改的数据。
- yield 后清理失败也要记录,不要静默吞掉。
@pytest.fixture
def test_order(api):
order = api.order.create(status="pending")
yield order
api.order.delete(order["id"])
示例
- 任意一条用例单独跑可以通过。
- xdist 并发时账号、订单号、缓存 key 不冲突。
- fixture 名称能看出业务含义,而不是 data1、data2。
执行时最好把截图、请求、响应、日志时间点放在一起,后面复盘会省很多事。
检查标准
fixture 的核心是生命周期管理。生命周期清楚了,很多偶现失败会自然消失。等业务规则再稳定一点,可以把这里的检查点拆成参数化用例。