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

斯图尔特

目标

我正在尝试随机化每个用户/场景采取的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-如何按用户/场景重新排序步骤?

如果我可以调用“ .shufflePerScenario”之类的东西来代替“ .random”,那将是一个很好的选择,以便每个方案以唯一的顺序访问元素。

我可以用加特林喂食器做些什么吗?有没有更好的方法可以解决这个问题?

看起来randomSwitch也可能导致重复的步骤。我想我可以为此使用动态数据,但是很高兴知道是否存在更直接的解决方案。

Thaddeus Bardiuk

有关步骤及其名称的列表

  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(_)))
  }

确保添加唯一的前缀-加特林不允许名称相同的场景,并且随机播放有时会产生相同的步骤组合。

运行3个场景(每个场景2个用户)的示例

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

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章