Postman 怎么把响应字段保存为集合变量供后续请求使用
来源:17golang原创
时间:2026-09-07 14:55:59 472浏览 收藏
如果一个请求返回了订单号、用户 ID 或分页游标,最稳妥的做法是在请求的 Post-response 脚本中读取响应 JSON,再用 pm.collectionVariables.set() 写入 Collection 变量。后续请求直接写 {{order_id}},不需要手动复制响应值。
- 响应字段先用
pm.response.json()解析,再按真实 JSON 路径取值。 - 集合变量写入使用
pm.collectionVariables.set('变量名', 值),不要误写成环境变量。 - 脚本成功不等于传值成功,还要在后续请求的 URL、参数或请求头里确认变量已解析。
你只需要在对应请求的「测试」标签页里写几行简单的JS脚本,解析返回的响应内容,调用pm.collectionVariables.set方法就能把指定字段存为集合变量,之后在任意后续请求的参数、头信息、请求体里用{{变量名}}的语法就能直接引用。
第 1 步:先确认响应字段路径
打开 Collection 中负责创建数据的请求,点击 Send,先看响应 Body。假设返回结构是下面这样,真正要保存的值不是顶层的 id,而是 data.id:
{
"success": true,
"data": {
"id": "sample-4821",
"status": "created"
}
}
然后进入请求编辑器的 Scripts → Post-response。这个入口很重要:pm.response 面向的是当前请求已经返回的响应,放到 Pre-request 脚本里就没有这份响应可读。
第 2 步:在 Post-response 脚本里写入集合变量
在脚本编辑器中加入以下代码。先解析一次 JSON,再检查路径是否存在;字段缺失时主动抛出错误,避免旧的 order_id 被误认为本次请求产生的新值。
// 读取当前请求的 JSON 响应
const body = pm.response.json();
const orderId = body?.data?.id;
// 字段缺失时停止写入,避免保留旧值造成误判
pm.test('响应包含订单号', () => {
pm.expect(orderId, 'data.id').to.be.a('string').and.not.empty;
});
if (orderId) {
// 把值保存到当前 Collection 的变量作用域
pm.collectionVariables.set('order_id', orderId);
console.log('已保存 order_id:', orderId);
}

点击 Send 后,测试结果应显示通过,Console 里也能看到保存日志。这里的判断分成两层:pm.test 负责告诉你响应是否符合预期,set 只在字段存在时真正更新变量。
第 3 步:让后续请求消费这个变量
打开同一 Collection 下的下一个请求,把路径中的固定值替换成 {{order_id}},例如:
GET /orders/{{order_id}}
发送前把鼠标停在变量上,或打开右侧的变量面板,确认它已经被解析为示例值。再看响应状态和请求 URL:URL 中不应继续保留双大括号,响应应返回对应订单的数据。

第 4 步:变量不生效时按作用域排查
最常见的误区是把“保存成功”和“引用成功”混为一谈。检查下面四项:
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 脚本报 undefined | 响应路径 | 重新对照 Body,确认是 data.id 还是顶层字段 |
| 后续请求显示未解析 | 变量名 | 保证 set 中的 order_id 与引用处完全一致 |
| 读到旧订单号 | 字段缺失分支 | 缺字段时不要 set;必要时手动 unset 后重跑 |
| 取到另一套值 | 变量作用域 | 检查 Collection、Environment 和局部变量是否同名 |
Postman 会按变量作用域解析同名变量。本文明确写入的是 Collection 变量,因此脚本读取也应使用 pm.collectionVariables.get('order_id');如果团队需要按环境切换地址和凭据,环境变量可以另行管理,不要为了方便把所有响应数据都塞进 Environment。
常见问题
为什么 pm.response.json() 解析失败?
当前响应可能不是 JSON,或接口返回了空 Body。先在响应面板确认 Content-Type 和实际文本,再决定是否改用 pm.response.text()。
集合变量能在另一个 Collection 里直接使用吗?
不能把它当成全局变量理解。它属于当前 Collection;跨 Collection 复用时,应重新设计变量来源或使用合适的环境/全局作用域。
为什么脚本通过了但请求仍然使用旧值?
通常是本次响应字段缺失,而脚本没有清理旧值。保留本文的字段断言,并在失败分支中停止更新,能更早暴露问题。
应该在脚本里写变量,还是手动在 Variables 面板里填?
固定配置适合手动填写;由前一个请求动态产生的 ID、Token 或游标,适合在 Post-response 脚本中写入,重复运行时更稳定。
-
474 收藏
-
435 收藏
-
164 收藏
-
182 收藏
-
250 收藏
-
492 收藏
-
文章 · 软件教程 | 2小时前 | docker · compose · 容器编排 · 健康检查 · Docker Compose depends_on healthcheck service_healthy180 收藏
-
368 收藏
-
368 收藏
-
文章 · 软件教程 | 7小时前 | vs code · 软件教程 · 搜索性能 · 工作区设置 · VS Code 全文搜索 大文件夹 search.exclude files.watcherExclude115 收藏
-
文章 · 软件教程 | 8小时前 | vs code · 软件教程 · 任务编排 · 构建排错 · tasks.json VS Code Tasks dependsOn dependsOrder 构建任务 失败传播256 收藏
-
文章 · 软件教程 | 13小时前 | 环境变量 · vs code · 软件教程 · Remote SSH · 远程开发 · VS Code path Remote SSH 远程终端 扩展宿主 shell环境115 收藏
-
215 收藏
-
464 收藏
-
212 收藏
-
142 收藏
-
238 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习