我想通过空手道 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,则没有。
通过执行以下操作可以很容易地实现这一点
首先,从您的回复中提取结果
* 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