加特林:如何从数组中提取一个对象?

问题描述 投票:0回答:3

我是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":"..."}]

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

arrays object gatling jsonpath scala-gatling
3个回答
0
投票

您可以轻松获得,但需要定义哪个键

它通过键使用'id'的示例

$.[*].[?(@.id == '1')]


$.[*] <=获取数组的所有元素

.[?(@.id == '1')] <=获取ID等于“ 1”的元素(可以使用任何值)。

或任何键$.[*].[?(@.hairColor == 'BROWN')]


然后添加.check(jsonPath("$.[*].[?(@.id == '1')]").saveAs("myUser")


0
投票

我自己找到了答案。如果我想保存数组中的任何一个对象,我可以这样做->

private val getUsers = exec(
  http("Get users")
    .get("/users")
    .check(status.is(200))
    .check(jsonPath("$[0]").find.saveAs("user")))

当然,我必须指定要保存的值,但是在我的示例中,我要保存第一个值。之后,您可以将此值用于其他请求。


0
投票

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

所以代替

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

您可以使用

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

然后,当您进行后续通话时,您可以执行类似的操作

选择第一个用户

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

选择一个随机用户

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

此方法还将允许您使用.forEach插入所有记录

© www.soinside.com 2019 - 2024. All rights reserved.