跳到正文

测试数据与 Fixture

Test Data and Fixture

中级通用

测试数据是测试时输入或预置的值;Fixture 是为测试准备并在必要时清理的固定条件,可以包含数据、文件或账号。它们让测试从已知状态开始,方便你复现失败并判断改动有没有破坏功能。

你可能会说:「帮我给订单测试准备固定的用户和商品,每次运行都从相同状态开始,测完别留下脏数据。」

读之前建议先了解

动手看看

账号订单测试夹具准备条件订单查询测试尚未运行隔离测试库已有一单
1

先在隔离测试库创建固定账号和一笔订单。这些预置值是测试数据,准备和清理它们的机制就是 Fixture。

要点

  1. 1

    测试数据决定要验证什么

    测优惠券时,你会准备有效、过期和已用过的券。它们是测试数据,因为不同的值会触发不同结果。先想清楚要覆盖哪种行为,再选数据,比随手填几个值更容易发现问题。

  2. 2

    Fixture 提供可重复的起点

    要测下单,你可能需要一个已登录用户、一件有库存的商品和一个空购物车。Fixture 把这些前置条件准备好,让测试不依赖上一次运行留下的状态;测试数据也可以包含在其中。

  3. 3

    清理和隔离影响测试可信度

    如果一条测试把商品库存扣光,下一条测试就可能无故失败。我们可以让每条测试使用独立数据,或在测试后恢复状态。这样失败更可能来自正在验证的功能,而不是别的测试。

容易混淆的地方

测试用例说的是“做什么操作、期待什么结果”;测试数据是其中用到的具体值。Fixture 更偏向“运行前有哪些条件、如何准备这些条件”,不只是一份数据表,也可能包含临时文件或环境配置。测试替身则用来代替外部服务等依赖,解决的是依赖如何响应的问题。

什么时候用

适合用

  • 给电商网站的下单测试准备固定账号、商品和库存,让每次运行都能从同样的购物车状态开始。
  • 测试后台权限时,预置管理员和普通成员,再分别检查他们能看到和修改哪些内容。
  • 在持续集成中运行数据库测试,先建立所需记录,结束后清理,避免测试之间互相影响。

不适合用

  • 要给正式环境导入第一批商品时,这些是业务数据;用正式的数据导入流程,而不是测试 Fixture。
  • 要评估大量真实用户行为的分布时,少量固定样例不够;改用合规采集的数据分析,或按目标分布生成数据。

练一练

你让 AI 为订单取消功能写自动化测试。测试单独运行会通过,整套运行时却偶尔提示“订单已取消”。怎样处理最贴近测试数据与 Fixture 的用途?

让 AI 帮你做

请为订单取消功能设计测试数据与 Fixture:每条测试从独立的待取消订单开始,覆盖可取消和不可取消的状态,说明如何准备、清理数据,并检查测试能否重复运行且互不影响。

接下来学什么