加特林 - 随机场景请求订单?
Gatling - randomize scenario's request order?
目标
我试图随机化每个 user/scenario 采取的 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 - 如何根据 user/scenario 重新排序步骤?
如果我可以调用类似“.shufflePerScenario”的东西而不是“.random”,那就太好了——这样每个场景都以唯一的顺序访问元素。
有什么方法可以用加特林喂料器做到这一点吗?有没有更好的方法来解决这个问题?
看起来 randomSwitch
也可能导致重复步骤。我想我可以为此使用 dynamic data,但如果能知道更直接的解决方案(如果存在)就好了。
步骤列表及其名称
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)),
)
目标
我试图随机化每个 user/scenario 采取的 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 - 如何根据 user/scenario 重新排序步骤?
如果我可以调用类似“.shufflePerScenario”的东西而不是“.random”,那就太好了——这样每个场景都以唯一的顺序访问元素。
有什么方法可以用加特林喂料器做到这一点吗?有没有更好的方法来解决这个问题?
看起来 randomSwitch
也可能导致重复步骤。我想我可以为此使用 dynamic data,但如果能知道更直接的解决方案(如果存在)就好了。
步骤列表及其名称
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)),
)