在 gatling 中暂停重试失败的请求

Retry failed request with pause in gatling

我正在尝试实现重试逻辑,以便如果我的请求由于某些技术问题(超时、连接重置等)或错误代码 4xx|5xx 而失败,脚本会尝试重新提交几次稍作停顿

我的代码是这样的

scenario("my_simulation")
  .repeat(2) {
    tryMax(5, "retryLoopIndex") {
      //pause(session => computePause(session("retryLoopIndex").as[Int]))
      println(LocalDateTime.now() + """Before sleep""")
      pause(5.seconds)
      println(LocalDateTime.now() + """After sleep""")

      exec(http("get_eps_internal")
        .get("/500")
        .headers(headers_0)
        .requestTimeout(GlobalRequestTimeout)
        .check(status.is(200))
      )
    }
  }

我这里有两个问题:

  1. 好像只在场景初始化时暂停“发生”一次
  2. 它会暂停几毫秒,而不是我预期的 5 秒

来自日志

2022-02-04T08:23:06.404 Before sleep
2022-02-04T08:23:06.408 After sleep

我可以在每次重试前添加暂停吗?

您调用 println() 的方式不正确。事实上,println() 在开始负载测试之前调用了一次。如果你想在测试期间打电话,你需要这样做:

.exec { session =>
        println(LocalDateTime.now() + """Before sleep""")
        session
      }

另一点是你调用动作时不带“点”,这不是正确的方法

... {
 pause(5.seconds)
 exec(http("get_eps_internal")
... }

你需要这样做:

... {
 pause(5.seconds)
 .exec(http("get_eps_internal")
... }