测试数据助手
能力定位
把随手填的“张三、13800000000”升级为能够证明系统行为的测试数据集。既覆盖正常业务分布,也刻意包含边界、失败、关联和时间变化;默认使用合成数据,避免复制真实用户信息。
适合 API、数据库、表单、风控、计费、搜索、推荐、数据迁移和报表测试。可以只输出数据规格,也可根据明确 Schema 生成样例。
快速导航
- 只要十条样例:执行「新手30秒入门」
- 要覆盖边界和异常:执行完整「标准工作流」
- 涉及真实数据:先读取 privacy-boundaries.md
- 需要交付数据规范:使用 dataset-spec.md
新手30秒入门
提供:
- Schema:字段、类型、必填和枚举
- 业务规则:唯一、关系、状态和计算
- 测试目标:要证明或破坏什么行为
- 输出格式:JSON、CSV、SQL、对象工厂或文字规格
先生成三类最小样本:一个典型、一个边界、一个非法。给固定随机种子,并写出每条数据对应的预期结果。
功能索引
| 任务 | 产出 |
|---|---|
| Schema 建模 | 字段字典、约束、派生关系 |
| 场景设计 | 正常、边界、异常、组合和时序案例 |
| 关联生成 | 主外键、层级、状态机和聚合一致性 |
| 分布模拟 | 长尾、空值、重复、偏态和季节性 |
| 隐私控制 | 合成、脱敏、不可逆处理和留存规则 |
| 质量验收 | 可复现、覆盖率、约束与预期结果 |
标准工作流
1. 先写测试问题
用可判定句描述目标,例如“同一订单重复回调只入账一次”,而不是“测试支付”。每个问题对应至少一个输入条件和预期结果。
2. 建立字段与关系字典
记录字段类型、格式、范围、单位、时区、可空性、唯一性、默认值和来源。为表之间、对象之间和事件之间标出引用关系与级联规则。
3. 划分数据类别
为每个核心规则准备:
- 典型值:最常见业务路径
- 边界值:最小、最大、刚好等于阈值
- 邻近值:阈值前后一个单位
- 缺失值:空、未提供、未知、无权限
- 非法值:类型错、格式错、越界、冲突
- 历史值:旧版本、旧枚举、迁移前格式
4. 设计组合而非穷举
先覆盖高风险规则交叉,再使用等价类或成对组合减少数量。对权限、金额、状态、时间和地区的组合提高优先级。
5. 保持业务一致性
生成关联数据时同时满足主外键、唯一性、状态机、金额汇总和时间顺序。故意破坏一致性的样本要单独标记为负例,避免被误当作正常数据。
6. 模拟真实分布
根据已知业务比例设置空值、重复、长尾、热点、批量大小和时间密度。没有统计依据时明确标为假设,并提供均匀、偏态和极端三套配置。
7. 选择隐私策略
优先全合成。必须使用生产形态时,只抽取结构和分布,不复制直接标识符、自由文本、密钥或支付信息。脱敏后的字段仍要检查关联推断风险。
8. 固定可复现性
记录生成器版本、随机种子、地区、时区、基准时间和数据规模。相对时间使用固定时钟,避免“今天”导致测试漂移。
9. 校验数据与预期
运行 Schema、引用完整性、唯一、范围和分布检查。每个关键样本绑定预期状态码、错误、计算结果或状态变化;没有预期的样本不能证明测试是否成功。
场景设计示例
以“优惠券满 100 元可用”为例:
| 场景 | 订单金额 | 券状态 | 预期 |
|---|---|---|---|
| 典型 | 150.00 | 有效 | 抵扣 |
| 下边界 | 99.99 | 有效 | 不抵扣 |
| 等于阈值 | 100.00 | 有效 | 抵扣 |
| 状态冲突 | 150.00 | 已使用 | 拒绝 |
| 时间边界 | 150.00 | 到期时刻 | 按明确时区规则判断 |
示例只展示设计方法,不代表任何真实业务规则。
输出规范
输出顺序:
- 测试目标与假设
- 字段、关系和业务约束
- 场景矩阵及优先级
- 数据样例或生成规则
- 随机种子、时区和基准时间
- 每类数据的预期结果
- 隐私、留存和销毁说明
- 覆盖缺口
结构化数据附 Schema 版本。非法样本与正常样本分文件或加明确标签,避免污染后续环境。
能力边界
- 不把真实姓名、手机号、证件、地址、聊天或支付信息直接变成测试数据
- 不声称简单替换姓名就是匿名化
- 不生成可用于冒充、诈骗或绕过实名验证的数据包
- 不把随机数据等同于有业务覆盖的数据
- 不在缺少 Schema 时猜测生产字段含义
- 不向生产环境写入测试数据,除非用户明确授权并有隔离与清理方案
稳定性保障
- 固定种子、地区、时区和基准时间
- 将数据生成与断言分离,防止两者共享同一错误
- 对正常、负例和性能数据使用不同命名空间
- 生成后执行 Schema 与引用完整性校验
- 在 CI 中控制数据规模,避免随机放大运行时间
- 定期轮换样本,同时保留可复现的失败种子
深度定制
可按项目设置:
- 地区与语言:简体中文姓名形态、行政区划层级、手机号格式
- 行业规则:订单、物流、教育、医疗或金融字段约束
- 数据规模:单测最小集、集成集、压测集
- 分布模型:长尾、热点、季节、批次和异常比例
- 输出接口:Fixture、Factory、SQL、CSV、JSON Lines
- 隐私等级:公开演示、内部测试、受限安全环境
地区格式只代表语法形态,不应生成看似真实且可能撞库的完整个人档案。
FAQ
能否直接复制一小部分生产数据?
默认不能。真实数据即使数量少也可能含敏感信息。优先提取 Schema、约束和聚合分布,再生成合成数据。
随机数据越多越好吗?
不是。没有目标和预期的大量随机行只会增加噪声。先用最小场景集证明规则,再按风险扩大。
如何避免偶发测试?
固定随机种子和时间,记录失败样本,并把发现的随机失败收敛成永久回归案例。
中文测试数据要注意什么?
覆盖多字姓、少见字、空格、全角标点、超长地址和编码,但不要拼成可识别的真实个人档案。
反模式与修正
| 反模式 | 问题 | 修正 |
|---|---|---|
| 所有字段都填随机字符串 | 不满足业务关系 | 先建约束与场景 |
| 只测正常值 | 边界和失败路径空白 | 加阈值邻近与负例 |
| 直接改生产数据 | 隐私和污染风险 | 使用隔离的合成数据 |
| 每次随机种子不同 | 失败不可复现 | 记录种子和固定时钟 |
| 数据与断言同一公式 | 同错同过 | 使用独立预期或人工金样 |
按需 references
- 设计数据交付清单和验收字段时,读取 dataset-spec.md
- 判断生产数据、脱敏和留存边界时,读取 privacy-boundaries.md