我是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
插入所有记录