如何在Postman中基于外部嵌套JSON的每次迭代执行多API请求?
Postman预请求脚本处理嵌套数组迭代问题
问题背景
现有如下JSON迭代数据源:
[ { "sequence": "CheckCompany", "company": ["Google", "Microsoft"] }, { "sequence": "CheckFunction", "function": ["Func1", "Func2"] } ]
需要实现:
- 迭代1(对应第一个对象):依次调用API,分别传入
company=Google、company=Microsoft - 迭代2(对应第二个对象):依次调用API,分别传入
function=Func1、function=Func2
Postman默认迭代机制说明
Postman默认迭代逻辑是遍历顶层数组的每个元素:你的JSON顶层有2个对象,所以默认会执行2次迭代。每次迭代时,pm.iterationData返回当前顶层对象(第一次是带company数组的对象,第二次是带function数组的对象),不会自动遍历对象内部的嵌套数组。因此需要手动在预请求脚本中处理内部数组的遍历和API调用。
JScript实现方案
在请求的预请求脚本中添加以下代码,即可实现需求:
// 获取当前迭代的数据源对象 const currentData = pm.iterationData.toObject(); // 定位当前对象中的数组字段(假设每个迭代对象仅包含一个数组字段) const targetArrayKey = Object.keys(currentData).find(key => Array.isArray(currentData[key])); if (!targetArrayKey) { console.log("当前迭代对象中无数组字段,跳过处理"); return; } // 遍历数组元素,逐个发送API请求 currentData[targetArrayKey].forEach(item => { // 构造请求配置,复用当前请求的URL和方法 const requestConfig = { url: pm.request.url.toString(), method: pm.request.method, // 根据API参数格式调整,这里以form-data为例 body: { mode: 'formdata', formdata: [{ key: targetArrayKey, value: item }] } }; // 发送同步请求,确保按顺序执行 pm.sendRequest(requestConfig, (error, response) => { if (error) { console.error(`处理${item}失败:`, error); } else { console.log(`处理${item}成功,响应状态码: ${response.code}`); // 可选:将响应结果存入环境变量,供后续步骤使用 // pm.environment.set(`result_${item}`, response.json()); } }); });
关键说明
- 参数格式适配:如果你的API使用URL编码、JSON格式参数,需要修改
body部分配置。例如用JSON格式的话:body: { mode: 'raw', raw: JSON.stringify({ [targetArrayKey]: item }) } - 执行顺序:
forEach会按数组顺序触发请求,pm.sendRequest在预请求脚本中会保证请求完成后再进行下一个(同步执行)。 - 容错处理:代码中增加了数组字段的判断,避免无数组的迭代对象引发错误。
内容的提问来源于stack exchange,提问作者Stanza
相关产品推荐
相关产品推荐

