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

使用Karate与Gatling框架无法获取异步事件累计响应时间求助

异步事件架构(REST+JMS)Karate-Gatling负载测试累计响应时间解决方案

问题根源

Karate-Gatling默认仅统计同步HTTP请求的响应时间,JMS异步消息接收的时间不会自动纳入分组统计;如果Feature中未明确标记完整流程的时间节点,就会出现报告中累计响应时间为0的情况。

可行解决方案

方案1:手动计算时间并注入Gatling会话

在Karate Feature中记录完整流程的起始和结束时间,计算差值后传递给Gatling,再通过自定义指标统计:

Feature示例代码:

Feature: 异步事件负载测试流程
  Scenario: 发起REST请求并等待JMS响应
    # 记录流程开始时间
    * def startTime = java.lang.System.currentTimeMillis()
    # 发送同步REST请求
    Given url "http://your-rest-api-endpoint"
    When method post
    Then status 202
    # 从JMS队列接收异步事件
    * def jmsEvent = karate.jms().queue("your-jms-queue-name").receive()
    # 记录流程结束时间并计算总耗时
    * def endTime = java.lang.System.currentTimeMillis()
    * def totalAsyncDuration = endTime - startTime
    # 将总耗时存入Gatling会话
    * session.set("totalAsyncTime", totalAsyncDuration)

Gatling场景示例代码:

val playersTestSample = scenario("异步事件测试")
  .group("完整异步流程") {
    exec(karateFeature("classpath:FeatureFiles/SamplePerfTest.feature"))
      .exec(session => {
        // 从会话中取出总耗时并记录到Gatling指标
        val totalTime = session("totalAsyncTime").as[Long]
        io.gatling.core.Predef.GatlingMetrics.withTimer("async_total_response_time").record(totalTime, session)
        session
      })
  }

方案2:使用Karate内置Timer标记流程

利用Karate的karate.timerAPI标记完整异步流程的起止点,Gatling会自动识别并统计这段时间:

Feature示例代码:

Feature: 异步事件负载测试流程
  Scenario: 发起REST请求并等待JMS响应
    # 启动自定义计时器
    * karate.timer.start("async_full_flow")
    # 发送同步REST请求
    Given url "http://your-rest-api-endpoint"
    When method post
    Then status 202
    # 从JMS队列接收异步事件
    * def jmsEvent = karate.jms().queue("your-jms-queue-name").receive()
    # 停止计时器
    * karate.timer.stop("async_full_flow")

Gatling场景代码(无需额外修改):

val playersTestSample = scenario("Sample").group("Sample") {
  exec(karateFeature("classpath:FeatureFiles/SamplePerfTest.feature"))
}

此时Gatling报告会新增async_full_flow的时间统计项,包含REST请求到JMS响应接收的完整耗时。

注意事项

  • JMS接收操作需设置合理的超时时间,避免测试线程无限等待
  • 若需模拟高并发场景,确保JMS消费者的配置能支撑对应并发量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:55:26