Postman中生成递增编号需在Pre-request Script中用pm.environment.set()配合容错读取(如parseInt(...) || 1)实现,避免Tests中更新导致滞后;form-data不解析{{counter}},应改用x-www-form-urlencoded或脚本手动设body;Runner批量时需用pm.globals.set()并加环境前缀防冲突。

Postman里用pm.environment.set()生成递增编号
每次发请求都用同一个编号,根本没法测批量创建、重复提交拦截这类逻辑。最直接的办法是靠全局或环境变量做计数器,在Pre-request Script里读取、加1、再写回。
注意:不能在Tests里改,否则编号会滞后一拍(当前请求用的是上一轮的值);也不能只用parseInt()硬转,万一变量为空或非数字会变成NaN。
- 先确保环境已启用,且变量
counter初始值设为1(不是空字符串或undefined) - 脚本里必须做容错:
let count = parseInt(pm.environment.get("counter")) || 1; - 更新后立刻写回:
pm.environment.set("counter", count + 1); - 在表单参数里直接引用
{{counter}},Postman会在发送前自动替换
用{{$timestamp}}和{{$randomInt}}拼接防重编号
如果不需要严格递增,只要每次不同且可读性好,内置动态变量更轻量。但{{$timestamp}}单位是毫秒,连续快速点击可能撞车;{{$randomInt}}范围太小(0–1000),不够用。
实际建议组合用:ORDER_{{$timestamp}}_{{$randomInt}},既带时间上下文,又避开并发冲突。
-
{{$timestamp}}生成整数时间戳,比如1767341656123 -
{{$randomInt}}补3位随机数,降低重复概率 - 不要单独用
{{$guid}}——太长(36字符),多数后端字段长度有限制 - 若需固定长度编号(如8位纯数字),必须用脚本生成:
String(Math.floor(Math.random() * 90000000) + 10000000)
表单参数中引用编号变量的常见错误
很多人把{{counter}}写进Body → form-data的value栏,结果发出去还是字面量{{counter}}。这是因为form-data模式下,Postman默认不解析双花括号变量——它只在URL、Headers、raw Body里生效。
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
- 解决办法:切到
x-www-form-urlencoded模式,变量才能被识别 - 或者坚持用form-data,就得在
Pre-request Script里手动拼body:pm.request.body.update({mode: 'formdata', formdata: [{key:'order_id', value: pm.environment.get("counter")}]}); - 别在
Initial Value里填{{counter}}——环境变量初始化阶段不支持嵌套解析 - 调试时用
console.log(pm.environment.get("counter"))确认值是否真被更新了
Runner跑批量时编号不递增?检查变量作用域
Collection Runner默认每个请求用独立的环境快照,pm.environment.set()改的只是当前迭代的副本,下一轮又读初始值。这不是bug,是设计如此。
想让编号跨迭代累加,必须用pm.globals.set(),因为全局变量在Runner全程共享。但代价是:你不能同时跑多套环境(比如dev/test/prod)——它们会共用同一个counter。
- 安全做法:给全局变量加环境前缀,比如
dev_counter、test_counter - 脚本里动态读当前环境名:
const env = pm.environment.name;,再拼变量名 - 千万别在
Tests里调pm.globals.set()来更新编号——Runner执行顺序是「Pre-request → Send → Tests」,编号已经晚了
真正麻烦的不是怎么生成编号,而是编号要和业务规则对齐:比如订单号要带日期前缀、要校验唯一性、要满足数据库字段长度。这些靠内置变量搞不定,得写脚本算,而且得在每次请求前就准备好,否则表单发出去就无法撤回。









