☰
用ChatGPT生成测试数据的完整指南:提示词、JSON与批量实践
2026/10/26 5:39:57 网站建设 项目流程

chatgpt最近更新频繁,很多测试同学开始琢磨拿它来造数据。我原来觉得这就是个噱头,直到自己试了一把,给一套下单流程生成订单数据,从写提示词到拿到能直接用的几百条JSON,前后不到十分钟,当时确实愣了一下。这篇文章就是把那次经历和之后几周反复试错总结出来的方法做个完整梳理,从提示词怎么写、格式怎么控、批量怎么生成,到实测中踩过的坑,一次讲清楚。想用ChatGPT提效测试工作的朋友,这篇应该有参考价值。

1. 为什么测试数据是个老大难,ChatGPT又能怎么帮

1.1 测试数据没你想的那么简单

做了这么多年测试,一个项目最浪费时间的地方往往不是写用例,而是造数据。你要测一个订单超时自动关闭的功能,数据库里得有一批处于“已支付但未发货”状态的订单,而且创建时间得是30分钟以前。你要测一个会员过期后权益失效的逻辑,得准备不同等级、不同过期时间的会员账号。这些数据要是靠手工往数据库里插,一条两条还好,一旦需要几十上百条,人就开始烦躁。

我知道很多团队的做法是写SQL脚本批量插入,这确实是个方案,但有个问题:SQL脚本只能解决“结构正确”,解决不了“内容合理”。比如你要造一批用户信息,性别字段限定了只能填男或女,你写个CASE WHEN RAND()>0.5 THEN '男' ELSE '女' END也能跑,但生成的姓名、手机号、地址全是千篇一律的占位符,看起来就不真实。更麻烦的是,很多业务字段本身就带有隐含逻辑,比如订单金额和支付流水金额要对上,收货地址和城市编码要对上,这类关联约束光靠SQL随机生成很难兼顾。

我见过更原始的方案,直接在生产环境库里面拷贝一批数据出来脱敏用。这办法能用但风险不小,万一脱敏不干净,手机号、身份证这些敏感信息就漏出去了。而且生产数据往往覆盖不到边界场景,比如你想要一个刚好卡在超时临界点的订单,生产库里还真不一定有。

1.2 ChatGPT在这个场景里的独特价值

ChatGPT在处理这类问题上有三个很明显的优势。

第一个是理解自然语言描述。你不需要写复杂的SQL或者脚本,直接说“给我生成50个用户,包含姓名、手机号、邮箱、注册时间”,它就能给你一套完整数据。这个能力大大降低了造数据的门槛,团队里不懂SQL的测试同学也能独立操作。

第二个是自带业务常识。你让它生成订单数据,它知道订单号一般是什么格式,知道总金额通常是商品单价乘以数量,知道状态字段一般有哪些枚举值。你不需要事无巨细把每个字段的规则都列出来,它能根据常识帮你补全一部分隐含逻辑。

第三个是高速迭代。传统方式生成一批数据后发现某个字段不符合要求,要改脚本再跑一遍。ChatGPT这边直接在对话里说“把手机号改成11位,邮箱域名统一换成example.com”,几秒钟就出一版新的。这种快速试错的能力,在实际测试中非常实用。

当然,它也有短板,比如生成的数据偶尔会有逻辑不一致,或者批量生成多了之后出现重复值。这些问题后面会讲到对应的处理办法。

2. 开工前的关键准备:先把需求描述清楚

2.1 明确你的数据用途

很多人一上来就让ChatGPT生成数据,结果生成完发现完全不能用,问题往往出在需求没说清楚。你得先想明白这批数据用来测什么,然后倒推数据应该长什么样。

如果你在测接口参数校验,那数据要刻意包含各种非法值,比如超长字符串、负数、空值、特殊字符,目的是看接口能不能正确拦截。如果你在测页面展示效果,那数据要尽量真实自然,比如姓名要像真名,地址要具体到街道门牌号,这样页面看起来才像线上环境。如果你在测统计报表,那数据要有一定的分布规律,比如不同状态的订单数量要符合你预设的比例,金额区间要有梯度,方便核对汇总逻辑是否正确。

我自己的习惯是在动手之前先列一个表,把字段名、类型、取值范围、是否允许为空、字段间关联关系全部整理出来。这个整理的过程同时也是梳理业务逻辑的过程,等真的开始跟ChatGPT沟通时,你的指令会清晰得多。

2.2 写好提示词的几个核心要素

想让ChatGPT生成符合预期的数据,提示词里至少要包含四个要素:数据用途、具体字段、条数要求、输出格式。

以订单数据为例,一个比较完整的提示词是这样的:

请帮我生成30条订单测试数据,用于接口联调。 字段包括: - order_id:字符串,格式为ORD开头加8位数字 - user_id:整数,范围10000到99999 - product_name:商品名称,5到15个字 - quantity:整数,1到5 - unit_price:整数,单位分,范围1000到50000 - total_amount:等于quantity乘以unit_price - status:枚举值,从 PENDING_PAYMENT、PAID、SHIPPED、COMPLETED、CLOSED 中随机选择 - created_at:时间格式 YYYY-MM-DD HH:MM:SS,最近7天内 输出为JSON数组格式

这个提示词看起来繁琐,但每个字段的约束都写清楚了,尤其是total_amount这个字段的关联关系,以及status的枚举值,这两个细节决定了生成的数据能不能直接用。你如果不告诉它枚举值,它可能凭自己的理解填出别的状态,到时候接口直接报参数错误,你还得返工。

提示:提示词里有个小技巧,先让ChatGPT解释一遍字段含义再生成数据。比如在正式生成前加一句“请先说明你对这些字段的理解,确认无误后再开始生成”,能有效减少理解偏差,实测下来这个办法很管用。

3. 核心实操:让ChatGPT生成各类测试数据的完整拆解

3.1 基础文本类数据的生成

文本类数据是测试里最基础的,包括用户名、邮箱、地址、商品名称、文章标题、评论内容等。这类数据看起来简单,但真要做好有几个细节需要注意。

第一个是真实性。你用'测试用户' + 随机数这种方式造的姓名,在系统里一眼就能认出来是假数据。给前端展示测试用还行,拿到UAT环境给业务人员验收就不太像样了。ChatGPT生成姓名时会根据中文姓名习惯组合姓氏和名字,生成的结果会自然得多。地址也是一样,它会生成“杭州市西湖区文三路138号”这种具体到路牌号的地址,而不是笼统的“XX省XX市”。

第二个是多样性。人的姓名有长短之分,有单姓复姓之分,有的名字是两个字的,有的是三个字的。你如果全生成三个字的姓名,反而看起来不真实。ChatGPT在生成时只要你不约束字数,它通常会混合输出不同长度的姓名,这个细节是手工写脚本很难实现的。

第三个是格式合法。手机号要符合国内11位且以1开头的规则,邮箱要符合“用户名@域名”的标准格式,身份证号甚至要隐含正确的出生日期和校验位。这些规则如果全写在SQL里,逻辑会非常长,但ChatGPT靠日常学习到的格式规范,本身就能输出基本合法的数据模板,最多偶尔需要再提一句“确保手机号不是重复的”。

实际生成时可以分两步走。第一步只生成少量样本,比如5条,先确认格式和字段是否符合预期。第二步确认没问题后,再要求它扩展到需要的数量。这个方式比一次性生成大量数据然后发现格式不对要高效得多,因为ChatGPT调整输出比人修改脚本快,但改一次输出也是时间成本。

3.2 批量结构化数据的生成与验证

结构化数据是另一个大头,尤其是需要入库或者喂给接口的那种。JSON是最常用的格式,因为大多数后端接口都支持JSON数据。

批量生成时最常遇到的问题是数据间的逻辑一致性。比如订单表里有个字段total_amount(总金额),还有个字段discount_amount(优惠金额),业务逻辑要求总金额必须大于等于优惠金额。ChatGPT如果没被明确告知这个约束,它生成的数据里就可能出现优惠金额大于总金额的情况,这样的数据一入接口就会被校验逻辑拦下来。

解决办法是在提示词里把这类约束条件单独列出,并用“重要”来强调。举个例子:

请确保每条数据的 total_amount 等于 quantity * unit_price - discount_amount,且 discount_amount 不超过 unit_price * quantity 的20%。

你逐条核对也好,让ChatGPT自检也好,总比数据出来之后一条条手工改效率高。这里我强烈建议利用ChatGPT的自检能力,生成完数据后直接追加一句“请逐条检查上面的数据,看哪些记录不满足约束条件,如果有问题请修正后重新输出”。

实测下来,让ChatGPT自查是个非常好的习惯,因为它生成时的注意力可能会分散,但单独要求它检查时,它会把每条记录重新过一遍逻辑,大部分问题都能被找出来。这个做法相当于让ChatGPT扮演数据校验器的角色,一个工具当两个人用。

批量生成还有一个问题是数据量。ChatGPT的单次输出长度有限,如果你要5000条数据,它不可能一次性输出完整。我的经验是单次生成控制在20到50条之间比较稳妥,生成完一次让你拿到完整结果,然后多叫几次。一次生成200条也不是不行,但输出会被截断,还得回来补,反而更麻烦。后面会讲到怎么把多次生成的结果合并成一个完整的文件。

3.3 边界值、异常值的挖掘

这一节应该是大家最容易忽略但又最有价值的部分。我在实际测试中发现,ChatGPT最大的价值不只是帮你造“正常的数据”,而是帮你造“刁钻的数据”。

接口测试里,边界值分析是基本功。比如一个字段限制长度为1到50个字符,那你要测0个字符、1个字符、50个字符、51个字符。ChatGPT可以帮你把这类数据批量生成出来。你只要明确告诉它需要哪些边界条件,它就会围绕边界值生成数据,比如:

请为用户名(username)字段生成测试数据,字段规则是:2到20个字符,只允许字母、数字和下划线。 请分别覆盖以下情况: - 空字符串 - 1个字符 - 2个字符 - 20个字符 - 21个字符 - 包含特殊字符 - 包含中文 - 全数字 - 纯下划线

这个需求如果手写,得一行一行构造,而ChatGPT几秒钟就能列出一套覆盖各种边界情况的用例数据。更关键是它还能给出每条数据的expected status(期望的校验结果),比如空字符串应该被拒绝、20个字符应该通过、21个字符应该被拒绝,这样你等于同时获得了测试数据和预期结果,编写测试用例的效率直接翻倍。

异常数据也是一个方向,这类数据专门用来验证系统的容错能力。比如给一个日期字段塞"2024-02-30"这种不存在的日期,给金额字段塞负数,给订单状态字段塞一个完全没见过的枚举值。ChatGPT生成这类异常数据时,还会贴心地备注“这条数据故意设置了非法格式”,方便你区分。

我在一次测试中用它生成了一批含恶意SQL注入字符的搜索关键词,比如'; DROP TABLE users;--、" OR "1"="1",用来验证系统的输入过滤和防注入能力。这个场景本来需要查各种攻击payload,ChatGPT直接帮我列出了十几条常见的注入样本,省了不少搜集时间。

4. 让生成结果真正可用的几个关键细节

4.1 输出格式的控制技巧

ChatGPT默认会把内容按它觉得最友好的方式排版,但在数据生成这个场景里,输出格式的稳定性几乎和内容质量一样重要。最常用的做法是要求输出为JSON数组,同时明确字段名和类型。

一个容易踩的坑是字段名的命名风格。后端接口字段一般用驼峰命名(比如userName)或者下划线命名(比如user_name),不同项目风格不同。ChatGPT对不同命名风格都有认知,但你得在提示词里指定清楚,否则它会按自己的习惯来。我的建议是复制一段项目实际接口的字段定义给ChatGPT参考,让它严格按这个字段名输出,这样生成的数据就可以直接用于联调或入库。

代码块也是一样。ChatGPT经常会把JSON数据包在一个```json代码块里,这样看起来方便,但对脚本处理不友好。你可以在提示词里明确说“不要使用代码块标记,直接输出JSON数组”,这样输出的内容可以直接保存为.json文件,省去解析步骤。

另外,输出编码也值得注意。如果你需要的数据包含中文,ChatGPT默认会输出中文字符,这在JSON里没问题。但有些老系统不兼容UTF-8编码,需要转成Unicode转义字符。你可以在提示词里说“请确保输出内容为UTF-8编码”,必要时说“请把中文转成\uXXXX格式”,它可以做到。

4.2 批量生成规模与合并方案

前面提到单次生成的条数限制,这里说下实际怎么操作。

我常用的做法是让ChatGPT分批生成,每批50条,分5次生成250条。每次生成的时候,在提示词里带上上一批最后一条的序号,比如“从第51条开始继续生成”。这样能保证ID和数据不重复。生成完成后,把每批输出的JSON拼接在一起,就得到了一个完整的文件。

这里有一个重要技巧:如果你需要的数据条数很多,不要直接说“帮我生成10000条用户数据”,这样的请求大概率会触发输出截断,你只拿到半截数据,还得费劲补。更合理的拆分逻辑是:

请生成50条数据,每条数据的ID从1到50。生成完这50条后,我会让你继续生成第51到100条。

一次性规划太多,反而容易乱。分批生成虽然看起来要多对话几次,但实际上每次生成ChatGPT都很快,总耗时不会比你一次性请求然后被截断更多。

还有一种思路是用ChatGPT生成一段Python脚本,让脚本帮你造数据。这个方法对数据量特别大的场景更合适,比如需要10万条数据,ChatGPT直接生成JSON不现实,但一段能生成10万条数据的Python脚本它写起来很轻松。你可以让它输出脚本代码,自己在本地运行,得到结果。这相当于ChatGPT从“数据提供者”变成了“代码生成器”,算是进阶玩法。

4.3 与代码和工具的衔接方式

生成完数据之后,怎么让数据真正进入测试环境,是很多人忽略的一环。数据只在ChatGPT对话里躺着,不算完成工作,要把它变成测试能用的资源。

最直接的方式是让ChatGPT输出JSON数组,然后保存成.json文件,用Python脚本读取后通过接口批量提交。这里贴一段我常用的提交脚本:

import json import requests import time with open("test_data.json", "r", encoding="utf-8") as f: data = json.load(f) url = "http://your-api-endpoint.com/api/orders" headers = {"Content-Type": "application/json"} success_count = 0 fail_records = [] for item in data: try: resp = requests.post(url, json=item, headers=headers, timeout=5) if resp.status_code in (200, 201): success_count += 1 else: fail_records.append({"data": item, "status": resp.status_code, "body": resp.text}) except Exception as e: fail_records.append({"data": item, "error": str(e)}) time.sleep(0.1) # 避免请求过快触发限流 print(f"成功: {success_count}, 失败: {len(fail_records)}") if fail_records: with open("fail_records.json", "w", encoding="utf-8") as f: json.dump(fail_records, f, ensure_ascii=False, indent=2)

这个脚本有个好处,会把失败的记录单独存到文件里,方便你看是哪条数据不符合接口要求。联调阶段这个信息特别有用,能快速定位是数据的问题还是接口逻辑的问题。

另外,如果你们项目里用了各个云厂商的表格存储、MySQL或者其他数据库,也可以让ChatGPT生成对应的INSERT语句,直接在数据库客户端里执行。提示词可以这样写:

请根据表结构生成30条INSERT语句,表名tb_order,字段包括order_id(VARCHAR(32)), user_id(BIGINT), amount(DECIMAL(10,2)), status(TINYINT), create_time(DATETIME)。

这样生成的结果可以直接复制到SQL客户端里跑,非常适合本地联调时快速灌数据。

5. 实测过程中的常见问题与解决办法

5.1 生成结果不符合预期怎么办

这是最常遇到的问题。花了几分钟让ChatGPT生成数据,结果一看,字段名对不上,格式也不是自己想要的。这时候别急着重新生成,先用好对话里的修正能力。

如果只是字段名不一致,直接说“把字段名改成xx格式”就行,不用从头再来。如果是数据内容不满足约束条件,把它生成的结果粘贴回去,告诉它哪里有错,让它重新生成。你可以在描述中把错误原因写清楚,让它学习。比如“第一条数据的总额是600,但单价是100、数量是3,总额应该是300才对,请检查所有数据的金额计算逻辑”。

这个方法我管它叫“在对话里校准模型”。ChatGPT不像是传统脚本,跑一次错了就得改代码,它跟你在同一上下文里,它能记住你指出的错误并修正后面的输出。我实测过,连续三轮纠正之后,生成的数据基本就能稳定达到预期。关键是你要有耐心把错误说清楚,不要只说“不对,重新生成”,一定要告诉它具体哪里不对、为什么不对。

5.2 数据重复和逻辑不一致问题

大批量生成时,数据重复是个非常头疼的问题。尤其是手机号、订单号这类有唯一性约束的字段,重复会直接导致入库失败或者接口报唯一性冲突。

解决思路有两个。一个是在提示词里反复强调“确保手机号不重复”,让ChatGPT生成时更注意。另一个思路是生成完之后用脚本去重,把重复的替换掉或者删掉。第二种更可靠,因为ChatGPT在生成大量数据时,重复几乎是不可避免的,不管你怎么强调。

我一般会写一个简短的Python脚本做数据清洗:

import json import random with open("test_data.json", "r", encoding="utf-8") as f: data = json.load(f) # 假设手机号字段是 phone seen = set() cleaned = [] for item in data: phone = item.get("phone") if phone in seen: item["phone"] = f"1{random.randint(3, 9)}{random.randint(100000000, 999999999)}" seen.add(item["phone"]) cleaned.append(item) with open("test_data_cleaned.json", "w", encoding="utf-8") as f: json.dump(cleaned, f, ensure_ascii=False, indent=2)

这个脚本的作用是把重复的手机号替换成新的随机号码,然后重新保存。虽然费点事,但比让ChatGPT一版一版重新生成要省时间得多。

至于逻辑不一致问题,之前提过让ChatGPT自查是一个方案,但更保险的还是自己写校验脚本。如果金额字段比较多,可以用Python的pandas库加载数据,然后写几个断言来检查字段间的计算关系,确保数据入库前是干净、合理的。

5.3 涉及敏感信息和长数据的处理

有一个原则要牢记:永远不要把真实的生产数据发给在线对话式AI服务。哪怕只是想测试数据格式,也不要贴真实的手机号、身份证号、地址姓名。ChatGPT虽然不会主动存储这些数据用于其他目的,但安全边界还是越保守越好。

我通常的做法是让ChatGPT直接生成虚构的数据,用example.com作为邮箱域名,手机号用139xxxxxxxx这种不完整号码,姓名用明显虚构的名字。这样既能满足测试需求,又不必在安全合规上担惊受怕。

长数据是另一个问题。比如要测试一个富文本编辑器的存储和渲染能力,需要几万字的文章;要测试一个消息系统的推送限制,需要一条几万字符的消息。这种长数据ChatGPT生成起来比较吃力,输出的长度上限往往会卡住。

我的经验是分段生成再拼接。比如分10次生成,每段2000字,提示词里指定“这是第3段,请以xxx开头”来保证连贯性,最后拼成一整篇。这样虽然麻烦点,但总比让ChatGPT一次性生成完整长文然后被截断要好。

另一种更轻量的做法是生成一个短样本,然后自己用Python代码重复拼接扩展。比如:

sample = "这是一段测试文本,用于验证文本编辑器在超长内容场景下的渲染性能。" long_text = sample * 500 # 重复500次,约2万字

对于“只需要长内容、不要求内容真实语义”的场景,这种方法效率高得多,完全没必要让ChatGPT生成几千字有逻辑的文本,时间成本太高。

6. 实际项目中的应用案例:一套订单流程的测试数据

说了这么多理论,分享一个我实际做过的案例。上个月我们测一个下单流程,涉及用户创建、商品查询、订单提交、支付回调、超时关闭、退款这几个环节。每个环节都需要对应的测试数据,传统方式大概需要半天时间准备,这次我全程用ChatGPT,整个准备工作控制在了一个小时以内。

第一步是生成用户数据。因为用户中心只要求手机号和昵称,我让ChatGPT生成了20个用户,手机号全部是139开头的虚拟号段,昵称是中文名字加随机数字后缀。这步很快,一次生成就通过了。

第二步是生成商品数据。商品表字段比较多,包括商品名称、类目、价格、库存、上下架状态。我让ChatGPT生成了10个商品,覆盖了3个类目,每个类目的价格区间不同,库存也设置成了不同值,包括一个库存为0的商品用来测试售罄逻辑。这步稍微调了两轮,第一次总金额的计算逻辑错了,后面让ChatGPT重新检查修正。

第三步是生成订单数据,这是最核心的部分。为了测试超时关闭功能,我需要不同创建时间的订单。ChatGPT生成订单时,我特意在提示词里写明了“created_at分布在最近2小时内,并且其中10条超过30分钟未支付”,这样一拿到数据就可以直接触发超时判断逻辑,不用再通过修改系统时间或者手工改库的方式造数据。

第四步是让ChatGPT生成了一份支付回调的请求报文,包括支付成功、支付失败、重复回调、金额不一致这几种场景。这一步等于顺带把接口测试的用例数据也准备好了。

整个过程下来,我最大的感受是用ChatGPT造数据,省下的不仅是敲键盘的时间,更是来回沟通和查阅规则的时间。当然,它生成的数据不能直接盖上“可信”的戳,必要的校验和清洗步骤不能省,但至少让我从“程序员的活”里解放了出来。

7. 兜底方案与备份手段

依赖ChatGPT生成测试数据没问题,但有一个现实问题需要考虑:当对话式AI服务不可用时,你的造数流程会不会卡住?

我经历过一次半天无法连接的情况,手头正在准备环境数据,结果一点办法都没有。从那之后,我把造数流程分成了两条线。一条是用ChatGPT快速生成,另一条是用脚本批量生成,两条线并行维护。如果你刚开始接触ChatGPT生成测试数据,建议把常用的造数提示词保存成模板,放到团队文档里。这样即使某天自己没有时间慢慢调试,同事也能拿着模板快速生成一份可用的数据。

脚本备份方案不用太复杂,核心是把字段规则写成配置化的Python脚本。比如用户数据脚本包括姓名随机组合、手机号随机生成、邮箱拼接,订单数据脚本包括状态机流转、金额计算逻辑。写一次,后续维护成本很低。ChatGPT的优势是快,脚本的优势是稳、可控,两个方案结合使用更靠谱。

8. 最后再说点实在的

使用ChatGPT生成测试数据这段时间,一个明显的感受是它把这个工作的门槛拉低了不少。过去造数这个工作往往落在熟悉SQL或Python的偏后端的人身上,现在会用自然语言描述需求就行。这也让测试团队里更偏业务的同学有了自己造数、自己验证想法的能力,边际成本几乎为零。

但我还是想强调一句:ChatGPT生成的数据只能作为参考数据,不能替代真正的线上快照数据。涉及账目计算、金额校验、状态流转这类核心逻辑的测试,还是要准备足量的真实业务数据来验证。AI生成的数据用来快速搭建测试环境、覆盖边界场景、验证功能流程非常高效,但遇到极端复杂的历史数据迁移、账务一致性核对这类场景时,它的能力就有限了。

另外,如果你发现某个类别的数据ChatGPT反复生成都不太对,别死磕,换个思路。让ChatGPT生成对应的Python脚本,然后用脚本生成数据,往往更靠谱。这也算是我踩了几次坑之后总结出来的迂回战术。

工具只是工具,关键还是用它的人想清楚要什么。把需求描述得越精确,ChatGPT给你的回报就越高。先跑通一小批数据,确认质量后再放量生成,这个顺序不要搞反。希望这篇分享对你的测试工作有实际帮助,少一些无意义的手工造数时间,把精力花在真正需要你判断和思考的事情上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询