You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman:如何在另一个请求的测试脚本中循环调用请求?

解决Postman循环调用指定名称请求的问题

我来帮你搞定这个问题!你现在遇到的是Postman里pm.sendRequest的用法误区——直接传请求名称它会默认当成URL解析,得先找到集合里对应的请求对象才行。

问题根源

pm.sendRequest有两种核心用法:

  • 传字符串时,它会把这个字符串当作请求URL来处理,所以你之前的代码会把"Publish Beat"当成无效URL发送
  • 传Postman请求对象时,才会引用你集合里创建好的那个预设请求

另外你提到的postman.setNextRequest确实不适合这个场景:它是用来控制集合Runner的执行顺序,在单个请求脚本里多次调用的话,只有最后一次会生效,而且是当前请求完全结束后才会触发下一个请求,没法在循环里逐个触发独立请求。

修改后的代码方案

先在循环外定位到你要调用的请求对象,然后在循环里用这个对象来发送请求,同时加上回调函数处理响应(回调是语法要求的必填项):

var a = pm.response.json();
// 先从集合中找到名称为"Publish Beat"的请求对象
var publishBeatRequest = pm.collection.items.find(item => item.name === "Publish Beat");

for (let i = 0; i < a.sick_beats.length; i++){
    // 清理并设置环境变量
    pm.environment.unset("Beat_" + (i+1));
    pm.environment.set("Beat_" + (i+1), a.sick_beats[i]);
    
    // 使用找到的请求对象发送请求
    pm.sendRequest(publishBeatRequest, function (err, response) {
        // 这里可以根据需求添加响应处理逻辑,比如打印日志
        if (err) {
            console.log(`发送第${i+1}个Beat请求出错:`, err);
        } else {
            console.log(`第${i+1}个Beat请求响应结果:`, response.json());
        }
    });
}

额外注意事项

  • 确保请求名称完全匹配:"Publish Beat"的大小写、空格都要和你集合里的请求名称一致,不然会找不到对象
  • 如果目标请求嵌套在文件夹里,上面的find方法可能找不到,这时候可以用递归遍历的辅助函数:
function findRequestInCollection(name, items = pm.collection.items) {
    for (let item of items) {
        if (item.name === name) return item;
        if (item.items) {
            let found = findRequestInCollection(name, item.items);
            if (found) return found;
        }
    }
    return null;
}

// 调用这个函数找请求
var publishBeatRequest = findRequestInCollection("Publish Beat");

内容的提问来源于stack exchange,提问作者user9089265

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:04:54