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

Gatling同一Simulation多场景配置失效及定时调参需求求助

在Gatling同一Simulation中配置多场景并动态调整注入速率的解决方案

当然可以在同一个Gatling Simulation里配置多个场景,你之前遇到的只有最后一个场景生效的问题,核心是语法错误和配置方式不对,咱们一步步解决:

一、先修复多场景同时生效的基础配置

你原来的代码里scenario2.inject(2)是完全错误的——inject()方法需要接收Gatling的注入策略(比如atOnceUsers、constantUsersPerSec这类),而不是直接传数字。同时,多场景的正确配置方式是用逗号分隔,或者用andThen/par来控制执行顺序。

正确的多场景并行配置(同时运行两个场景)

setUp(
  scenario1.inject(atOnceUsers(1)),  // 场景1立即注入1个用户
  scenario2.inject(atOnceUsers(2))   // 场景2立即注入2个用户
).protocols(httpProtocolBuilder)

正确的多场景顺序配置(先跑场景1,再跑场景2)

如果需要按顺序执行场景,用andThen:

setUp(
  scenario1.inject(atOnceUsers(1))
    .andThen(scenario2.inject(atOnceUsers(2)))
).protocols(httpProtocolBuilder)

二、实现2小时测试+每10分钟调整注入速率的需求

要实现每10分钟调整一次各场景的每秒用户注入速率,我们可以把整个2小时测试拆成12个10分钟的阶段,每个阶段为不同场景设置对应的速率,然后把这些阶段串联起来。

示例代码(并行执行场景,每阶段调整速率)

import scala.concurrent.duration._

// 定义测试总时长和每个阶段的时长
val totalTestDuration = 2.hours
val stageLength = 10.minutes

// 定义每个阶段的速率:(场景1每秒用户数, 场景2每秒用户数),一共12个阶段对应2小时
val stageRateConfigs = List(
  (3.0, 6.0),   // 第1个10分钟:场景1每秒3用户,场景2每秒6用户
  (5.0, 8.0),   // 第2个10分钟:场景1每秒5用户,场景2每秒8用户
  (7.0, 10.0),  // 第3个10分钟:以此类推...
  (9.0, 12.0),
  (10.0, 15.0),
  (12.0, 18.0),
  (10.0, 15.0),
  (8.0, 12.0),
  (6.0, 10.0),
  (4.0, 8.0),
  (3.0, 6.0),
  (2.0, 4.0)    // 第12个10分钟:最后阶段降速
)

// 构建每个阶段的场景配置:两个场景并行执行当前阶段的速率
val testStages = stageRateConfigs.map { case (rate1, rate2) =>
  scenario1.inject(constantUsersPerSec(rate1).during(stageLength))
    .par(scenario2.inject(constantUsersPerSec(rate2).during(stageLength)))
}

// 把所有阶段串联起来,执行完整的2小时测试
setUp(
  testStages.reduce(_.andThen(_))
).protocols(httpProtocolBuilder)

关键说明

  • 时间单位:必须导入scala.concurrent.duration._才能使用hours、minutes这类简洁的时间写法
  • 速率调整方式:如果需要线性增减速率(比如10分钟内从3涨到5),可以用rampUsersPerSec(3).to(5).during(stageLength)替代constantUsersPerSec
  • 阶段间间隔:如果需要在阶段之间留空等待,可以在andThen之间插入nothingFor(1.minute)这样的配置
  • 并行vs顺序:用par表示两个场景在当前阶段同时注入用户;如果需要场景1先跑当前阶段,再跑场景2,就把par换成andThen

三、额外注意事项

  • 确保你的场景定义(scenario1、scenario2)是正确的,每个场景都包含了完整的请求流程
  • 在运行测试前,可以先缩短总时长(比如改成10分钟)做小范围验证,确认速率调整和多场景执行符合预期
  • 如果需要更复杂的速率逻辑(比如基于时间动态计算),可以用Gatling的自定义注入策略或者结合Scala代码实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:40:55