Postman如何遍历响应数组取值,依次代入后续请求循环执行
问题根因
你之前的写法存在两个核心错误:
postman.setEnvironmentVariable()需要同时传入变量名和变量值两个参数,你只传入了id值没有指定变量名,无法生成可用的环境变量- 直接循环遍历数组赋值会导致后续id覆盖前值,最终只会保留数组最后一个id,无法实现依次调用的需求
解决方案
步骤1:修改第一个请求的Test脚本
把整个存款数组、当前执行索引、首个要用到的存款id存入环境变量,代码如下:
const responseJson = pm.response.json(); // 取出存款数组,转成字符串存入环境变量(Postman环境变量仅支持存储字符串格式) const deposits = responseJson.params.Deposits; pm.environment.set('depositsList', JSON.stringify(deposits)); // 初始化当前执行索引为0,对应第一个存款id pm.environment.set('currentDepositIndex', 0); // 存入首个要使用的存款id pm.environment.set('currentDepositId', deposits[0].id);
步骤2:修改第四个请求的Test脚本
每次跑完第四个请求后,判断是否还有未使用的存款id,如果有就跳转回第二个请求继续执行,没有就结束流程,代码如下:
// 取出存储的存款数组和当前索引 const depositsList = JSON.parse(pm.environment.get('depositsList')); let currentIndex = parseInt(pm.environment.get('currentDepositIndex')); // 索引+1,取下一个存款 currentIndex += 1; if(currentIndex < depositsList.length) { // 还有未使用的id,更新环境变量,跳转回第二个请求 pm.environment.set('currentDepositIndex', currentIndex); pm.environment.set('currentDepositId', depositsList[currentIndex].id); // 注意此处填写你的第二个请求的实际名称,要完全匹配 postman.setNextRequest('第二个请求的名称'); } else { // 所有id都执行完毕,结束流程 postman.setNextRequest(null); }
步骤3:修改第二个请求的请求体
直接引用我们设置的currentDepositId变量即可:
{ "id": "{{currentDepositId}}", "Amount": 2, "date" : null }
运行说明
直接运行整个Postman集合即可,不需要手动调整请求顺序,脚本会自动按照你需要的请求1 > 2> 3> 4 > 2> 3> 4...的链路执行。
内容的提问来源于stack exchange,提问作者Hila
相关产品推荐
相关产品推荐

