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

Postman中如何确保异步循环填充数组后再执行测试?

解决Postman中异步请求完成后执行测试用例的可靠方案

你的问题出在pm.sendRequest的使用方式上:当传入回调函数时,它不会返回Promise,导致代码里的await并没有真正等待请求完成,测试用例经常在transitionNamesArray还没填充完毕就提前执行,最终引发偶发失败。

以下是修复后的完整脚本,核心是改用pm.sendRequest的Promise返回形式,确保所有异步请求完成后再执行测试:

var jsonData = pm.response.json();
var getStateByIdUrl = pm.environment.get("host") + "/" + pm.environment.get("project-key") + "/states/";
var authToken = pm.environment.get("ctp_access_token");
let transitionsArray = jsonData.transitions;
let transitionNamesArray = [];
let transitionIdsArray = [];

for (let i = 0; i < jsonData.transitions.length; i++) {
    transitionIdsArray.push(jsonData.transitions[i].id);
}

console.log(transitionIdsArray);

async function getTransitionNames() {
    // 遍历所有transition ID,逐个发送请求并等待完成
    for (let t = 0; t < transitionIdsArray.length; t++) {
        const getRequestTransitions = {
            url: getStateByIdUrl + transitionIdsArray[t],
            method: 'GET',
            header: {
                'Authorization': 'Bearer ' + authToken
            }
        };

        // 关键:不传回调函数,直接用pm.sendRequest返回的Promise,await会等待请求完成
        const res = await pm.sendRequest(getRequestTransitions);
        const resJson = res.json();
        transitionNamesArray.push(resJson.name['en']);
        console.log(transitionNamesArray);
    }

    // 所有请求完成后,再执行测试用例
    pm.test("Transitions contain 'Partially Delivered' and 'Delivered'", () => {
        pm.expect(transitionNamesArray).to.include("Delivered");
        pm.expect(transitionNamesArray).to.include("Partially Delivered");
    });
}

// 调用异步函数,捕获可能的错误避免静默失败
getTransitionNames().catch(err => {
    console.error("请求执行失败:", err);
    pm.test("异步请求执行失败", () => {
        pm.expect.fail("请求过程中出现错误: " + err.message);
    });
});

关键改动说明

  • 移除回调函数:pm.sendRequest在不传回调时会返回一个Promise,此时await才能真正等待请求响应返回,保证循环按顺序执行且每个请求都完成后再进入下一次迭代
  • 添加错误捕获:异步函数调用后添加.catch,避免请求出错时测试用例静默失败,同时主动标记测试失败,便于排查问题
  • 测试用例后置:确保测试用例逻辑在所有请求完成、transitionNamesArray完全填充后才执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:53:47