如何在Karate框架中基于条件校验API响应的指定字段值
实现方案
Karate 内置了强大的 JSON 结构匹配能力,不需要手动写循环遍历逻辑,直接通过匹配规则即可实现和 Postman 代码等价的校验效果,以下是两种常用实现方式:
方式1:全量匹配数组规则(最推荐)
直接对 details 数组的每个元素定义条件匹配规则,Karate 会自动遍历所有元素校验:
# 以下代码写在请求发送步骤之后,response 为 Karate 自动存储的接口返回JSON对象 * def checkRule = function(item){ var text = item.user.school.name[0].codeable.text if(text == '123S') return item.data.check == 'abc' if(text == '123O') return item.data.check == 'xyz' return true # 其他text值不需要校验时可直接返回true,有其他规则可自行扩展 } * match each response.details == "#? checkRule(_)"
方式2:单独提取对应值校验(适合需要分场景单独断言的情况)
如果需要分别确认123S和123O对应的check值正确,也可以通过JsonPath直接定位对应元素校验,不需要处理数组顺序:
# 提取text为123S的元素的check值,校验等于abc * def check123S = get[0] response.details[?(@.user.school.name[0].codeable.text == '123S')].data.check * match check123S == 'abc' # 提取text为123O的元素的check值,校验等于xyz * def check123O = get[0] response.details[?(@.user.school.name[0].codeable.text == '123O')].data.check * match check123O == 'xyz'
两种写法均和你提供的 Postman 校验逻辑完全等价,天然兼容details数组元素顺序不固定的场景。
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

