如何使用Karate遍历JSON数组并校验每个对象的键长度
在Karate中遍历JSON数组校验每个对象的键数量
你的问题出在karate.keysOf()的使用场景上:它仅对单个JSON对象生效,而你传入的res是整个products数组,对数组调用自然返回null。要校验数组中每个对象的键数量,需要遍历数组并对每个对象单独处理,以下是两种可行方案:
方案1:用match each直接断言(推荐)
这是Karate中最简洁的断言方式,直接对数组中每个元素做校验:
# 假设接口返回的JSON已存在于response变量中 * match each response.products == '#(karate.sizeOf(karate.keysOf(_)) == 2)'
如果需要同时校验键的名称和类型,也可以更明确地写:
* match each response.products == { code: '#string', name: '#string' }
这种写法既校验了键的数量,也确保了键名和值的类型符合预期。
方案2:用karate.forEach手动遍历校验
如果需要在遍历过程中做额外操作(比如打印日志),可以用循环处理:
* def productsList = response.products * karate.forEach(productsList, function(item) { # 获取当前对象的所有键 * def itemKeys = karate.keysOf(item) # 断言键数量为2 * assert karate.sizeOf(itemKeys) == 2 # 可选:打印当前对象的键信息 * print "当前对象的键:", itemKeys, ",数量:", karate.sizeOf(itemKeys) })
补充说明
- 你之前用的
get $..products.[*]可以简化为直接引用response.products(如果是接口返回的响应),无需额外的get操作。 karate.sizeOf()对数组返回的是数组长度,对键集合返回的是键的数量,这是它的正常行为,你之前的用法是传入了数组,所以得到的是数组总长度。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

