Postman内置随机变量功能有限,仅生成单字符或固定格式字符串;需用Pre-request Script自定义生成可控长度、字符集的随机字符串。

Postman内置随机字符串变量怎么用
Postman自带的随机字符串变量开箱即用,但容易误以为功能全面——其实它们大多只生成单字符或固定格式,不满足多数业务字段需求。
常见误区是直接在请求体里写 {{ $randomAlphaNumeric }},结果每次只得到一个字母或数字(比如 "k" 或 "7"),根本没法当用户名、token 或订单号用。
-
{{ $randomPassword }}生成带符号的8位密码(如"aB3#xY9!"),适合测试登录接口,但长度和字符集不可控 -
{{ $randomEmail }}和{{ $randomFullName }}语义明确,但值是 faker.js 风格生成的,字段结构固定,不能拼接域名或加前缀 -
{{ $randomUUID }}和{{ $guid }}都是标准 UUID v4,含连字符;若后端要求纯数字ID或16进制无分隔符,必须后处理
用Pre-request Script生成可控长度的随机字符串
真正灵活的方式是在 Pre-request Script 里手写逻辑。关键不是“能不能生成”,而是“能否稳定控制字符集、长度、是否去重”。
比如要生成 12 位纯数字字符串(常用于短信验证码或短链 ID),别用循环拼接 Math.random() —— 容易出现首位为 0 导致转成数字后截断:
// ❌ 错误示范:可能生成 "001234567890",被 parseInt 吞掉前导零
let str = '';
for (let i = 0; i < 12; i++) {
str += Math.floor(Math.random() * 10);
}
pm.environment.set('code', str);
✅ 正确做法是用 crypto 模块(Postman 支持 Node.js 环境)或固定范围取整:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
// ✅ 生成严格12位数字(不会以0开头)
const min = 100000000000;
const max = 999999999999;
const code = Math.floor(Math.random() * (max - min + 1)) + min;
pm.environment.set('code', code.toString());
- 需要字母+数字混合?定义字符池:
const pool = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789';(避开易混淆字符) - 要兼容大小写+数字?用
Math.random().toString(36).substring(2, 14),但注意toString(36)最多只保证前10位随机性,超长需循环补足 - 生成后建议加
console.log调试,因为 Pre-request Script 报错时 UI 不提示,只静默失败
生成带业务含义的随机字符串(如用户昵称、商品SKU)
纯随机不够真实,测试覆盖不了中文、emoji、超长边界等场景。这时候不能只靠 Math.random(),得组合 faker.js 或手动构造。
Postman 支持 require,可引入 faker(需提前在 Settings → General → Enable JS execution in scripts 打开):
// ✅ 加载 faker(v7+ 语法)
const { faker } = require('@faker-js/faker');
// 生成中文名(需启用 locale)
faker.locale = 'zh_CN';
pm.environment.set('nickname', faker.person.lastName() + faker.person.firstName());
pm.environment.set('sku', `SKU-${faker.string.alphanumeric({ length: 8, casing: 'upper' })}`);
- 没装 faker?用内置
{{ $randomWord }}(Postman v10.20+)替代,但仅限英文单词,且不支持长度参数 - 中文昵称慎用
String.fromCodePoint随机选 Unicode,容易命中私有区或控制字符,导致接口 400 - SKU 类字段建议加业务前缀(如
"PROD-"),避免和纯数字 ID 冲突,也方便日志排查
为什么生成的随机字符串在多次请求中重复?
最常被忽略的一点:环境变量一旦设置,**除非脚本重新赋值,否则不会自动刷新**。你在 Pre-request Script 里写了 pm.environment.set('token', ...),但如果集合里多个请求共用同一个环境,且没做清理,后续请求会沿用上一次的值。
- 检查是否误把脚本写在了
Tests标签页(那是响应后执行,对本次请求无效) - 确认请求确实运行了 Pre-request Script:右上角点击「Console」,看是否有
console.log输出 - 如果用 Runner 批量运行,确保勾选了「Clear environment variables before run」,否则变量会累积污染
- 调试时临时加一句
pm.environment.unset('my_str');强制清空,能快速验证是否变量残留问题
真正难的不是“怎么生成”,而是让每次请求都拿到**新鲜、合规、可追溯**的字符串——尤其当字段要进数据库唯一索引或参与签名时,差一位、多一个空格都会让测试失效。

















