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

Gatling带峰值负载模型:如何实现周期性高低负载切换测试

Gatling交替高低负载测试实现方案

完全可以实现,你可以通过Gatling自带的负载注入DSL快速实现该高低负载交替的测试场景。

实现思路

  • 核心使用Gatling的constantUsersPerSec(控制每秒新增用户数)或incrementConcurrentUsers(控制并发用户数)注入器控制负载量级
  • 把「低负载运行 + 高负载运行」作为1个完整周期,循环执行直到总时长达到1小时
  • 下述实现默认单段低负载、单段高负载的持续时长均为1分钟,可根据实际需求调整参数

完整实现代码示例(每秒新增用户数模式)

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class AlternatingLoadTest extends Simulation {

  // 替换为你的测试目标HTTP配置
  val httpProtocol = http
    .baseUrl("https://你的测试服务地址")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .acceptEncodingHeader("gzip, deflate")
    .userAgentHeader("Gatling Test Client")

  // 替换为你的实际业务测试场景
  val testScenario = scenario("高低负载交替测试")
    .exec(
      http("测试请求")
        .get("/test/path")
        .check(status.is(200))
    )
    // 可自定义请求间隔
    .pause(2.seconds)

  // 负载参数配置
  val lowLoadPerSec = 3 // 低负载每秒新增用户数
  val highLoadPerSec = 10 // 高负载每秒新增用户数
  val singleStageDuration = 1.minute // 单段负载(低/高)持续时长
  val totalTestDuration = 1.hour // 测试总时长
  // 计算需要循环的周期数:总时长 / (低负载时长+高负载时长)
  val cycleNumber = (totalTestDuration.toSeconds / (singleStageDuration.toSeconds * 2)).toInt

  setUp(
    testScenario.inject(
      // 平铺所有周期的负载配置
      List.fill(cycleNumber)(
        List(
          constantUsersPerSec(lowLoadPerSec) during singleStageDuration,
          constantUsersPerSec(highLoadPerSec) during singleStageDuration
        )
      ).flatten
    )
  ).protocols(httpProtocol)
}

并发用户数模式实现(可选)

如果你需要的是并发用户总量稳定在3/10,而非每秒新增指定用户数,可将注入逻辑替换为以下内容:

setUp(
  testScenario.inject(
    List.fill(cycleNumber)(
      List(
        // 提升到低负载并发量
        incrementConcurrentUsers(lowLoadPerSec) times 1 separatedBy 0.seconds,
        // 保持低负载
        nothingFor(singleStageDuration),
        // 提升到高负载并发量
        incrementConcurrentUsers(highLoadPerSec - lowLoadPerSec) times 1 separatedBy 0.seconds,
        // 保持高负载
        nothingFor(singleStageDuration),
        // 清空当前周期的并发用户,进入下一轮
        incrementConcurrentUsers(-highLoadPerSec) times 1 separatedBy 0.seconds
      )
    ).flatten
  )
).protocols(httpProtocol)

参数调整说明

  • 若需要调整两次高负载之间的低负载运行时长,只需修改低负载段的during/nothingFor参数,同时对应调整cycleNumber的计算逻辑即可
  • 可直接修改lowLoadPerSec、highLoadPerSec等参数适配其他负载量级的测试需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:03