Gatling:如何从数组中提取一个对象?
Gatling: How to extract one object from array?
我是 Gatling 和 Scala 的新手。发送 Get Request 响应主体是 Array,我只需要从 Array 中提取一个对象并在 Gatling 中 post 它。谁能告诉我怎么做?
这是我的代码示例:
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 和 post 整个 User 对象?
你可以轻松获取,但你需要定义哪个键
我用 'id' 键的例子
$.[*].[?(@.id == '1')]
$.[*]
<= 获取数组的所有元素
.[?(@.id == '1')]
<= 获取 id 等于 '1' 的元素(您可以使用任何值)。
或任意键$.[*].[?(@.hairColor == 'BROWN')]
然后只需添加
.check(jsonPath("$.[*].[?(@.id == '1')]").saveAs("myUser")
如果你切换到 jsonPath 检查,你可以将所有用户对象放入一个 Vector 中,它在 Gatling EL 中有一些很好的支持
所以而不是
.check(bodyString.saveAs("Users"))
你可以使用
.check(jsonPath("$..[?(@.id)]").findAll.saveAs("Users")))
然后当你来打后续电话时,你可以做类似
的事情
select第一个用户
.body(StringBody("${Body(1).jsonStringify()}"))
select 一个随机用户
.body(StringBody("${Body.random().jsonStringify()}"))
这种方法还允许您使用.forEach
对所有记录进行交互
我自己找到了答案。如果我想从数组中保存任何一个对象,我可以这样做 ->
private val getUsers = exec(
http("Get users")
.get("/users")
.check(status.is(200))
.check(jsonPath("$[0]").find.saveAs("user")))
当然,我必须指定要保存的值,但在我的示例中,我保存的是第一个值。稍后您可以将此值用于其他请求。
我是 Gatling 和 Scala 的新手。发送 Get Request 响应主体是 Array,我只需要从 Array 中提取一个对象并在 Gatling 中 post 它。谁能告诉我怎么做?
这是我的代码示例:
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 和 post 整个 User 对象?
你可以轻松获取,但你需要定义哪个键
我用 'id' 键的例子
$.[*].[?(@.id == '1')]
$.[*]
<= 获取数组的所有元素
.[?(@.id == '1')]
<= 获取 id 等于 '1' 的元素(您可以使用任何值)。
或任意键$.[*].[?(@.hairColor == 'BROWN')]
然后只需添加
.check(jsonPath("$.[*].[?(@.id == '1')]").saveAs("myUser")
如果你切换到 jsonPath 检查,你可以将所有用户对象放入一个 Vector 中,它在 Gatling EL 中有一些很好的支持
所以而不是
.check(bodyString.saveAs("Users"))
你可以使用
.check(jsonPath("$..[?(@.id)]").findAll.saveAs("Users")))
然后当你来打后续电话时,你可以做类似
的事情select第一个用户
.body(StringBody("${Body(1).jsonStringify()}"))
select 一个随机用户
.body(StringBody("${Body.random().jsonStringify()}"))
这种方法还允许您使用.forEach
对所有记录进行交互
我自己找到了答案。如果我想从数组中保存任何一个对象,我可以这样做 ->
private val getUsers = exec(
http("Get users")
.get("/users")
.check(status.is(200))
.check(jsonPath("$[0]").find.saveAs("user")))
当然,我必须指定要保存的值,但在我的示例中,我保存的是第一个值。稍后您可以将此值用于其他请求。