我正在使用 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 构造,我们可以构建的最佳解决方案是使用 tryMax
和 asLongAs
方法结合在一起。
我的问题中发布的代码如下。
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/