Postman中变量拼接需分场景:URL和Params支持{{var}}直接拼接,但脚本中必须用JavaScript语法;Body、Header等处不支持嵌套或混合拼接,须用Pre-request Script预处理并注意空值、编码、斜杠冗余等问题。

Postman 里不能直接在变量引用处拼接字符串(比如 {{host}}/api/v1/users 这种写法在 URL 输入框里是合法的,但 {{host}}+"/api/v1" 或 {{host}}"/api/v1" 在 Pre-request Script 或 Tests 里会报错),必须用 JavaScript 字符串拼接逻辑来实现组合。
URL 中直接拼接变量和固定路径是允许的
只要变量本身是纯字符串,且拼接发生在 URL 输入框或 Params 表格中,Postman 会自动解析并合并:
-
{{base_url}}设为https://api.example.com,URL 写成{{base_url}}/users→ 最终请求地址就是https://api.example.com/users - Params 表格里 Key 填
page、Value 填{{page_num}},再手动加&size=20是无效的——Params 表格只认键值对,额外字符会被忽略或导致 400 - 如果需要动态拼接查询参数(如
q={{keyword}}_v2),只能靠 Pre-request Script 注入完整 URL 或修改pm.request.url
Pre-request Script 中拼接变量必须用 JavaScript 语法
想在发送前把 {{env}} + "-prod" 组合成新值并存入另一个变量,得写明确的 JS 赋值语句:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
const env = pm.environment.get("env");
pm.environment.set("full_env", env + "-prod");
- 不能写
pm.environment.set("full_env", "{{env}}-prod")—— 这会原样存字符串,不会解析变量 - 不能在
pm.environment.get()外层直接拼接,比如"{{env}}" + "-prod",因为{{env}}只在 Postman 渲染层生效,JS 运行时看不到 - 若变量可能为空或未定义,建议加空值判断:
const env = pm.environment.get("env") || "dev";
Body / Header 中拼接需区分数据格式
不同 Body 类型对变量拼接的支持程度不同:
-
raw(JSON):支持{{variable}}占位,但不能嵌套拼接,如{"name": "{{prefix}}_{{suffix}}"}是非法的 → Postman 不解析双大括号内的表达式,只做简单替换;应改用 Pre-request Script 构造完整 JSON 字符串并pm.request.body.update() -
x-www-form-urlencoded:Key 和 Value 栏都支持{{var}},但 Value 里写{{a}}_{{b}}会失败(只取第一个变量)→ 必须先在 Pre-request Script 合并好再 set 进环境/全局变量 -
form-data的 text 类型字段支持单个{{var}},file 类型不支持任何变量 - Header 的 Value 栏支持
{{token}},但不支持{{token}}-abc→ 同样要靠脚本预处理
容易被忽略的边界情况
拼接行为在不同上下文里表现不一致,最常踩坑的是:
- 集合变量(Collection Variable)优先级高于环境变量,但无法在 Pre-request Script 中用
pm.collectionVariables.get()直接读取(API 不存在),得用pm.variables.get("var"),它按 collection → environment → global 顺序查找 - URL 中拼接时,如果
{{base_url}}末尾带斜杠(https://api.com/),再写{{base_url}}/users就变成https://api.com//users→ 多余斜杠可能触发 404,建议统一约定变量不带结尾斜杠 - 中文或特殊符号参与拼接时,URL 编码不会自动发生,比如
{{keyword}}是 “测试”,拼成/search?q={{keyword}}会导致乱码 → 应在脚本里用encodeURIComponent()处理
















