2

Can you please help me with how to use this function in Postman test script section?


    () => {

    var sleep = (sleepDuration) => {

        var startTime = new Date().getTime();

        while (new Date().getTime() - startTime < sleepDuration) {}

    }

    var sleepByAsyncDelayTime = () => {

        var sleepDuration = postman.getEnvironmentVariable('asyncDelayTime') || 0;

        sleep(sleepDuration);

    }

    var retryOnFailure = (predicate, numberOfRetrys, sleepDuration, reRouteRequestName, postmanAssertions) => {

        var retryCountPerReq_key = request.name + '_retry_count';

        var retryCountPerReq = pm.environment.get(retryCountPerReq_key) || 0;

        var reflowCountPerReq_key = request.name + '_reflow_count';

        var reflowCountPerReq = pm.environment.get(reflowCountPerReq_key) || 0;

        var totalReflowCount_key = 'totalReflowCount';

        var totalReflowCount = pm.environment.get(totalReflowCount_key) || 0;

        var maxReflowCounter = postman.getEnvironmentVariable('maxReflowCounter') || 0;

        var maxReflowCounterPerReq = postman.getEnvironmentVariable('maxReflowCounterPerReq') || 0;

        function clearAndExit() {

            pm.environment.unset(retryCountPerReq_key);

            pm.environment.unset(reflowCountPerReq_key);

            postmanAssertions();

        }

        function retry() {

            sleep(sleepDuration);

            pm.environment.set(retryCountPerReq_key, ++retryCountPerReq);

            postman.setNextRequest(request.name);

        }

        function reFlow() {

            if (totalReflowCount < maxReflowCounter && reflowCountPerReq < maxReflowCounterPerReq) {

                pm.environment.unset(retryCountPerReq_key);

                pm.environment.set(totalReflowCount_key, ++totalReflowCount);

                pm.environment.set(reflowCountPerReq_key, ++reflowCountPerReq);

                postman.setNextRequest(reRouteRequestName);

            } else clearAndExit();

        }

        if (predicate()) clearAndExit();

        else if (retryCountPerReq < numberOfRetrys) retry();

        else if (reRouteRequestName != '') reFlow();

        else clearAndExit();

    }

    return {

        common: {

            sleepByAsyncDelayTime,

            sleep,

            retryOnFailure

        }

    };

}

I have followed this and still unable to make assertion with retries. I want to set this as a function and run test cases on the collection runner.

Postman / Newman retry in case of failure

1 Answers1

0

You could also do it like this:

var expectedHttpStatus = 200;
var maxNumberOfTries = 3;
var sleepBetweenTries = 5000;

if (!pm.environment.get("collection_tries")) {
    pm.environment.set("collection_tries", 1);
}

if ((pm.response.code != expectedHttpStatus) && (pm.environment.get("collection_tries") < maxNumberOfTries)) {
     var tries = parseInt(pm.environment.get("collection_tries"), 10);
     pm.environment.set("collection_tries", tries + 1);
     setTimeout(function() {}, sleepBetweenTries);
     postman.setNextRequest(request.name);
 } else {
     pm.environment.unset("collection_tries");

     pm.test("Status code is " + expectedHttpStatus, function () {
          pm.response.to.have.status(expectedHttpStatus);
     });

     // more tests here...
}
Christian Baumann
  • 3,188
  • 3
  • 20
  • 37