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

如何在Gatling(Scala)中记录超断言响应时间的请求详情?

在Gatling中记录响应时间超阈值的请求详情

核心问题原因

你尝试直接使用responseTime变量未被识别,是因为Gatling中没有全局的responseTime变量,需要从响应对象中正确提取响应时间。

解决方案:使用onResponse钩子捕获慢请求

Gatling提供了onResponse回调,可在每个请求完成后处理响应,直接获取响应时间并过滤出超阈值的请求,记录详细信息。

步骤1:定义响应时间阈值

// 自定义阈值,比如1000毫秒(1秒)
val RESPONSE_TIME_THRESHOLD = 1000L

步骤2:导入日志工具(推荐用日志替代println)

import org.slf4j.LoggerFactory

// 初始化日志实例,替换成你的Simulation类名
val logger = LoggerFactory.getLogger(classOf[YourPerformanceSimulation])

步骤3:在请求中添加onResponse处理

http("User Login Request")
  .post("/api/login")
  .formParam("username", "test_user")
  .formParam("password", "test_pass")
  .onResponse { response =>
    val responseTime = response.inMillis // 从响应对象获取毫秒级响应时间
    if (responseTime > RESPONSE_TIME_THRESHOLD) {
      // 记录核心慢请求信息
      logger.warn(s"[慢请求告警] 响应时间: $responseTime ms | URL: ${response.request.getUri} | 请求方法: ${response.request.getMethod}")
      // 可选:记录请求头、响应状态、响应体等详情
      logger.warn(s"请求头: ${response.request.getHeaders}")
      logger.warn(s"响应状态码: ${response.status.code}")
      // 若响应体过大,可截取片段避免日志膨胀
      logger.warn(s"响应体片段: ${response.body.string.take(500)}")
    }
  }

另一种方式:通过会话存储响应时间后处理

如果需要结合会话数据做更多操作,可先将响应时间存入会话,再后续处理:

http("Product List Request")
  .get("/api/products")
  .check(responseTimeInMillis.saveAs("responseTime")) // 将响应时间存入会话
  .exec { session =>
    val rt = session("responseTime").as[Long]
    if (rt > RESPONSE_TIME_THRESHOLD) {
      val request = session("httpRequest").as[HttpRequest]
      logger.warn(s"[会话中捕获慢请求] 响应时间: $rt ms | URL: ${request.getUri}")
    }
    session // 必须返回会话,否则会中断流程
  }

注意事项

  • 若响应体较大,避免直接记录完整内容,用take(N)截取片段防止日志文件过大。
  • 优先使用SLF4J日志而非println,方便后续通过Logback等框架配置输出格式和存储路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:23