Lê Quang Bảo
Lê Quang Bảo

Reputation: 2870

Postman: how to send asynchronous request by script

I got two requests: A and B in postman. I want to send the request A first then send the request B while request A is still waiting for the response. It's quite easy to do this mannually because request A take 15s to finish.

But are there anyway I can do this automatically, because I am going to test this case a lot.

I have tried to use runner in postman but it always wait for request A to be finish before sending request B.

After that I found a document about sending asynchronous request in postman here.

I wrote a script that use pm.sendRequest to send request B and put that script in the pre-request of request A.

let confirmRequest = {
    url: url + "/confirm",
    method: "POST",
    body: {
        "requestId": (new Date()).getTime(),
        "statusCode": "0",
    }
}
setTimeout(function() {
    pm.sendRequest(confirmRequest, function (err, res) {
        console.log(err ? err : res.json());
    });      
}, 1500);

the problem is even I've wrapped it inside a setTimeout function, the request A still wait for pre-request to finish first. So in the end request B have been send before request A.

Are there any solution to this problem?

Upvotes: 4

Views: 8302

Answers (1)

praneeth1189
praneeth1189

Reputation: 11

I tried but could not achieve asynchronously process requests using Postman or Newman. I found it easier to write a nodeJS code using async-await-promise concepts. Here is the sample code:

Sample Code that works for me:

var httpRequest "your raw request body";

var headersOpt = {  
    "content-type": "application/json",
};

const promisifiedRequest = function(options) {
  return new Promise((resolve,reject) => {
    request(options, (error, response, body) => {
      if (response) {
        return resolve(response);
      }
      if (error) {
        return reject(error);
      }
    });
  });
};

var output;
async function MyRequest(httpRequest,j, fileName) {

    var options = {
        uri: "url",
        method: "POST",
        body: httpRequest,
        json: true,
        time: true,
        headers: headersOpt
    }
    try {
        console.log('request posted!');
        let response = await promisifiedRequest(options);
        console.log('response recieved!');
        output = output + ',' +response.elapsedTime;
        console.log(response.elapsedTime);
        console.log(output);
        //return response;
    } catch (err) {
        console.log(err);
    }
    finally
    {
//this code is optional and it used to save the response time for each request.
        try{
        fileName = (j+1)+'_'+fileName; 
        fs.writeFile('/logs-async/scripts/output/'+fileName+'.csv', output, (err) => {
            //throws an error, you could also catch it here
            if (err) throw err;
        });
        }
        catch (err){
            console.log(err);
        }
    }
}

Upvotes: 1

Related Questions