【问题标题】:How to add a pause between 2 requests in POSTMAN如何在 POSTMAN 中的 2 个请求之间添加暂停
【发布时间】:2017-03-21 13:09:55
【问题描述】:

我在 POSTMAN 中有一组请求。我想在 2 个请求之间添加一个暂停,但我无法通过阅读他们的文档找到这样做的方法。有什么想法吗?

更新我只想在一个请求后暂停,而不是在集合中的每个请求后暂停。

【问题讨论】:

  • 这个问题你解决了吗?

标签: http testing postman


【解决方案1】:

如果有人仍在寻找这个 - 您可以在您可以使用的集合中的多个测试之一之后/之前添加延迟:

setTimeout(function(){}, [number]);

其中“数字”是毫秒。如果它是在“测试”中添加的,它将在请求发送后执行。如果它是在“请求前测试”中添加的,它将在请求发送之前执行。

【讨论】:

  • 谢谢!这在 Postman 6.5 中对我很有用,我也找到了 a reference that says it works all the way back to Postman 5.2
  • 感谢您的帮助!小评论:“预请求测试”应该是“预请求脚本”
  • 为了明确语法,插入数字时不应该有括号:例如setTimeout(function(){}, 1500);
  • 当我在预请求中使用它时出现超时 + 当我手动运行调用时,它会运行一整分钟。任何解决方法/增强功能?具体来说,我需要在 3 个请求之间有一分钟。谢谢。
【解决方案2】:

使用 javascript 的忙等待是一个很好的技巧,但它会使您的 CPU 变热并且应用程序无响应。我使用 postman-echo 想出了这个解决方案。

假设您想在 Request_A 和 Request_B 之间添加较长的延迟。

首先,在 Request_A 的测试脚本中设置一个 env var 来标记开始。

environment.delayTimerStart = new Date();

然后,在创建中创建一个 GET 请求(这里称为“延迟 10s”)。它在https://postman-echo.com/delay/10 上进行 GET(10 秒后返回)

在其测试脚本中,添加

var curDate = new Date();
if (curDate - environment.delayTimerStart < delay_time_in_sec*1000) {
    postman.setNextRequest('Delay 10s');
} else {
    postman.setNextRequest("Request_B");
}

通过这种方式,您可以添加任意长度的延迟。

注意:10 秒是 postman-echo 接受的最大值。如果您只需要短暂的延迟,只需 GET https://postman-echo.com/delay/[1~10]

【讨论】:

    【解决方案3】:

    我知道两种可能的方法

    方法一

    将您的请求作为集合运行。 (https://www.getpostman.com/docs/collections) 使用 Newman(来自命令行的 Postman 收集运行程序)使用 --delay 标志运行您的收集。延迟输入值以毫秒为单位。

    方法二

    这是一个不错的 hack,我在这里找到了 https://github.com/postmanlabs/postman-app-support/issues/1038。您可以在 Postman 中为您的测试脚本添加延迟功能。

    【讨论】:

    • 感谢您的回答。方法1是我实际上一直在做的。但我只想在 one 请求之后暂停,而不是在每个请求之后暂停。看起来我正在使用你的方法 2。邮递员应该添加这个功能。 Runscope 有它,所以我想我被宠坏了。
    • 延迟时间超过 30 秒,方法 II 将不起作用
    • postman-echo.com/delay/<time_in_sec_max_10> 将此请求放在您想要延迟执行的两个请求之间
    【解决方案4】:

    试试这样的-

    if(jsonBody.responseCode=="SUCCESS"){
    
      setTimeout(function(){
              console.log("Sleeping for 3 seconds before next request.");
      }, 3000);
    
      postman.setNextRequest("nextAPI");
    
    }
    

    【讨论】:

    • nextAPI 有哪些内容?请求文件的名称?
    • 我建议在超时之前记录日志,里面有一个像()=&gt;{} 这样的noop。否则在超时结束之前你不会看到它。
    【解决方案5】:

    只是一个简单的例子,我相信你会明白的。

    setTimeout(() => {}, 15000); 
    

    15000 这是一个以毫秒为单位的值

    【讨论】:

      【解决方案6】:

      如果您使用的是 Postman Runner,请查看当前文档

      延迟

      这是收集运行中每个请求之间的间隔(以毫秒为单位)。

      https://www.getpostman.com/docs/postman/collection_runs/starting_a_collection_run

      如果你使用的是 newman

      --delay-request [number] Specify a delay (in ms) between requests [number]

      https://www.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman

      【讨论】:

      • 这正是我想要的!谢谢。
      【解决方案7】:

      如果您有独立的 Postman 应用程序(支持 ES7)并且您打算仅在 Postman 上进行测试,而不是在 newman(不支持 ES7)上进行测试,那么您可以在 Pre-Request 脚本中使用类似的内容您要延迟的请求:

      function foo() {
          return (new Promise((resolve, reject) => {
              setTimeout(() => {
                  resolve("done!");   // passing argument is optional, can just use resolve()
              }, 10000)   // specify the delay time in ms here..
          }))
      }
      
      async function waitForMe() {
          await foo().then((val) => {
              console.log(val);  // not required, you can just do an await without then
          })
      }
      
      waitForMe();
      

      【讨论】:

        【解决方案8】:

        我更喜欢使用在线服务 Postman Echo 的延迟端点(文档为 here)。只需创建一个使用此服务的请求,并在您希望添加延迟的其他两个请求之间调用它。

        如果您想在继续之前检查某事的状态,您可以在请求的Tests 中使用postman.setNextRequest() 循环直到某事完成。只需执行以下操作:

        1) 创建一个结构如下的集合:

        • 延迟 10 秒
        • 状态检查
        • 继续处理

        2) 在Status Check 请求测试中:

        if(responseBody.has("Success")) //or any other success condition
        {
            postman.setNextRequest('Continue Processing');
            tests["Success found"] = true;
        }
        else
        {
            postman.setNextRequest('Delay For 10 Seconds');
            tests["No success found"] = true;
        }
        

        【讨论】:

          【解决方案9】:

          您可以使用 JavaScript 的 setTimeout 方法。这将确保您的方法将在给定的延迟后执行。

            setTimeout(checkStatusCode, 500);
          
              function checkStatusCode() {
          
                  pm.sendRequest('https://postman-echo.com/get', function (err, res) {
          
                      tests['status code should be 200']= res.code ===200;
          
                  });
              }
          

          【讨论】:

            猜你喜欢
            • 2017-12-01
            • 1970-01-01
            • 2021-03-01
            • 2018-03-24
            • 1970-01-01
            • 1970-01-01
            • 2011-07-09
            • 2018-12-10
            相关资源
            最近更新 更多