2017-10-29 120 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}") 
    ) 
}