加特林检查数组中的每个值

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"
    }
  ]
}