Почтальон проводит опрос ограниченное количество раз, прежде чем провалить тест и перейти к следующему запросу. - PullRequest
0 голосов
/ 20 мая 2019

Я пишу тест для запроса 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 Ответ

0 голосов
/ 23 мая 2019

Вы можете попробовать это:

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.

...