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

如何让Gatling多场景按指定比例随机执行且保持恒定速率

解决方案

要实现按指定比例随机执行场景+每秒1个请求的恒定速率,核心是通过Gatling的权重随机选择机制整合所有子场景,再用单一注入策略控制总请求速率,替代原有的多场景并行/顺序注入方案。

1. 按权重整合子场景

使用weightedRandomSwitch,按照需求的百分比设置对应权重(权重值只需比例匹配即可,比如直接用50、10、20、15、5对应50%、10%等比例),将5个子场景整合为一个主场景:

ScenarioBuilder mainScenario = scenario("RandomWeightedMainScenario")
    .exec(weightedRandomSwitch(
        50.0 -> s1,
        10.0 -> s2,
        20.0 -> s3,
        15.0 -> s4,
        5.0 -> s5
    ));

2. 设置单一注入策略控制总速率

给主场景设置每秒1个请求的恒定注入速率,持续900秒,这样总请求数刚好为900,各子场景的请求数会自动按权重比例分配:

setUp(
    mainScenario.injectOpen(constantUsersPerSec(1).during(900))
).protocols(getSignInHeaders());

完整代码示例

// 定义原有5个子场景
ScenarioBuilder s1 = scenario("S1").exec(getAuthenticationChain()).exec(createProduct(150, "S1"));
ScenarioBuilder s2 = scenario("S2").exec(getAuthenticationChain()).exec(createProduct(10, "S2"));
ScenarioBuilder s3 = scenario("S3").exec(getAuthenticationChain()).exec(createProduct(30, "S3"));
ScenarioBuilder s4 = scenario("S4").exec(getAuthenticationChain()).exec(createProduct(60, "S4"));
ScenarioBuilder s5 = scenario("S5").exec(getAuthenticationChain()).exec(createProduct(80, "S5"));

// 构建带权重随机选择的主场景
ScenarioBuilder mainScenario = scenario("RandomWeightedMainScenario")
    .exec(weightedRandomSwitch(
        50.0, s1,
        10.0, s2,
        20.0, s3,
        15.0, s4,
        5.0, s5
    ));

// 配置压测执行
setUp(
    mainScenario.injectOpen(constantUsersPerSec(1).during(900))
).protocols(getSignInHeaders());

方案说明

  • weightedRandomSwitch会在每次执行主场景时,按设定权重随机挑选子场景执行,既满足随机顺序要求,又能保证统计上的比例符合预期;
  • 单一注入策略确保总请求速率严格稳定在每秒1个,不会出现多场景并行注入导致的速率叠加问题;
  • 长时间压测下,各子场景的实际请求数会非常接近你计算的数值(s1:450、s2:90、s3:180、s4:135、s5:45)。

补充提示

  • 权重值无需强制总和为100,Gatling会自动按比例计算概率,比如用5、1、2、1.5、0.5也能得到相同的比例效果;
  • 若需要更精确的固定请求数,可结合repeat和randomSwitch实现,但weightedRandomSwitch在持续压测场景下的比例精度已足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:33:26