匹配不在 JSON 响应中的元素

问题描述 投票:0回答:1

我想通过空手道 API 测试检查响应是否不包含 ID 为 33 的条目。

{
"ResultSet Output": [
  {
    "ITEM_DESC": "abc",
    "ITEM_ID": 11,
  },
  {
    "ITEM_DESC": "xyz",
    "ITEM_ID": 47,
  }
],
"StatusCode": 200,
"StatusDescription": ""
}

但是响应也可能是“空的”,例如:

{
"ResultSet Output": [],
"StatusCode": 200,
"StatusDescription": ""
}

我尝试过:

Scenario: not in response
Given path "/api/warehouse/get"
When method Post
Then status 200
* match response not contains deep { "ITEM_ID": '33' }

但这不起作用。我需要确保“ITEM_ID”不在响应中,或者如果存在,则如果包含 33,则没有。

json api karate
1个回答
0
投票

通过执行以下操作可以很容易地实现这一点

首先,从您的回复中提取结果

    * def items = response['ResultSet Output']

接下来过滤项目数组以查找任何 item_id 等于 33 的位置

    * def filtered = items.filter(x => x.ITEM_ID == '33')

最后使用assert断言过滤后的数组包含0个item_id == 33的匹配项

    * assert filtered.length == 0

加在一起就是

Scenario: not in response
Given path "/api/warehouse/get"
When method Post
Then status 200
* def items = response['ResultSet Output']
* def filtered = items.filter(x => x.ITEM_ID == '33')
* assert filtered.length == 0
© www.soinside.com 2019 - 2024. All rights reserved.