0

AI Mock数据生成工具免费推荐:6款一键造出真实测试数据的神器横向对比与实操指南

2026.08.04 | youres | 74次围观

后端接口还没写完,前端页面已经排期上线;测试要压一批 10 万行的订单数据,手里却只有 3 条示例记录——这大概是每个研发团队都躲不掉的场景。手写假数据不仅慢,而且假得离谱:姓名全是"张三李四",手机号全是"13800138000",一到演示环节就露馅。

Mock 数据生成工具就是来解决这件事的。这两年这类工具集体接上了 AI 能力:你只要用一句自然语言描述字段,它就能推断出该字段应该长什么样,甚至连"下单时间必须晚于注册时间"这种业务约束都能照顾到。本文横向对比 6 款完全免费(或有足够用的免费额度)的工具,每款都给出可直接复制的实操代码,并附一套选型决策表。

一、先想清楚:你要的是哪一类 Mock

很多人选错工具,是因为没分清三种截然不同的需求:

  • 造数据(Data Generation):我要 10 万条长得像真人的用户记录,导入数据库或喂给压测脚本。
  • 造接口(API Mocking):后端接口还不存在,我要一个能返回 JSON 的地址,让前端先跑起来。
  • 拦截请求(Request Interception):接口存在但不稳定,我要在浏览器或单测里劫持特定请求,返回可控结果。

这三类需求对应的工具完全不同。下面的对比表按这个维度分类,选之前先对号入座。

二、6款工具横向对比总表

工具 主攻类型 免费程度 上手难度 最适合的人
Apifox 造接口 + 造数据 个人版免费,团队协作有额度 ★☆☆☆☆ 前后端联调、有接口文档的团队
Mock.js 造数据(前端) 完全免费开源 ★★☆☆☆ 前端工程师,想在项目里内嵌规则
Faker 造数据(批量) 完全免费开源 ★★☆☆☆ 后端 / 测试,要灌库或跑压测
Mockaroo 造数据(可视化) 免费额度每天 1000 行 ★☆☆☆☆ 不想写代码的产品、测试、运营
JSON Server 造接口 完全免费开源 ★★☆☆☆ 想要一个带增删改查的假后端
MSW 拦截请求 完全免费开源 ★★★☆☆ 写单元测试 / E2E 测试的工程师

三、逐款实测详解

1. Apifox:文档即 Mock,零配置最省事

Apifox 的定位是"Postman + Swagger + Mock + JMeter"四合一。它最大的价值在于不需要单独维护 Mock 规则:只要你在接口文档里定义了数据模型,Mock 服务立刻可用,字段变更后 Mock 结果实时同步。

更贴心的是它的智能 Mock:内置的规则引擎会根据字段名推断内容。字段叫 email 就返回邮箱格式,叫 avatar 就返回图片地址,叫 createTime 就返回时间戳——不用手写一行规则。

实操三步:

  1. 在 Apifox 里新建接口,定义响应的数据结构(也可以直接导入 OpenAPI / Swagger 文件)。
  2. 点击"Mock"标签,直接复制生成的本地 Mock 地址,形如 http://127.0.0.1:4523/m1/xxx-xxx/user/list
  3. 前端把 baseURL 换成这个地址,页面立刻有数据。

进阶技巧:Apifox 支持"高级 Mock",可以按请求参数返回不同结果。比如 id=1 返回正常用户,id=999 返回 404 错误——测异常分支特别好用,比手动改代码优雅得多。

短板:它是桌面客户端,不适合塞进 CI 流水线做纯代码化的数据生成(虽然有 Apifox CLI,但那是跑测试用的)。

2. Mock.js:前端老将,规则语法是精髓

Mock.js 出现得早,但它的数据模板语法至今仍是同类里最简洁的。核心思想是在 key 上写规则,用 | 分隔:

const Mock = require('mockjs');

const data = Mock.mock({
  // 生成 5 到 10 条记录
  'list|5-10': [{
    'id|+1': 1,                    // 自增 ID
    'name': '@cname',              // 中文姓名
    'email': '@email',             // 邮箱
    'age|18-60': 1,                // 18 到 60 的整数
    'score|1-100.1-2': 1,          // 带 1-2 位小数
    'status|1': ['正常', '禁用', '待审核'],  // 从数组里随机取一个
    'createTime': '@datetime',     // 随机日期时间
    'avatar': '@image("100x100")'  // 占位图
  }]
});

console.log(JSON.stringify(data, null, 2));

安装只需 npm install mockjs@cname@ctitle@cparagraph 这类中文占位符是它相对国外工具的最大优势——生成的中文姓名、标题、段落都很自然,做国内产品的演示图特别省事。

短板:项目已多年低频维护,随机性偏"机械"(比如 @cname 的姓氏分布不符合真实人口比例)。做演示够用,做严肃的数据分析测试要慎重。

3. Faker:批量灌库的首选

Faker 是跨语言的老牌方案,Python 版(pip install faker)和 JS 版(npm install @faker-js/faker)都很成熟,支持 70 多种语言环境,中文用 zh_CN

from faker import Faker
import csv

fake = Faker('zh_CN')
Faker.seed(2026)  # 固定种子,保证每次生成的数据可复现

with open('users.csv', 'w', newline='', encoding='utf-8-sig') as f:
    w = csv.writer(f)
    w.writerow(['id', 'name', 'phone', 'email', 'company', 'address', 'register_at'])
    for i in range(1, 100001):   # 十万条
        w.writerow([
            i,
            fake.name(),
            fake.phone_number(),
            fake.email(),
            fake.company(),
            fake.address().replace('\n', ' '),
            fake.date_time_between(start_date='-2y', end_date='now')
        ])
print('done')

两个必须记住的点:第一,一定要 Faker.seed(),否则每次跑出来的数据都不一样,测试结果无法复现;第二,写 CSV 时用 utf-8-sig 编码,否则 Excel 打开全是乱码——这个坑几乎人人踩过一次。

业务约束怎么办? Faker 本身不懂业务规则,得自己兜。比如"下单时间必须晚于注册时间":

reg = fake.date_time_between(start_date='-2y', end_date='-1d')
order = fake.date_time_between(start_date=reg, end_date='now')  # 以注册时间为起点

4. Mockaroo:不写代码也能造十万行

Mockaroo 是在线可视化工具,界面上拉几个下拉框定义字段类型,点导出就完事。免费额度是每天 1000 行,支持导出 CSV、JSON、SQL(直接生成 INSERT 语句)、Excel 等格式。

它的强项是内置了 140+ 种真实数据类型:不只是姓名地址,连信用卡号(符合 Luhn 校验)、ISBN、MAC 地址、汽车品牌型号都有现成的。还支持公式字段,比如 total = price * quantity,让字段之间保持逻辑一致。

适合场景:一次性需求。给客户做演示、填一张表格、灌一批种子数据,用它最快——五分钟搞定,不用装任何东西。不适合:需要反复生成、要进 CI 的场景,1000 行/天的限制会很快撞墙。

5. JSON Server:30 秒起一个假后端

如果你要的不只是数据,而是一个能增删改查的完整 REST 接口,JSON Server 是最省力的答案。

# 1. 写一个 db.json
{
  "posts": [
    { "id": 1, "title": "第一篇", "views": 100 },
    { "id": 2, "title": "第二篇", "views": 250 }
  ],
  "users": [
    { "id": 1, "name": "小王" }
  ]
}

# 2. 一行命令启动
npx json-server db.json --port 3000

启动后你立刻拥有了这些接口:GET /postsGET /posts/1POST /postsPUT /posts/1DELETE /posts/1,而且写操作会真实落盘到 db.json,刷新页面数据还在。还自带分页(?_page=1&_limit=10)、排序(?_sort=views&_order=desc)、模糊搜索(?q=关键词)。

组合拳:用 Faker 生成 db.json,再用 JSON Server 托管,就得到一个数据量真实、功能完整的假后端,前端可以从列表页一路调试到详情页。

6. MSW:在网络层拦截,测试场景的正解

MSW(Mock Service Worker)的思路和前面几款都不一样:它不起服务器,而是用 Service Worker / Node 拦截器在网络层劫持请求。业务代码一行都不用改,你的 axios、fetch 照常发请求,只是被中途截胡了。

// src/mocks/handlers.js
import { http, HttpResponse } from 'msw';

export const handlers = [
  http.get('/api/user/:id', ({ params }) => {
    return HttpResponse.json({
      id: params.id,
      name: '测试用户',
      role: 'admin'
    });
  }),

  // 模拟 500 错误,测试异常分支
  http.post('/api/order', () => {
    return new HttpResponse(null, { status: 500 });
  })
];

这带来一个关键好处:同一套 Mock 规则,开发时在浏览器用,跑单测时在 Node 里用,E2E 测试时也能用。不用维护三份配置。这是它比 JSON Server、Apifox 更适合测试场景的根本原因。

短板:概念门槛最高,要理解 Service Worker 的注册机制,首次配置比其他工具都折腾。但一旦跑通,长期收益最大。

四、把 AI 接进来:一句话生成造数脚本

上面 6 款工具本身只有 Apifox 内置了较强的智能推断。但你完全可以用大模型(DeepSeek、通义千问、Kimi 都行)当"脚本生成器",让它替你写 Faker 或 Mock.js 代码。关键是提示词要给足约束。

可直接复用的提示词模板:

你是资深测试开发工程师。请用 Python + Faker(zh_CN) 生成测试数据脚本。

【表结构】
用户表 users: id(自增), nickname(中文昵称,2-8字), phone(中国手机号),
  city(中国城市), register_at(注册时间), vip_level(0-5整数)
订单表 orders: order_no(18位数字), user_id(关联users.id),
  amount(金额,10-9999,两位小数), pay_at(支付时间), status(待付款/已付款/已退款)

【业务约束】
1. orders.pay_at 必须晚于对应用户的 register_at
2. status 为"待付款"时 pay_at 必须为空
3. vip_level 越高,该用户的订单数越多(0级1-2单,5级20-50单)
4. 金额分布要符合长尾:80%订单在100元以下

【输出要求】
- 生成 1000 个用户和对应订单,写入两个 CSV 文件
- 使用 utf-8-sig 编码
- 固定随机种子为 2026
- 代码加中文注释,可直接运行

这套提示词的核心是把业务约束单独列成一节。这正是所有 Mock 工具最弱的地方——它们能生成合法的字段,但不懂字段之间的关系。让大模型来补这块,效率比自己写循环高得多。

如果你还想让 AI 顺手把数据库表结构也一起设计了,可以配合AI数据库设计工具免费推荐:6款一句话生成ER图与建表语句的神器横向对比与实操指南里的方法,从建表到造数一条龙。

五、选型决策:三个问题定答案

你的处境 推荐组合 理由
团队已有接口文档,前后端要联调 Apifox 文档即 Mock,零额外维护成本
纯前端项目,只想本地跑起来 Mock.js 或 JSON Server 轻,装完就能用,无需服务端
要往数据库灌几万条数据 Faker + AI 生成脚本 无行数限制,业务约束可编程
临时给客户演示,不想写代码 Mockaroo 可视化,五分钟出 Excel
要写单测 / E2E,需要稳定可控 MSW 一套规则通吃浏览器和 Node
既要假后端又要真实数据量 Faker 造 db.json + JSON Server 托管 数据真实 + 接口完整

六、五个容易踩的坑

  1. Mock 数据混进生产环境。 最严重的事故类型。务必用环境变量隔离,例如只在 NODE_ENV === 'development' 时才启动 Mock,构建生产包时彻底剔除相关代码。
  2. 不固定随机种子。 上次测出的 bug 这次复现不了,因为数据变了。Faker 用 Faker.seed(n),Mockaroo 导出后直接存文件。
  3. 只造正常数据。 空字符串、超长文本、emoji、SQL 关键字、负数金额——这些边界值才是真正能测出问题的。造数时刻意掺 5% 的脏数据。
  4. CSV 用 utf-8 而非 utf-8-sig。 Excel 打开中文乱码,然后花半小时怀疑是脚本写错了。
  5. Mock 结构和真实接口不一致。 前端按 Mock 写完,联调时发现字段名对不上、层级嵌套不同。解决办法是让 Mock 直接从 OpenAPI / Swagger 文档生成,而不是手写——这也是 Apifox 这类"文档驱动"工具的核心价值。

七、一个完整的最小实践

如果你现在就想动手,按这个顺序走一遍,大约 15 分钟:

# 第 1 步:用 Faker 造 200 条数据,输出为 db.json
pip install faker

# gen_db.py
from faker import Faker
import json, random
fake = Faker('zh_CN')
Faker.seed(2026)
random.seed(2026)

posts = [{
    'id': i,
    'title': fake.sentence(nb_words=6).rstrip('。'),
    'author': fake.name(),
    'views': random.randint(0, 50000),
    'createTime': fake.date_time_between('-1y').isoformat()
} for i in range(1, 201)]

json.dump({'posts': posts}, open('db.json', 'w', encoding='utf-8'),
          ensure_ascii=False, indent=2)

# 第 2 步:托管成 REST 接口
npx json-server db.json --port 3000

# 第 3 步:验证
# 浏览器打开 http://localhost:3000/posts?_page=1&_limit=10&_sort=views&_order=desc

到这一步,你已经有了一个数据真实、支持分页排序、可增删改查的假后端。前端接上就能开发,完全不必等后端。

八、常见问题

Q:Mock.js 和 Faker 该选哪个?
看你在哪一端。前端项目里内嵌规则、要中文占位符,选 Mock.js;后端或测试要批量出文件、要精确控制业务约束,选 Faker。两者也可以并存,互不冲突。

Q:Mockaroo 每天 1000 行不够用怎么办?
两个办法:一是把它当"模板设计器",在界面上调好字段类型后导出小样,再用 AI 把这套结构翻译成 Faker 脚本本地无限量生成;二是直接跳过它,用 Faker。

Q:Mock 数据能用来做性能压测吗?
可以,但要注意数据分布。压测时如果所有记录的某个索引字段值都很集中,会掩盖真实的数据库性能问题。用 Faker 时刻意让主键、外键、时间字段分散开。

Q:接口文档变了,Mock 要重新配一遍吗?
用 Apifox 这类文档驱动的工具不用,改文档 Mock 自动跟着变。手写 Mock.js / MSW 规则的就得手动同步——这也是团队规模上来后建议切文档驱动方案的原因。

写在最后

Mock 数据这件事的本质,是用可控的假数据换取开发节奏的自由。工具选型不必追新,够用就行:个人小项目 Mock.js 或 JSON Server 足矣,团队协作上 Apifox,测试体系用 MSW,批量造数交给 Faker 加 AI 脚本。

真正拉开差距的不是用了哪款工具,而是有没有把业务约束和边界值考虑进去。一份只有"正常数据"的 Mock,测不出任何有价值的问题。

相关阅读

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论