如何从邮递员中另一个请求的预请求选项卡 运行 GET 和 POST 请求?

How to run a GET and a POST request from pre request tab of another request in postman?

我处于一种情况,我需要 运行 一个基于请求 A 和 B 的响应的请求(比如请求 C)。这里 A 是一个 GET & B 是一个 POST 要求。现在我已经尝试在 C 的预请求选项卡中使用 pm.sendRequest 两次。但我面临的问题主要是,B 一直 运行ning 领先于 A。这意味着 POST 在 GET 之前是 运行ning。结果我无法成功 运行 请求 C.

这是我的预请求脚本示例:

const getOTP = {
  method: 'GET',
  url: `${pm.environment.get('base_url')}/${pm.environment.get('common_path')}/otp-login?msisdn=${pm.environment.get('msisdnWhite')}`,
  header: {
      'User-Agent': 'something..',
      'Accept-Language' : 'en'
  },
  
};
setTimeout(15000)

const postOTP={
    method : 'POST',
    url : `${pm.environment.get('base_url')}/${pm.environment.get('common_path')}/otp-login`,
    header: {
        'Content-Type':'application/json',
        'Accept-Language':'en'
    },
    body:{
        mode : 'application/json',
        raw: JSON.stringify(
            {
               "msisdn":"123456789",
                "otp":"0000"
                } )
    }
};


 pm.sendRequest(getOTP, (err, response) => {
  const jsonResponse = response.json();
  pm.environment.set("GETOTP",jsonResponse.result)
  console.log(jsonResponse);
 });

 pm.sendRequest(postOTP, (err, response) => {
  const jsonData = response.json();
      pm.environment.set("access_token",jsonData.access_token)
});

看来你需要运行请求A,等待响应,然后运行请求B,再次等待响应。

为此,您可以在 A 请求的回调中为 B 触发 sendRequest()

例如:

// send GET request A
pm.sendRequest (getOTP, (err, response) => {

    // here you are in the callback of the request A
    // this runs after the response of the request A
    const jsonResponse = response.json ();
    pm.environment.set ("GETOTP", jsonResponse.result)
    console.log (jsonResponse);


    // send POST request B
    pm.sendRequest (postOTP, (err, response) => {
        // here you are in the callback of the request B
        const jsonData = response.json ();
        pm.environment.set ("access_token", jsonData.access_token)
    });
});

我看到你设置了一个setTimeout(15000),我猜是为了等待A的回答。你不应该为此使用setTimeout,所以请删除它。

那是说您需要知道,如果您希望 setTimeout() 有用,您需要在两个 sendRequest() 函数之间使用它。在两个变量声明之间,它现在没有做太多事情。