postman 接口返回值有多个相同key时(不唯一),怎么提取第2个value给下一接口调用? ...

本文介绍如何使用Postman设置全局变量来传递接口间的返回值。通过示例演示如何处理单一及多个返回参数的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题之前困扰了我很久,一直搜索类似的博客都没找到答案,终于自己慢慢摸索中找到了答案!
(博客引用请注明链接,谢谢。)

用postman做接口测试,肯定会遇到上一接口的返回值给下一接口调用的问题,那么需要可将上一参数设置为全局变量。

1、如图1的“parentId”要给到下一接口调用,可将“parentId”设置为全局变量(图2)。
在“Tests”中写入代码为:
var data = JSON.parse(responseBody); //获取所有的返回数据;
tests[data.result] = responseBody.has("true");//返回数据中有“true”
tests[data.msg] = responseBody.has("登录成功");//返回数据中有“登录成功”。(这两个断言依照返回数据填写)
pm.globals.set("parentId", data.data.parentId);//将“parentId”设置为全局变量(“parentId”在返回数据中是唯一的)

image

image

2、设置好后,点击发送,“parentId”的值就自动填写到全局变量中(图3)

image

3、遇到返回值中需要调用的参数不止一个,但是要调用第2个,返回数据如图4--“parentStudentId”不止一个,该怎么办呢?
如果按照上面的代码“pm.globals.set("parentStudentId", data.data.parentStudentId);”发送的话,是获取不到“parentStudentId”的值(图5)

image

image

4、因为data的数据中“parentStudentId”有多个值,那肯定代码中要注明获取的是data数据中的哪个,即data[1]表示取第2个,data[0]表示取第1个。
代码如图6(pm.globals.set("parentStudentId", data.data[1].parentStudentId););
此时再请求下,则可获取到“parentStudentId”的值了(图7).
image
image

<think>嗯,用户想知道如何在Postman的Pre-Request Script里把接口返回值转成动态环境变量。首先,我需要回忆Postman的Pre-request Script的基本用法。根据提供的引用,特别是引用[2]和[3],用户可以通过pm.sendRequest发送请求,然后在回调函数里处理响应数据,再设置到环境变量中。 首先,用户需要发送一个请求,这可以使用pm.sendRequest方法,像引用[3]里的例子那样。然后在回调函数里,处理返回的response。要注意的是,响应数据可能需要从response.stream.toString()获取,如引用[2]所示,或者用response.json(),如果返回的是JSON格式的话。 接下来,设置环境变量要用pm.environment.set方法,比如pm.environment.set("变量名", )。用户可能需要根据接口返回的数据结构来提取具体的,比如responseData.key这样的形式。 还需要考虑错误处理,比如检查err是否存在,如果有错误的话可能需要处理下,避免脚本执行失败。另外,如果返回的数据是加密的或者需要解码,可能需要用到Base64,如引用[5]提到的,过用户的问题里没提到加密,暂用考虑这个。 然后,用户可能想知道具体的步骤,所以分步骤说明比较好。例如,第步发送请求,第二步处理响应,第三步设置变量。同,给出示例代码,像引用[2]中的代码那样,但可能需要简化下,让用户更容易理解。 另外,引用[4]提到了注入csrf的脚本,这可能和设置变量无关,但说明预处理脚本可以用于多种场景,用户的问题集中在动态变量设置,所以重点放在发送请求和处理响应上。 可能还需要提醒用户环境变量的作用域,比如在Pre-request Script中设置的变量是否在后续请求中可用,以及如何清除变量。过用户的问题主要是如何设置,所以这部分可能作为补充说明。 最后,生成相关的问题,比如如何调试脚本、处理加密数据或管理变量生命周期,这样用户如果有进步的问题可以参考。</think>### 如何在Postman中通过Pre-Request Script动态设置环境变量? 以下是具体实现步骤: #### 1. **发送请求并获取响应** 通过`pm.sendRequest()`方法调用其他接口,并在回调函数中处理响应数据。例如: ```javascript pm.sendRequest("https://api.example.com/data", function (err, response) { if (!err) { const responseData = response.json(); // 解析JSON格式响应 pm.environment.set("dynamicVar", responseData.value); // 存储到环境变量 } }); ``` 此代码会将接口返回值中的`value`字段存入环境变量`dynamicVar`[^2][^3]。 #### 2. **处理非JSON响应** 若响应内容为文本或加密数据(如Base64),需使用`response.stream.toString()`提取原始内容: ```javascript pm.sendRequest("https://api.example.com/encrypted-data", function (err, response) { if (!err) { const rawData = response.stream.toString(); // 获取原始响应内容 pm.environment.set("encryptedVar", rawData); // 存储加密文本 } }); ``` Base64编码数据需在后续请求中自行解码[^5]。 #### 3. **多接口串联调用** 若需依赖多个接口返回值,可通过嵌套`pm.sendRequest`实现: ```javascript // 第一个接口获取加密参数 pm.sendRequest("https://api.example.com/auth", (err1, res1) => { const token = res1.json().token; pm.environment.set("authToken", token); // 第二个接口使用token pm.sendRequest({ url: "https://api.example.com/user", method: "GET", headers: { Authorization: `Bearer ${token}` } }, (err2, res2) => { pm.environment.set("userInfo", JSON.stringify(res2.json())); }); }); ``` 此方法常用于登录鉴权后获取用户信息[^2][^4]。 #### 4. **注意事项** - **变量作用域**:通过`pm.environment.set()`设置的变量仅在当前请求或集合内有效 - **异步处理**:`pm.sendRequest`是异步操作,需在回调函数内操作变量 - **调试技巧**:使用`console.log()`输出中间结果,通过Postman控制台查看日志 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值