Scala对我来说很新鲜,一旦离开gatling dsl我就会遇到问题。
在我的情况下,我调用了一个API(Mailhog),它以json格式回复大量邮件。我无法抓住所有的价值观。 我需要它与“jsonPath”,我也需要“正则表达式”。 这会导致我需要迭代并保存每个值的地图和列表。
.check(jsonPath("$[*]").ofType[Map[String,Any]].findAll.saveAs("id_map"))
.check(regex("href=3D\\\\\"(.*?)\\\\\"").findAll.saveAs("url_list"))
起初我想循环“检查”,但我没有找到任何重复它们而不重复“获取” - 请求。所以这是一张地图和一份清单。
1)我需要地图的每个值,并且能够通过以下foreach循环解决问题。
.foreach("${id_map}", "idx") {
exec(session => {
val idMap = session("idx").as[Map[String,Any]]
val ID = idMap("ID")
session.set("ID", ID)
})
.exec(http("Test")
.get("/{ID}"))
})}
2)我需要列表的每个第3个值并对它们发出get-request。在我这样做之前,我需要替换字符串的一部分。我试着在检查它们时替换部分字符串。但它不适用于findAll。
.check(regex("href=3D\\\\\"(.*?)\\\\\"").findAll.transform(raw => raw.replace("""=\r\n""","")).saveAs("url"))
如何替换列表中每个字符串的一部分? 我如何在列表中的每个第3个元素上发出get-request。
我无法使用上述相同的foreach结构。
答案 0 :(得分:1)
我自己解决这个问题。起初我对我的支票(正则表达式......)做了一点改动。
.check(regex("href=3D\\\\\"(.*?)\\\\\"").findAll.transform(_.map(raw => raw.replace("""=\r\n""",""))).saveAs("url_list"))
然后我想在列表的每个第三个元素上创建一个Get-Request(因为我提取的URL每个邮件出现三次)。
.exec(session => {
val url_list =
session("url_list").as[List[Any]].grouped(3).map(_.head).toList
session.set("url_list", url_list)
})
最后,我用foreach循环遍历我的最终列表。
foreach("${url_list}", "urls") {
exec(http("Activate User")
.get("${urls}")
)
}