You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatling doWhile轮询HTTP接口仅调用一次后无限循环问题解决

Gatling任务轮询测试中HTTP请求仅执行一次的问题与解决

问题场景

用Gatling编写任务状态轮询测试用例:API在任务运行时返回202状态码,完成后返回200状态码,无响应体。后端任务可在半分钟内完成,但测试中首次请求获取202后,Gatling无限打印202。经Postman验证,服务API半分钟后已返回200,且服务日志仅显示Gatling发起一次请求并返回202,后续无请求。推测Gatling仅执行首次exec HTTP调用,之后复用session中保存的202值循环执行打印逻辑,未再次调用API。

测试代码如下:

doWhile(session => session("status").as[Int] != 200) {
    exec(
        http("check status")
            .get("http://job/status")
            .check(status.in(200, 202), status.saveAs("status"))
            
    )
        .exec { session =>
            val status = session("status").as[Int]
            println(s"status $status")
            session
        }
        .pause(10)
}

疑问

doWhile块包含两个exec,为何第一个exec(HTTP请求)仅执行一次?

原因分析

Gatling默认会缓存HTTP响应,首次请求返回202后,后续循环会直接复用缓存的结果,不会再次发起实际的HTTP请求。因此服务端日志中没有后续请求记录,session里的"status"值也一直保持202,导致无限循环打印202。

解决方法

在HTTP协议构建器中禁用缓存,配置后Gatling会在每次循环中实际发起请求。修改后的协议配置代码如下:

http
    .baseUrl(host)
    .contentTypeHeader("application/json")
    .authorizationHeader(s"Bearer $token")
    .disableCaching

内容的提问来源于stack exchange,提问作者Weever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:42:08