Gatling 中不同用户的随机重复次数

Randomising number of repeats for different users in Gatling

我目前正在尝试用 Gatling 编写一个场景,我希望某个动作重复 1 到 8 次。随机性应该以每个用户为基础,因此例如一个用户可能得到 3 次重复,而另一个用户可能得到 7 次。

我希望场景像这样工作,以模拟我不确定用户将重复某个操作多少次的事实。

我尝试了以下方法:

class MySimulation extends Simulation {
  private val myScenario = scenario("Scenario")
    .repeat(Random.nextInt(8) + 1) {
      // some stuff
    }

  setUp(myScenario.inject(rampUsers(100) during (60 seconds)))
}

然而,这最终会编译成一个随机数,然后将其用于每个用户。所以如果随机数生成5次,每个用户最终会重复5次,这不是我想要的。

Gatling 有没有办法让每个用户得到一个不同的随机数来重复函数?还是只适用于常数?

您尝试的方式无效,因为您定义的方案是在启动时执行一次的构建器 - 因此 Random.nextInt 仅调用一次。

但是有几种方法可以实现您想要的。

最简单的(因为您只需要一个随机数)是使用加特林 EL 随机获取序列中的一个元素。

首先,用你想要的数字范围定义一个 scala val

private val times = 1 to 8

然后将你的范围放入会话中并使用 EL 从集合中获取随机值

.exec(_.set("times", times))
.repeat("${times.random()}" ) {
  // some stuff
}

或者,您可以定义一个自定义馈送器 - 这种方法可以让您执行随机字符串等操作

private val times = Iterator.continually( Map( "times" -> Random.nextInt(8) + 1))

然后只需喂食并使用 "times" 值

.feed(times)
.repeat("${times}") {
  // some stuff
}