加特林检查数组中的每个值
Gatling check every value in array
我正在编写加特林测试并使用 JSONPath $..parentId
。
我收到回复:
[
"102044",
"102044",
"102044"
]
我想检查每个值是否都等于 102044
。值的数量可以改变。
到目前为止,我只检查随机一个:
@Then("then is successful")
override def thenStep(): Seq[HttpCheck] = {
var checks = List[HttpCheck]()
checks ::= status.is(session => 200)
checks ::= jsonPath("$..totalElements").ofType[Int].gt(8)
checks ::= jsonPath("$..totalElements").ofType[Int].lt(15)
checks ::= jsonPath("$.data[*].parentId").findRandom.is("102044")
checks
}
我试着保存值的数量并用它做一些事情,就像这样:
checks ::= jsonPath("$..totalElements").ofType[Int].saveAs("all")
checks ::= jsonPath("$.data[*].parentId").findAll.is(Seq.fill(s"$all")("102044"))
但这不起作用。
有没有简单的解决办法?
这个问题类似于:In Gatling, how to iterate json array in .check to validate all values
使用 JMESPath,您应该能够做的是:
totalElements
找到你JSON的totalElements
属性。
和
length(data[?parentId != '102044'])
查找是否有 parentId
不是 102044
的元素。
所以,你的断言最终是:
checks ::= jmesPath("totalElements").ofInt().gt(8)
checks ::= jmesPath("totalElements").ofInt().lt(15)
checks ::= jmesPath("length(data[?parentId != '102044'])").ofInt().is(0)
所有这些都是基于这样的假设,即您的输入类似于您在 :
中提供的内容
{
"pageable": {
"currentPage": 1,
"totalPages": 1,
"pageSize": 20,
"last": true,
"first": true
},
"sort": {
"orders": [],
"sorted": false,
"unsorted": true,
"empty": true
},
"totalElements": 6,
"data": [
{
"id": 1,
"roleName": "test1",
"userCount": 5,
"parentId": "102044"
},
{
"id": 2,
"roleName": "test2",
"userCount": 5,
"parentId": "102045"
}
]
}
我正在编写加特林测试并使用 JSONPath $..parentId
。
我收到回复:
[
"102044",
"102044",
"102044"
]
我想检查每个值是否都等于 102044
。值的数量可以改变。
到目前为止,我只检查随机一个:
@Then("then is successful")
override def thenStep(): Seq[HttpCheck] = {
var checks = List[HttpCheck]()
checks ::= status.is(session => 200)
checks ::= jsonPath("$..totalElements").ofType[Int].gt(8)
checks ::= jsonPath("$..totalElements").ofType[Int].lt(15)
checks ::= jsonPath("$.data[*].parentId").findRandom.is("102044")
checks
}
我试着保存值的数量并用它做一些事情,就像这样:
checks ::= jsonPath("$..totalElements").ofType[Int].saveAs("all")
checks ::= jsonPath("$.data[*].parentId").findAll.is(Seq.fill(s"$all")("102044"))
但这不起作用。
有没有简单的解决办法?
这个问题类似于:In Gatling, how to iterate json array in .check to validate all values
使用 JMESPath,您应该能够做的是:
totalElements
找到你JSON的totalElements
属性。
和
length(data[?parentId != '102044'])
查找是否有 parentId
不是 102044
的元素。
所以,你的断言最终是:
checks ::= jmesPath("totalElements").ofInt().gt(8)
checks ::= jmesPath("totalElements").ofInt().lt(15)
checks ::= jmesPath("length(data[?parentId != '102044'])").ofInt().is(0)
所有这些都是基于这样的假设,即您的输入类似于您在
{
"pageable": {
"currentPage": 1,
"totalPages": 1,
"pageSize": 20,
"last": true,
"first": true
},
"sort": {
"orders": [],
"sorted": false,
"unsorted": true,
"empty": true
},
"totalElements": 6,
"data": [
{
"id": 1,
"roleName": "test1",
"userCount": 5,
"parentId": "102044"
},
{
"id": 2,
"roleName": "test2",
"userCount": 5,
"parentId": "102045"
}
]
}