【发布时间】:2021-08-03 21:17:35
【问题描述】:
我目前正在努力解决有关 Postman Pre-request 脚本中的 pm.sendRequest 的问题。 我正在尝试在 for 循环中运行请求,但它无法正常工作。
预请求脚本
var numberOfCampaigns = 2; //this number can have any value from 1 to 20)
for (var j = 0; j < numberOfCampaigns; j++) {
console.log(`J1:` + j);
var request_call = {
url: pm.environment.get("api-url"),
method: "POST",
header: {
"content-type": "text/xml",
SOAPAction: "add",
},
body: {
mode: "raw",
raw: "some-body"},
};
pm.sendRequest(request_call, (err, res) => {
if (err) {
} else {
console.log(`J2:` + j);
length = 2
for (var i = 0; i < length; i++) {
pm.environment.set(`someVariable_` + i + `_` + j, responseJson[i]);
console.log(`someVariable:`+i+`_`+j+`:`+ pm.environment.get(`someVariable_` + i + `_`+j));
}
}
});
console.log(`J3:` + j);
}
控制台输出:
J1:0
J3:0
J1:1
J3:1
POST https://api-url/
J2:2
someVariable_0_2:...
someVariable_1_2:...
POST https://api-url/
J2:2
someVariable_0_2:...
someVariable_1_2:...
GET https://api-url2/ (The actual Request)
我不明白为什么 J2 控制台输出为 2 而不是第一个请求为 1 而第二个请求为 2
你能帮忙吗?
更新
@Keith 回复后,我尝试进行一些更改:
var numberOfCampaigns = 2
const _dummy = setInterval(() => {}, 300000 );
function sendRequest(req) {
return new Promise((resolve, reject) => {
pm.sendRequest(req, (err,res) => {
if (err) {
console.log(err);
return reject(err);
}
console.log(`J2:` + j);
for (let i = 0; i < length; i++) {
pm.environment.set(`someVariable_` + i + `_` + j, responseJson[i]);
console.log(`someVariable:`+i+`_`+j+`:` + pm.environment.get(`someVariable_` + i + `_`+j));
}
return resolve(res);
})
});
}
(async function main() {
for(var j=0; j<numberOfCampaigns; j++){
var request_call = {
url: pm.environment.get("api-url"),
method: "POST",
header: {
"content-type": "text/xml",
SOAPAction: "add",
},
body: {
mode: "raw",
raw: pm.environment.get(`parameter`+j},
};
await sendRequest(request_call);
clearInterval(_dummy);
}
})();
【问题讨论】:
-
添加登录 if(err)。如果它可能会进入。
-
完成,谢谢@NehaPatil 的建议。
标签: javascript postman web-api-testing postman-pre-request-script