2017-10-29 103 views
1

Scala对我来说是非常新的,一旦离开收集的dsl,我就会遇到问题。需要帮助 - 如何循环访问列表和/或地图

在我的情况下,我调用一个API(Mailhog),它以json格式发送了很多邮件。我无法获取所有的值。 我需要它与“jsonPath”,我也需要“正则表达式”。 这导致了我需要迭代并保存每个值的映射和列表。

.check(jsonPath("$[*]").ofType[Map[String,Any]].findAll.saveAs("id_map")) 
.check(regex("href=3D\\\\\"(.*?)\\\\\"").findAll.saveAs("url_list")) 

起初我想循环“检查”,但我没有找到任何重复它们而没有重复“get” - 请求。所以这是一张地图和一张清单。

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)我需要列表中的每个第三个值,并对它们进行获取请求。在我能做到这一点之前,我需要替换一部分字符串。我试图在检查它们时替换部分字符串。但它不适用于findAll。

.check(regex("href=3D\\\\\"(.*?)\\\\\"").findAll.transform(raw => raw.replace("""=\r\n""","")).saveAs("url")) 

如何替换列表中每个字符串的一部分? 如何在列表中的每个第三个元素上进行get-request。

我不能让它与上面的相同foreach结构一起工作。

回答

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