Gatling中如何区分2XX与304响应并在测试报告中展示?
Gatling区分2XX与304响应并在报告展示的实现方法
status().saveAs("status") 仅会将当前请求的响应状态码存入虚拟用户的会话上下文,不会修改Gatling默认的请求统计逻辑。Gatling默认将所有2XX、3XX类响应当作成功请求统一聚合统计,不会单独拆分304状态码的统计维度,因此无论是否添加这段配置,默认报告都不会体现两类响应的差异。
可通过以下两种方案实现区分统计:
方案1:按状态码拆分请求分组
Gatling报告会自动按group维度拆分统计请求数、响应时间、成功率等指标,可在状态码校验逻辑中,给304响应和普通2XX响应分别打上不同的分组标记,实现自动拆分统计:
.exec( http("target_request") .get("/your/resource/path") .check( status().is((statusCode: Int) => { statusCode match { // 命中304时,进入304专属统计分组 case 304 => exec(group("304_NotModified") { exec(session => session) }) true // 普通2XX响应走默认统计逻辑 case code if code >= 200 && code < 300 => true // 其他状态码判定为请求失败 case _ => false } }) ) )
运行后报告会在请求统计板块单独列出304_NotModified分组的所有指标,和普通2XX请求的指标完全分开。
方案2:注册自定义统计指标
如果不需要拆分请求链路,只想在全局维度统计两类响应的数值,可以在脚本初始化阶段注册自定义指标,请求返回后根据状态码往对应指标写入数据,最终报告会在自定义指标板块展示两类响应的计数、响应时间分布:
import java.util.concurrent.atomic.AtomicInteger import io.gatling.commons.stats.Histogram // 脚本全局初始化位置定义指标 val count2xx = new AtomicInteger(0) val count304 = new AtomicInteger(0) val respTime2xx = new Histogram("2xx_response_time_ms") val respTime304 = new Histogram("304_response_time_ms") // 请求配置中写入统计逻辑 .exec( http("target_request") .get("/your/resource/path") .before(session => session.set("reqStartTime", System.currentTimeMillis())) .check( status().transform((code, session) => { val cost = System.currentTimeMillis() - session("reqStartTime").as[Long] code match { case 304 => count304.incrementAndGet() respTime304.record(cost) case c if c >=200 && c <300 => count2xx.incrementAndGet() respTime2xx.record(cost) case _ => } code }).in(200 to 299, 304) ) )
注意:不要为了区分直接将304判定为请求失败,会拉高全局错误率,干扰正常性能结果判断。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

