开学特惠 会员低至4.4折 限时加赠 10000 AI积分 立即前往 arrow

如何用AI生成测试数据?字段约束、关联关系与复现方法

文章目录
免费使用墨刀
更新时间: 2026年10月04日

用AI生成测试数据,先让它读字段和业务规则,再生成数据与校验文件。只有姓名、标题看起来像真的还不够:主键要唯一,关联字段要能找到对象,状态与日期不能互相矛盾,边界值也要有明确用途。

更稳妥的做法是把数据分为正常、边界和故意错误三组,并保存生成规则、固定种子、参考日期与版本。需要整理本地接口定义、字段文档和样例时,可以用墨刀AI客户端辅助建立生成脚本和检查文件,让同一批数据服务于原型展示、前端联调与测试。

如何用AI生成测试数据?字段约束、关联关系与复现方法

测试数据和测试用例,解决的是两件事

“输入过长标题,点击提交,预期出现长度提示”是一条测试用例;那段超过长度限制的标题,才是它需要的数据。如果AI只输出几十条格式相似的记录,数量虽然多,却可能没有覆盖任何新条件。

因此,准备数据前先问:这批数据要支撑哪个动作?展示空列表、验证超长文本、核对筛选结果,还是检查部门与工单关联?把目标写在数据清单里,才能知道每一组记录为什么存在。完整执行步骤可另外整理成测试用例,不必让数据文件同时承担操作说明。

先为售后工单写一份字段规则

下面用一组自建售后工单说明方法。部门包含售后组和技术组,工单可处于待处理、处理中、已关闭三种状态。业务规则中,已关闭工单必须有关闭时间,未关闭工单的关闭时间为空;标题长度为1到80个字符。实际项目应替换为自己的接口和存储约定。

字段约束要准备的代表值
id非空、唯一正常编号,另备重复编号作为错误集
departmentId必须对应部门表中的id两个有效部门,另备不存在的部门
title1—80个字符1字符、普通标题、80字符、81字符
statusopen / in_progress / closed三种合法值,另备unknown
closedAt已关闭时非空,其它状态为空有效时间、遗漏时间、与状态矛盾的时间

这些约束不应全靠AI猜。优先读取当前接口字段文档、类型定义、schema和真实校验代码。文档与实现不一致时,把冲突列出来,由负责人员确认哪个规则正确,再决定如何生成。

JSON Schema对象文档中,属性规则与必填声明是分开的:在properties里出现一个字段,并不自动意味着它必须存在。验证方案除了格式,还应覆盖必填、额外字段、唯一性和跨记录关系;后两项常常需要业务校验补充。

把正常、边界和错误数据分开存放

正常集用于演示和基本联调;边界集仍应符合业务规则,只是刚好落在允许范围边缘;错误集故意违反规则,用来确认系统能够拒绝。三者混在一起,开发者很容易把“预期失败”误认为生成器坏了,或者把错误数据导入演示页面。

例如,80字符标题属于边界集,81字符标题属于错误集;待处理工单的关闭时间为空符合本例规则,但引用一个不存在的部门属于关联错误。是否允许为空,要由字段规则决定,不能用“看起来不完整”代替判断。本例的字符数按Python的len统计Unicode码点;含emoji等内容时,应与前端、接口的计数方式统一,再确定长度边界。

墨刀AI客户端中组织工单测试数据、部门关联与生成说明文件
正常集、边界集和错误集分开管理,并固定生成参数。 查看大图

下面这份小样本可以直接用于核对字段关系。数据只用测试编号和业务描述,不需要真实姓名、电话或生产工单内容:

{
  "departments": [
    {"id": "D-SUPPORT", "name": "售后组"},
    {"id": "D-TECH", "name": "技术组"}
  ],
  "tickets": [
    {"id": "T-001", "departmentId": "D-SUPPORT",
     "title": "退款进度咨询", "status": "open", "closedAt": null},
    {"id": "T-002", "departmentId": "D-TECH",
     "title": "附件预览无法打开", "status": "in_progress", "closedAt": null},
    {"id": "T-003", "departmentId": "D-SUPPORT",
     "title": "地址修改已确认", "status": "closed",
     "closedAt": "2026-10-05T00:00:00Z"}
  ]
}

需要更多记录时,生成脚本比一大段JSON更好维护

少量固定记录适合评审,几十到几百条用于分页、排序或列表性能时,最好保存生成器。生成器应先创建父记录,再从已经存在的父id中选关联值。不能让AI分别生成两个表后,期待编号恰好对应。

下面的Python脚本使用固定种子与固定时间生成12条正常工单,并在写出前检查几项业务约束。保存为make_fixtures.py,在一个空的测试目录执行python make_fixtures.py,会得到可重复生成的JSON文件:

import json
import random
from pathlib import Path

rng = random.Random(42)
departments = [{"id": "D-SUPPORT", "name": "售后组"},
               {"id": "D-TECH", "name": "技术组"}]
department_ids = [d["id"] for d in departments]
statuses = ["open", "in_progress", "closed"]
reference_time = "2026-10-05T00:00:00Z"
tickets = []
for i in range(12):
    status = statuses[i % len(statuses)]
    tickets.append({
        "id": f"T-{i + 1:03d}",
        "departmentId": rng.choice(department_ids),
        "title": f"测试工单{i + 1}",
        "status": status,
        "closedAt": reference_time if status == "closed" else None
    })

assert len({t["id"] for t in tickets}) == len(tickets)
for t in tickets:
    assert t["departmentId"] in department_ids
    assert 1 <= len(t["title"]) <= 80
    assert t["status"] in statuses
    assert (t["closedAt"] is not None) == (t["status"] == "closed")

payload = {"generatorVersion": "1", "seed": 42,
           "referenceTime": reference_time,
           "departments": departments, "tickets": tickets}
Path("tickets.valid.json").write_text(
    json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")

这个小脚本只检查列出的规则;如果项目需要邮箱格式、时间顺序或复杂唯一组合,应继续补相应校验。不要关闭Python断言执行来运行这段检查。正式验证器应输出记录id、字段和失败原因,方便定位,而不只是最后显示“数据有误”。

固定种子还不够。生成器代码、依赖版本、调用顺序和参考时间都可能影响结果。Faker使用文档也说明,种子相同但版本变化可能得到不同结果,依赖“今天”的日期生成还需要固定参考日期。交接时可在README记录这些条件和文件校验值,让别人能够重建同一份数据。

别让随机数量取代边界覆盖

生成1000个普通标题,并不意味着会碰巧覆盖80字符和81字符。边界应明确构造,而不是等随机碰运气。可以单独准备“单字符标题”“恰好上限”“超出一个字符”“无效部门”“关闭时间缺失”等具名记录,把预期接受或拒绝结果写在旁边。

数据组记录条件预期结果
boundary-valid标题恰好80字符字段校验通过,页面仍可读
invalid-title标题81字符长度规则拒绝,并定位到标题字段
invalid-relationdepartmentId为D-MISSING关联检查拒绝
invalid-statestatus为closed但closedAt为空状态与时间一致性检查拒绝

错误集最好一次只违反一个规则,便于验证提示是否准确;另设少量多错误组合检查汇总体验。检验错误集的成功标准是“正确拒绝”,不能因为它没有通过校验就删除它。

给AI的任务说明,包含交付文件和检查方式

请读取字段说明和工单接口定义,先列出不明确或互相冲突的规则。
规则确认后,在 fixtures/ 中创建生成器,不连接生产数据库。
分别生成正常、边界、故意错误三组JSON,并给每组写明用途。
部门先生成,工单只能引用已存在的有效部门;错误集例外要有标记。
固定种子42、参考时间2026-10-05T00:00:00Z,记录运行时与依赖版本。
添加校验:必填、类型、枚举、主键唯一、部门引用、状态与关闭时间一致。
如果执行过校验,保存命令和实际结果;未执行的不要写成通过。
输出README,说明如何重新生成、如何识别预期失败数据。

原型展示通常只需要每组中有代表性的几条,不必把整份数据搬进画布。选择一条长标题、一条待处理、一条已关闭和一个空结果,放到墨刀原型对应页面中检查布局与状态;这不等于把JSON自动接入真实后端。开发与测试使用完整数据文件,设计评审使用相同规则的代表项,三方讨论的才是同一种业务情况。

测试数据的价值在于能回答“这个输入为什么在这里”。用墨刀AI客户端整理字段、生成器与校验结果后,先挑一条数据沿界面和接口走完整个动作,再扩大数据规模,更容易发现隐藏在关联和状态之间的问题。

免费在线原型设计工具

内容丰富组件拖拽即用

多人在线编辑实时协作

海量模板素材快速复用

一键分享交付在线评论互动