我正在为异步GET请求编写测试。此测试需要每5秒钟重试一次,最多120秒钟,然后才能失败并继续下一个请求。
目前,作为快速解决方案,我一直在没有限制器的情况下进行重试,这意味着它将一直进行重试,直到在响应中看到预期的结果为止。
在下面找到我的代码:
var jsonData = pm.response.json();
tests["Assert id is a string"] = typeof(jsonData.id) === "string";
if (jsonData._async.status !== "done" &&
globals.async_inv_byAddress == jsonData.id){
postman.setNextRequest("E2E get_Async_current_request");
} else {
pm.test("Async Test Passed");
postman.setNextRequest("E2E post_Async_next_request")
}
上面的代码可以导致数小时的运行,而不会失败。
如果它无法在120秒内找到预期的输出并且需要每5秒重试一次,我需要找到一种测试失败的方法
答案 0 :(得分:0)
您可以尝试以下方法:
var moment = require('moment');
var timeStamp = pm.globals.get("timeStamp");
if (!timeStamp) {
timeStamp = moment().add(2, 'minutes');
pm.globals.set("timeStamp", timeStamp);
}
if (moment() < moment(pm.globals.get("timeStamp"))) {
console.log("retry");
} else {
console.log("stop");
postman.setNextRequest(null);
pm.globals.unset("timeStamp");
}
定义120秒的限制并添加
setTimeout(function(){}, 5000);
向您发出请求前脚本,以定义每次重试之间5秒的延迟。
结合您的代码,您的测试将如下所示:
var jsonData = pm.response.json();
var moment = require('moment');
var timeStamp = pm.globals.get("timeStamp");
if (!timeStamp) { //create new Timestamp (now + 120 seconds)
timeStamp = moment().add(120, 'seconds');
pm.globals.set("timeStamp", timeStamp);
}
tests["Assert id is a string"] = typeof(jsonData.id) === "string";
if (moment() < moment(pm.globals.get("timeStamp"))) {//request is within 120 seconds
if (jsonData._async.status !== "done" &&
globals.async_inv_byAddress == jsonData.id) {
postman.setNextRequest("E2E get_Async_current_request");
} else {
pm.test("Async Test Passed");
postman.setNextRequest("E2E post_Async_next_request");
}
} else { //120 seconds exceeded
console.log("Stopping tests. 120 seconds exceeded.");
postman.setNextRequest(null);
pm.globals.unset("timeStamp");
}
和您的请求前脚本如下:
setTimeout(function(){}, 5000);
或者,您可以为cli中的邮递员跑步者或新人设置每个请求的延迟时间。