Почтальон проводит опрос ограниченное количество раз, прежде чем провалить тест и перейти к следующему запросу.
Я пишу тест для запроса 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 секунд
1 ответ
Вы можете попробовать это:
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");
}
и ваш pre-request-script будет выглядеть так:
setTimeout(function(){}, 5000);
В качестве альтернативы вы можете установить задержку запроса для каждого запроса через почтальона или новичка в cli.