加特林 - 随机化场景的请求顺序?

时间:2018-03-22 16:27:55

标签: scala load-testing gatling scala-gatling

目标

我正在尝试随机化每个用户/场景采取的5个步骤的顺序。

也就是说,这些是我的用户,以及要采取的步骤顺序(步骤A,B,C,D和E中)

user 1: A, E, B, D, C
user 2: D, E, C, B, A 

也就是说,每个用户只需要执行一次,但是按随机顺序。

未通过审核

我有RecordSeqFeederBuilder馈线:

val multiFeeder = Array(
  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"),
).random

但这将导致用户步骤,如

user 1: A, E, E, E, C
user 2: B, C, B, B, A 

tldr - 如何重新排列每个用户/方案的步骤?

如果不是“.random”我可以调用类似“.shufflePerScenario”的东西,那将是很好的 - 这样每个场景都以唯一的顺序访问元素。

我有什么方法可以用加特林喂食器吗?我有更好的方法来接近这个吗?

看起来randomSwitch也可能导致重复的步骤。我想我可以使用dynamic data,但如果存在更直接的解决方案,那将会很高兴。

1 个答案:

答案 0 :(得分:2)

有关步骤及其名称的列表

  val a = http("a").get("/1")
  val b = http("b").get("/2")
  val c = http("c").get("/3")
  private val steps = List("a" -> a, "b" -> b, "c" -> c)

您可以创建一个从步骤到场景的功能,这可以改变步骤

  def randomOrder(steps: Seq[(String, HttpRequestBuilder)], prefix: String): ScenarioBuilder = {
    val shuffled = Random.shuffle(steps)
    val name = shuffled.map(_._1).mkString(prefix, ", ", "")
    scenario(name).exec(shuffled.map(_._2).map(exec(_)))
  }

确保添加唯一前缀 - gatling不允许具有相同名称的场景,而shuffle有时可以生成相同的步骤组合。

运行3个场景的示例,每个场景包含2个用户

  setUp(
    randomOrder(steps, "first ").inject(atOnceUsers(2)),
    randomOrder(steps, "second ").inject(atOnceUsers(2)),
    randomOrder(steps, "third ").inject(atOnceUsers(2)),
  )

enter image description here