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

Gatling如何按倍数线性规则递增用户数并按响应时间阈值终止测试

Gatling 需求实现方案

需求1:线性递增用户数注入

  • Gatling 内置的rampUsersPerSec方法原生支持速率线性增长,完全匹配你要的5n类线性递增需求:该方法可以指定起始注入速率、目标注入速率,以及线性增长的持续时长,速率会在指定时长内均匀从起始值增长到目标值。
  • 比如你要在4分钟内,每秒新增用户数从0线性增长到20(即第1分钟速率5/秒、第2分钟10/秒、第3分钟15/秒、第4分钟20/秒,符合5n(n为分钟数)的线性规则),直接替换你原来的constantUsersPerSec(5) during (4 minutes)即可,也可以根据实际需求调整起始/目标速率值。

需求2:响应时间超阈值实时自动终止

  • 你当前用的assertions是测试结束后才执行的结果校验,无法实现实时终止。需要自定义Gatling的SimulationListener监听器,实时统计响应时间指标,超过阈值时主动终止测试。如果需要判断的是全局平均响应时间而非单次响应时间,可在监听器内新增计数器统计总请求数、总响应时间自行计算即可。

完整调整后的代码示例

// 导入基础依赖
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
import io.gatling.core.controller.Controller
import io.gatling.core.session.Session
import io.gatling.core.listener.SimulationListener
import io.gatling.http.response.Response

class YourSimulation extends Simulation {
  // 原有参数定义,可根据实际需求修改
  val tempsReponseLimiteAvantEchecEnMillisecondes = 2000 
  val dureeDuTestEnMinutes = 5 

  // 自定义监听器实现实时校验终止
  val responseTimeCheckListener = new SimulationListener {
    override def onResponse(response: Response): Unit = {
      // 单次响应时间超过阈值直接终止测试
      if (response.responseTime.toMillis > tempsReponseLimiteAvantEchecEnMillisecondes) {
        Controller.stop()
      }
    }
    // 空实现不需要的钩子方法
    override def onSimulationStart(): Unit = {}
    override def onSimulationEnd(): Unit = {}
    override def onScenarioStart(session: Session): Unit = {}
    override def onScenarioEnd(session: Session): Unit = {}
    override def onRequestStart(session: Session, requestName: String): Unit = {}
  }

  // 注册自定义监听器
  setUp(
    scenario(10).inject(
      atOnceUsers(1)
    ).protocols(httpProtocol),

    scenarioService(5000).inject(
      nothingFor((10 + 10) seconds),
      // 替换原有固定速率为线性递增速率
      rampUsersPerSec(0).to(20).during(4 minutes)
    ).protocols(httpProtocol)
  )
    .maxDuration(dureeDuTestEnMinutes minutes)
    // 保留原有的结束后断言,也可以根据需求删除
    .assertions(
      global.responseTime.max.lt(tempsReponseLimiteAvantEchecEnMillisecondes)
    )
    .protocols(httpProtocol)
    // 添加自定义监听器
    .addListener(responseTimeCheckListener)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:42:03