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

如何在Gatling中随机化场景请求步骤的执行顺序?

实现Gatling中每个用户随机执行固定步骤序列的方案

嘿,我懂你的需求——你想让每个Gatling用户都把A、B、C、D、E这五个步骤各执行一次,但每个人的执行顺序完全随机。你之前用RecordSeqFeederBuilder走不通,是因为这个feeder是按固定顺序循环输出数据的,没法为每个用户生成独立的随机序列。咱们换个思路来实现:

步骤1:定义所有步骤的基础数据

先把每个步骤的名称和路径整理成一个列表,方便后续操作:

val steps = List(
  Map("stepName" -> "A", "stepPath" -> "pathA"),
  Map("stepName" -> "B", "stepPath" -> "pathB"),
  Map("stepName" -> "C", "stepPath" -> "pathC"),
  Map("stepName" -> "D", "stepPath" -> "pathD"),
  Map("stepName" -> "E", "stepPath" -> "pathE")
)

步骤2:为每个用户生成专属随机步骤序列

在用户进入场景的初始阶段,把步骤列表打乱后存入用户的Session里——这样每个用户都有自己独一份的随机顺序,不会和其他人重复:

val initRandomSteps = exec(session => {
  // 用Scala的Random工具类打乱步骤列表
  val shuffledSteps = scala.util.Random.shuffle(steps)
  // 把打乱后的序列存到Session中,后续可直接调用
  session.set("shuffledSteps", shuffledSteps)
})

步骤3:循环执行打乱后的步骤

用Gatling的foreach循环,遍历Session里的随机序列,逐个执行每个步骤的操作。这里我假设每个步骤是发起HTTP请求,你可以根据实际需求替换成对应的业务逻辑:

val executeRandomSteps = foreach("${shuffledSteps}", "currentStep") {
  exec(http("执行步骤: ${currentStep.stepName}")
    .get("${currentStep.stepPath}")
    .check(status.is(200))) // 可根据需要添加断言检查
}

步骤4:组合成完整的用户场景

把上面的初始化和执行步骤组合起来,就得到了符合你需求的场景:

val userScenario = scenario("随机执行步骤场景")
  .exec(initRandomSteps)
  .exec(executeRandomSteps)

这个方案的核心是每个用户独立生成随机序列,完全避开了feeder全局固定顺序的问题,保证每个用户都会执行所有步骤一次,且顺序完全随机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:12