循环访问来自加特林/斯卡拉中先前请求的多个响应匹配项



我对加特林/斯卡拉还很陌生,所以如果我误解了一些明显的东西,我深表歉意,但是......

我有一个包含一系列请求的方案。其中之一是:

.exec (
http("Get IDs")
.post(<urlpath>)
.body(<body text>)
.headers(<headerinfo>)
.check(jsonPath("$[*].some.json.path").findAll.transform(_.map(_.replace("unwantedchars,""))).saveAs(myIds)
)

这工作正常,返回所有匹配的 json 元素的向量,并删除不需要的字符。我接下来要做的是循环访问前 5 个 id,并将它们传递给下一个请求。我已经尝试了以下各种变体,但没有多少变体/谷歌搜索返回实际解决方案:

.exec( session => {
val firstFive = session("myIds").as[Vector[String]].toArray.take(5)
for (inx <- 0 until 4){
exec(
http("get the item")
.get("/path/to/item/thing/" + firstFive(inx))
.headers(<etc etc>)
)
session
})

所以我知道不支持嵌套的可执行文件 - 但是我如何创建一个结合了 for 循环和实际 HTTP 请求的块?

我错过了一些明显的东西吗?

如果你想取 5,那么你只需要将它们放在会话中,然后使用 .foreach 块处理它们。

因此,与其采取前五个并尝试进行 exec 调用(正如您观察到的那样,这不起作用(,不如将列表保存回会话

.exec( session => {
val firstFive = session("myIds").as[Vector[String]].take(5)
session.set("firstFive", firstFive)
)

然后使用 DSL 遍历集合

.foreach("${firstFive}", "id") {
exec(
http("get the item")
.get("/path/to/item/thing/${id}")
.headers(<etc etc>)
)
}

您甚至可以将前五个选项添加到转换步骤中 - 因此整个事情可能是......

.exec (
http("Get IDs")
.post(<urlpath>)
.body(<body text>)
.headers(<headerinfo>) .check(jsonPath("$[*].some.json.path").findAll.transform(_.map(_.replace("unwantedchars,"")).take(5).saveAs(myIds)
)
.foreach("${myIds}", "id") {
exec(
http("get the item")
.get("/path/to/item/thing/${id}")
.headers(<etc etc>)
)
}

相关内容

  • 没有找到相关文章

最新更新