javascript - 邮递员在测试失败并转移到下一个请求之前进行有限次数的轮询
问题描述
我正在为 Async 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 秒重试一次
解决方案
你可以试试这个:
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 中通过 postman runner 或 newman 为每个请求设置请求延迟。
推荐阅读
- ms-word - VSTO Word Office 互操作:查找对书签的引用
- continuous-integration - 在 GitLab CI/CD yaml 文件中使用变量
- react-native - 在 React Native 中的每个组件前面创建一个 Modal
- knockout.js - 如何根据淘汰赛js中的单选按钮选择填充文本框
- javascript - 使用 onclick 方法更改 img src
- android - 使用 UsbDeviceConnection android 重启后热敏打印机仅打印一次
- karma-runner - 业力:ChromeHeadless 出现“Disconnectedreconnect 超时前失败”
- python-3.x - 使用 Python 从多个 PDF 文件中查找多个单词
- windows - Windows 上的 Emacs:如何设置 Autoconf / GNU 构建系统
- r - 从 CSV 读取数据时 type.convert 出错