2017-10-29 1 views
1

스칼라는 저에게 새로운 것이고, 개울 dsl을 떠나 자마자 문제가 있습니다.도움이 필요하십니까? 목록 및/또는 맵을 반복하는 방법

제 경우에는 JSON 형식의 많은 메일로 응답하는 API (Mailhog)를 호출합니다. 나는 모든 가치를 부여 할 수 없다. "jsonPath"와 함께 필요하고 "정규식"도 필요합니다. 그게지도와 내가 반복하고 각 값을 저장하는 데 필요한 목록으로 연결됩니다.

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

은 처음에는 루프에 "확인"을 원하지만 어떤이 "수"- 요청이 너무 반복없이 반복 찾을 수 did'nt. 그래서지도와 목록입니다.

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 번째 값이 필요하고 그들에게 요청을한다. 이 작업을 수행하기 전에 문자열의 일부를 대체해야합니다. 나는 그 (것)들을 검사하고있는 동안 끈의 부분을 대체하는 것을 시도했다. findAll에서는 작동하지 않습니다.

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

목록에있는 모든 문자열의 일부를 어떻게 바꿀 수 있습니까? 또한 목록의 모든 세 번째 요소에 대해 get 요청을 만들 수 있습니다.

위와 같은 foreach 구조로 작동시키지 못합니다.

답변

1

나는 혼자서 문제를 해결하려고 애를 썼다. 처음에 나는 수표 (정규식 ...) 부분을 약간 변경했다.

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

그럼 난 단지 (나는 추출 된 URL이 메일 3 회 등장하기 때문에) 내 목록의 모든 세 번째 요소에 GET-요청을 만들고 싶었다.

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