在 Gatling 中,如何从返回的正文中创建键值对并将其保存在会话中?

In Gatling, how can I create a key value pair from returned body and save it in the session?

所以我执行了一个 POST 调用并在 return 中获取了一些对象。 我想提取并创建一个键值对并将其保存在会话中供以后使用。

我当前的代码如下所示:

.exec(http(“Rest call“)
  .post("/api")
  .body(ElFileBody("json/api.json")).asJson
  .check(jsonPath("$.result.objects[*].files[?(@.type == ‘FILE1’)].id").findAll.saveAs(“id”))
  .check(jsonPath("$.result.objects[*].files[?(@.type == ‘FILE1’)].name”).findAll.saveAs(“name”))

在这里,我在我的会话中得到了两个列表(向量),"id" 和 "name"。 我想做的是创建一个 key/value 对 id/name 的列表。显然,这些对应该与相同的 jsonpath 命中相关联。

最简单的方法是在会话函数中使用 scala 的集合压缩

.exec(http(“Rest call“)
  .post("/api")
  .body(ElFileBody("json/api.json")).asJson
  .check(jsonPath("$.result.objects[*].files[?(@.type == ‘FILE1’)].id").findAll.saveAs(“id”))
  .check(jsonPath("$.result.objects[*].files[?(@.type == ‘FILE1’)].name”).findAll.saveAs(“name”)
)
.exec(session => {
  var ids = session("id").as[Seq[String]]
  var names = session("name").as[Seq[String]]
  session.set("pairs", ids zip names)
})

这将设置一个名为 "pairs" 的会话变量,内容是 Tuple2

的列表

查看 https://alvinalexander.com/scala/how-to-merge-sequential-collection-pairs-zip-unzip-scala-cookbook