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

Postman预请求脚本无法修改集合变量问题排查求助

Postman预请求脚本修改集合变量不生效问题解决

我在Postman中编写了预请求脚本,试图根据发送请求的响应状态码修改集合变量status_code,同时编写测试脚本验证响应状态码,但实际运行时,即使响应码为200,脚本仍读取之前的403旧值,集合变量未被成功修改。

预请求脚本(Pre-Request Script)

let user_id = pm.collectionVariables.get("user_id");
pm.sendRequest(`http://security.postman-breakable.com/account/${user_id}/summary`, function (err, response) {
    if(response.status == "FORBIDDEN")
        pm.collectionVariables.set("status_code", 403);
    else if(response.status == "OK")
        pm.collectionVariables.set("status_code",200);
});

测试脚本(Test)

let status_code = parseInt(pm.collectionVariables.get("status_code"));
pm.test(`Status code is ${status_code}`, function () {
    pm.response.to.have.status(status_code);
});

问题原因

pm.sendRequest默认是异步执行的——预请求脚本不会等待该请求的回调函数执行完毕就会结束,而测试脚本在主请求完成后立即运行,此时回调里的集合变量赋值操作还未执行,因此读取到的是之前的旧值。

解决方法

将异步请求改为同步执行,使用async/await语法确保变量赋值完成后再执行后续流程。修改后的预请求脚本如下:

(async () => {
    let user_id = pm.collectionVariables.get("user_id");
    const response = await pm.sendRequest(`http://security.postman-breakable.com/account/${user_id}/summary`);
    if (response.status === "FORBIDDEN") {
        pm.collectionVariables.set("status_code", 403);
    } else if (response.status === "OK") {
        pm.collectionVariables.set("status_code", 200);
    }
})();

通过自执行异步函数包裹代码,用await等待请求响应返回后再执行变量赋值,这样预请求脚本结束前status_code已经被更新为最新值,测试脚本就能读取到正确的状态码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:40:22