需要帮助 - 如何遍历列表和/或地图

时间:2017-10-29 08:35:39

标签: scala list loops foreach gatling

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结构。

1 个答案:

答案 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}")
    )
}