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
相关产品推荐
相关产品推荐

