首页 > 解决方案 > Gatling:如何从数组中提取一个对象?

问题描述

我是 Gatling 和 Scala 的新手。发送 Get Request 响应正文是 Array,我只需要从 Array 中提取一个对象并将其发布到 Gatling 中。有人可以向我解释怎么做吗?

这是我的代码示例:

private val getUsers = exec(
      http("Get users")
        .get("/users")
        .check(status.is(200))
        .check(bodyString.saveAs("Users")))

我得到的结果是:

[{"id":"1","hairColor":"BROWN","age":24,"language":"English","birthDate":"1995-02-10"},
{"id":"2","hairColor":"YELLOW","age":30,"language":"Australian","birthDate":"1889-10-05"},
{"id":"3","hairColor":"BLACK","age":15,"language":"American","birthDate":"..."},
{"id":"4","hairColor":"RED","age":50,"language":"Russian","birthDate":"..."}]

如何从此数组中仅获取一个用户并发布整个用户对象?

标签: arraysobjectgatlingjsonpathscala-gatling

解决方案


如果您切换到 jsonPath 检查,您可以将所有用户对象放入一个 Vector 中,该 Vector 在 Gatling EL 中有一些很好的支持

所以而不是

.check(bodyString.saveAs("Users"))

您可以使用

.check(jsonPath("$..[?(@.id)]").findAll.saveAs("Users")))

然后,当您来拨打后续电话时,您可以执行以下操作

选择第一个用户

.body(StringBody("${Body(1).jsonStringify()}"))

选择一个随机用户

.body(StringBody("${Body.random().jsonStringify()}"))

这种方法还允许您使用.forEach来遍历所有记录


推荐阅读