Postman JSON 请求体中变量需加引号(字符串)或不加(数字/布尔),且须在 Pre-request Script 中用 pm.variables.set() 动态设置;变量优先级为 data > environment > global,未定义则为空字符串。

Postman 的 JSON 请求体里不能直接写 {{variable}}——必须先确保变量已定义,且 JSON 语法不被破坏。
JSON 中写 {{variable}} 报错 “Unexpected token”
这是最常见问题:Postman 不会自动解析 JSON 字符串里的双大括号。它把 {{my_id}} 当成非法 JSON 字符,直接报 SyntaxError: Unexpected token {。
- 根本原因:JSON 标准不支持模板语法,Postman 的变量替换只发生在「发送前」的预处理阶段,但前提是整个请求体被识别为“可插值文本”
- 正确做法:把 Body 类型设为
raw,右侧语言选JSON(不是 Text),然后手动确保变量外层有引号(字符串)或符合 JSON 类型(数字/布尔/null) - 错误示例:
{"id": {{user_id}}, "name": "test"}→{{user_id}}没引号,若值是123还能过,但如果是abc就崩 - 正确示例:
{"id": "{{user_id}}", "active": {{is_active}}}→ 字符串加引号,布尔值不加(否则变字符串)
环境变量 / 全局变量 / 数据文件变量,该用哪个?
变量作用域决定你在哪里定义、怎么覆盖:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
-
environment变量:适合测试不同环境(dev_api_url、staging_token),在右上角环境切换器里管理 -
global变量:跨环境共享,比如admin_email;但滥用会导致调试困难,改一个地方全项目受影响 -
data file(CSV/JSON 文件):配合 Collection Runner 批量跑不同参数,变量名来自文件首行,如{"user_id":"101","role":"admin"}→ 脚本里用{{user_id}} - 注意:变量名冲突时,优先级是
data>environment>global;未定义的变量会被替换成空字符串,可能造成接口 400
需要动态生成值?用 Pre-request Script 写 pm.variables.set()
静态变量不够用时(比如时间戳、随机 ID、签名字段),必须在发请求前用脚本注入:
- 在请求的
Pre-request Script标签页里写:pm.variables.set("timestamp", Date.now().toString());<br>pm.variables.set("req_id", Math.random().toString(36).substr(2, 9)); - 然后 JSON body 里就能安全用
{{timestamp}}和{{req_id}} - 关键点:
pm.variables.set()设置的是当前请求作用域变量,不影响环境或全局;若需持久化到环境,改用pm.environment.set() - 别在脚本里拼 JSON 字符串再 set —— 那样容易引号嵌套出错;始终让变量存原始值,替换交给 Postman 做
真正容易被忽略的是变量类型隐式转换:比如 {{count}} 设为 "5"(字符串),放进 JSON "limit": {{count}} 就变成 "limit": "5"(字符串),而接口可能要求数字。要么脚本里用 parseInt() 存,要么在 JSON 里明确写 "limit": {{count}} 并确保变量值本身是数字类型(不带引号)。
















