还在手动伪造数据?你的测试环境该“自动化”了
笔者在 N8N大学 社区潜水时,发现很多新手在调试工作流时,总是在重复一件枯燥的事:去网上找个随机生成器,复制 ID,粘贴;再复制数字,粘贴。甚至为了测试某个字段,还得手动修改 JSON 报文。
这不仅效率极低,而且容易出错。更重要的是,当你需要测试几百条数据的批量处理逻辑时,手动操作简直是灾难。既然用了 n8n,就该把这种机械劳动彻底交给机器。
今天,笔者就带大家硬核拆解如何在 n8n 中,仅凭两个简单的表达式,瞬间生成标准的 UUID 和随机数字。学会这一招,你的测试效率将提升 10 倍。
核心实操:手把手教你生成随机数据
在 n8n 中,生成随机数据的核心在于 表达式 (Expression) 和 Set 节点。我们不需要复杂的代码,只需要调用 n8n 内置的函数。
步骤一:准备 Set 节点
首先,新建一个 Workflow,拖入一个 Set 节点。这个节点是我们在 n8n 里定义变量的“万能钥匙”。
- 双击打开 Set 节点。
- 在 Name 列输入字段名(例如
userId)。 - 在 Value 列,点击输入框右侧的 表达式图标(就是那个橙色的 fx)。
步骤二:生成 UUID(通用唯一识别码)
UUID 是数据库主键和测试数据的黄金标准。在 Value 栏的表达式编辑器中,输入以下命令:
{{$now.milliseconds}}_{{$node["Set"].json["randomInt"]}}(n8n 原生生成方式)
当然,最硬核的做法是直接利用 JavaScript 生成标准 UUID。在表达式编辑器中,你可以直接粘贴这段代码:
{{Math.random().toString(36).substring(2) + Date.now().toString(36)}}
笔者注: 虽然这不是标准的 128 位 UUID 格式,但对于绝大多数测试场景(特别是需要唯一性的字符串),它完全够用且速度极快。如果你必须使用标准 UUID 格式,可以结合 Code 节点或使用 HTTP Request 节点调用外部 API(如 uuidgen),但在本地测试中,上面的表达式性价比最高。
步骤三:生成随机数字
继续在 Set 节点中添加一行。Name 填 randomAge,Value 依然点击 fx。
n8n 的表达式引擎基于 JavaScript,所以我们可以直接使用 Math 对象:
{{Math.floor(Math.random() * 100) + 18}}
这段表达式的含义是:生成一个 0 到 99 之间的随机整数,然后加上 18。最终结果就是 18 到 118 之间的随机年龄。如果你只需要 0-100,去掉 + 18 即可。
步骤四:验证输出
配置完成后,点击 执行节点。你会看到 Output 区域出现了类似这样的数据:
{
"userId": "a1b2c3d4e5f6173890123456",
"randomAge": 42
}
现在,你可以把 Set 节点的输出连接到下一个节点(比如 HTTP Request 或 Airtable),用来测试你的数据库写入或 API 调用了。
进阶技巧:生成指定长度的随机数
有时候我们需要生成固定位数的数字,比如 6 位验证码。这时候简单的 Math.random() 就不够用了。
在表达式编辑器中,使用以下逻辑:
{{Math.floor(100000 + Math.random() * 900000)}}
这段代码保证了生成的数字始终是 6 位数。你可以根据需要调整 100000 和 900000 的值,比如 6 位就是 100000 到 999999 之间。
避坑指南:表达式中的常见误区
虽然生成随机数据很简单,但新手常在细节上翻车。这里分享两个实战中的坑:
1. 忘记加双花括号 {{ }}
n8n 的表达式必须包裹在双花括号中。如果你直接写 Math.random(),n8n 会把它当成纯字符串处理,永远不会生成动态数据。
2. 随机数的“种子”问题
在 n8n 的 Set 节点中,如果你把生成随机数的表达式放在同一个节点的多个字段里,有时候它们会基于非常接近的时间戳生成,导致看起来不够“随机”。如果需要极高并发的随机性,建议分两个 Set 节点,或者在表达式中混入 $now.milliseconds 作为扰动因子。
FAQ:关于生成随机数据的常见疑问
Q1: 我需要生成中文姓名或地址,n8n 能做到吗?
A: 原生表达式很难生成有意义的中文。这种情况下,建议使用 Code 节点引入 Faker.js 库,或者简单点,准备一个包含中文词汇的 JSON 文件,用 Spreadsheet File 节点读取并随机取值。
Q2: 生成的随机数每次执行都不一样,怎么固定它以便调试?
A: 在 n8n 的 Workflow 设置中,你可以开启 "Manual Execution"(手动执行)模式,或者在表达式里把随机函数改成固定值(例如把 Math.random() 改成 123),调试完再改回来。
Q3: 为什么我生成的 UUID 看起来很短?
A: 通常是因为使用了 Math.random().toString(36)。这是生成的短 ID,不是标准的 36 位 UUID。如果后端校验严格,请务必使用 Code 节点运行 require('crypto').randomUUID() 或调用专门的 API。
总结与资源
掌握了 Set 节点 配合 表达式 (Expression),你就拥有了无限的测试数据源。这不仅是测试工作流的利器,也是学习 n8n 数据处理逻辑的最佳切入点。
在 N8N大学,我们始终相信:自动化始于细微之处。下次当你需要测试数据时,别再打开浏览器搜索随机生成器了,直接在 n8n 里敲两行代码吧。