测试数据与 Fixture
Test Data and Fixture
中级通用测试数据是测试时输入或预置的值;Fixture 是为测试准备并在必要时清理的固定条件,可以包含数据、文件或账号。它们让测试从已知状态开始,方便你复现失败并判断改动有没有破坏功能。
你可能会说:「帮我给订单测试准备固定的用户和商品,每次运行都从相同状态开始,测完别留下脏数据。」
读之前建议先了解
动手看看订单查询测试如何稳定复现
1
先在隔离测试库创建固定账号和一笔订单。这些预置值是测试数据,准备和清理它们的机制就是 Fixture。
要点测试数据与 Fixture 怎样配合?
- 1
测试数据决定要验证什么
测优惠券时,你会准备有效、过期和已用过的券。它们是测试数据,因为不同的值会触发不同结果。先想清楚要覆盖哪种行为,再选数据,比随手填几个值更容易发现问题。
- 2
Fixture 提供可重复的起点
要测下单,你可能需要一个已登录用户、一件有库存的商品和一个空购物车。Fixture 把这些前置条件准备好,让测试不依赖上一次运行留下的状态;测试数据也可以包含在其中。
- 3
清理和隔离影响测试可信度
如果一条测试把商品库存扣光,下一条测试就可能无故失败。我们可以让每条测试使用独立数据,或在测试后恢复状态。这样失败更可能来自正在验证的功能,而不是别的测试。
容易混淆的地方
测试用例说的是“做什么操作、期待什么结果”;测试数据是其中用到的具体值。Fixture 更偏向“运行前有哪些条件、如何准备这些条件”,不只是一份数据表,也可能包含临时文件或环境配置。测试替身则用来代替外部服务等依赖,解决的是依赖如何响应的问题。
什么时候用
适合用
- 给电商网站的下单测试准备固定账号、商品和库存,让每次运行都能从同样的购物车状态开始。
- 测试后台权限时,预置管理员和普通成员,再分别检查他们能看到和修改哪些内容。
- 在持续集成中运行数据库测试,先建立所需记录,结束后清理,避免测试之间互相影响。
不适合用
- 要给正式环境导入第一批商品时,这些是业务数据;用正式的数据导入流程,而不是测试 Fixture。
- 要评估大量真实用户行为的分布时,少量固定样例不够;改用合规采集的数据分析,或按目标分布生成数据。
练一练选一个答案,看看解释
你让 AI 为订单取消功能写自动化测试。测试单独运行会通过,整套运行时却偶尔提示“订单已取消”。怎样处理最贴近测试数据与 Fixture 的用途?
让 AI 帮你做复制给 AI Agent 直接用
请为订单取消功能设计测试数据与 Fixture:每条测试从独立的待取消订单开始,覆盖可取消和不可取消的状态,说明如何准备、清理数据,并检查测试能否重复运行且互不影响。