← 中文资源

简体中文版本

测试数据管理工作流

把测试数据统一为版本化夹具与工厂,按测试隔离数据作用域,定期刷新生产形态数据。

阅读英文原文

目标

依赖共享种子库的测试套件是在和自己耦合:一种顺序通过、另一种顺序失败,没人说得清哪条测试拥有哪些行。工厂加每测试作用域能彻底溶解这种耦合;而定期从生产分布刷新的“生产形态”数据集,保证测试面对的边界情况与真实世界保持同步。

步骤要点

  1. 盘点数据依赖:映射哪些测试读写哪些共享夹具与数据库,暴露导致顺序依赖的耦合点。
  2. 建实体工厂:提供创建合法实体且字段可覆盖的工厂,测试只声明自己场景的差异部分。
  3. 按测试圈定数据作用域:每条测试用自己创建的数据(唯一键或每测试 schema),自动删除或回滚,消除跨测试耦合。
  4. 版本化核心夹具:少数复杂真实世界夹具作为带出处说明的版本化文件,经评审变更。
  5. 定期刷新生产形态集:按计划从生产模式重新生成大规模匿名或合成数据,保持基数与边界分布的新鲜度。

排错提示

乱序就挂是共享可变夹具的铁证,工厂加每测试清理能让随机顺序连跑全绿;测试自己造出了非法实体是工厂没编码领域约束,必填与合法组合要进工厂默认值;没人敢删的老夹具是缺出处记录,标注来源与导出日期让退役变成有日期的决策。

适用边界

工厂默认值需要随领域演进维护,schema 变更时工厂要同步升级;大规模生产形态数据集的生成有计算成本,刷新频率要与漂移容忍度匹配。

代码示例

before: shared seed (dev-db, 1.2M rows)
  test A updates user #42 -> test B (later) sees
  changed state -> order-dependent failures

after:
  factory: makeUser({role: 'admin', tier: 2})
  test creates its own user (unique key: test-<uuid>)
  teardown: delete by key (or per-test schema)

  parallel: 4 shards, zero collisions
  order: randomized x 20 runs, all green

fixtures (versioned, reviewed):
  complex-refund-case.json  (provenance: INC-2940)
  seasonal-pricing.json     (prod export 2026-09, masked)

refresh: nightly synth set from prod distributions