加特林:如何从数组中提取一个对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加特林:如何从数组中提取一个对象?相关的知识,希望对你有一定的参考价值。
我是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对象?
答案
您可以轻松获得,但需要定义哪个键
它通过键使用'id'的示例
$.[*].[?(@.id == '1')]
$.[*]
<=获取数组的所有元素
.[?(@.id == '1')]
<=获取ID等于“ 1”的元素(可以使用任何值)。
或任何键$.[*].[?(@.hairColor == 'BROWN')]
然后添加.check(jsonPath("$.[*].[?(@.id == '1')]").saveAs("myUser")
另一答案
我自己找到了答案。如果我想保存数组中的任何一个对象,我可以这样做->
private val getUsers = exec(
http("Get users")
.get("/users")
.check(status.is(200))
.check(jsonPath("$[0]").find.saveAs("user")))
当然,我必须指定要保存的值,但是在我的示例中,我要保存第一个值。之后,您可以将此值用于其他请求。
另一答案
如果切换到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
插入所有记录
以上是关于加特林:如何从数组中提取一个对象?的主要内容,如果未能解决你的问题,请参考以下文章