在 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))
)
}
}
我这里有两个问题:
- 好像只在场景初始化时暂停“发生”一次
- 它会暂停几毫秒,而不是我预期的 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")
... }
我正在尝试实现重试逻辑,以便如果我的请求由于某些技术问题(超时、连接重置等)或错误代码 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))
)
}
}
我这里有两个问题:
- 好像只在场景初始化时暂停“发生”一次
- 它会暂停几毫秒,而不是我预期的 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")
... }