scala - 在 Ga特林 中设置异步调用超时

标签 scala rest timeout load-testing gatling

我正在使用 Gadling 对微服务架构进行一些负载测试。我正在测试两个 REST 服务;服务 A 上的 POST 开始执行引擎,而服务 B 上的 GET 最终 检索此类执行的结果。

使用 asLongAs 构造,我重试进行 GET REST 调用,直到结果尚未准备好。但是,我不想永远循环。我需要设置超时或最大尝试时间。

我正在使用的代码摘录如下。

scenario("my-scenario")
  .feed(feeder)
  .exec(
    http("post-to-A")
      .post("/execution")
      .body(StringBody(
        """{
          | "information": ${INFORMATION}
          |}""".stripMargin
      ))
     .asJSON
     .check(status.is(200))
  )
  .exec(_.set("result", ""))
  .asLongAs(session => session("result").validate[String].get != "") {
    exec(
      http("get-to-B")
        .get("/result")
        .check(status.is(200))
        .check(jsonPath("$.result").saveAs("result"))
    )
  }

如何在上面的代码中设置超时?

谢谢大家。

最佳答案

经过一番谷歌搜索后,我发现关于 Gattle 中复杂场景开发的文档和示例非常少。与我得出类似结论的优秀帖子如下:Stress testing asynchronous REST service with Gatling .

由于缺乏能够实现我想要的功能的 native 构造,我们可以构建的最佳解决方案是使用 tryMaxasLongAs方法结合在一起。

我的问题中发布的代码如下。

scenario("my-scenario")
  .feed(feeder)
  .exec(
    http("post-to-A")
      .post("/execution")
      .body(StringBody(
        """{
          | "information": ${INFORMATION}
          |}""".stripMargin
      ))
     .asJSON
     .check(status.is(200))
  )
  .exec(_.set("result", ""))
  .tryMax(10) {
    asLongAs(session => session("result").validate[String].get != "") {
      exec(
        http("get-to-B")
          .get("/result")
          .check(status.is(200))
          .check(jsonPath("$.result").saveAs("result"))
      )
    }
  }

Gatling 将尝试调用第二个 REST 服务 10 次,直到调用成功。显然,您应该正确设计 REST 服务,响应与 200 不同的 HTTP 状态,直到无法达到结果为止。

唯一的缺点是

request failed are counted towards failed requests what in our case would drastically falsify results.

希望有帮助。

关于scala - 在 Ga特林 中设置异步调用超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50450741/

相关文章:

scala - 如何在模式的开头添加一列?

javascript - Node JS - 文件生成器架构

http - 如何强制 HTTP 客户端使用条件请求进行更新?

c# - 如果方法完成时间太长则超时

java - 甲骨文一致性 : How to set the timeout on an invoke call in a replicated cache?

scala - 非文字值的模式匹配

Scala 的空集 : . .. 不符合预期类型 Set[Nothing]

javascript - Jquery:设置页面加载超时

scala - Slick 3.0.0 执行查询

java - 如何在 Spring Boot 中为每个用户设置速率限制?