如何在Karate中实现JSON响应匹配多个JSON Schema文件?
Karate多Schema任意匹配解决方案
方法1:用#or表达式直接实现
Karate的match断言支持#or逻辑运算符,直接把多个Schema用#or包裹,就能实现"匹配任意一个即可通过"的需求。把你原来的最后一行代码替换成:
Then match sub_widget[*] contains #or(read('../data/in/sub_navigation_widget.json'), read('../data/in/sub_navigation_widget_more.json'))
方法2:自定义脚本检查(更灵活)
如果第一种方式不符合你的场景,还可以通过自定义逻辑遍历数组,验证是否存在至少一个元素匹配任意一个Schema:
Then def schema1 = read('../data/in/sub_navigation_widget.json') And def schema2 = read('../data/in/sub_navigation_widget_more.json') And def hasValidItem = sub_widget.some(item => karate.match(item, schema1).pass || karate.match(item, schema2).pass) Then match hasValidItem == true
这里用数组的some方法遍历元素,只要有一个元素匹配其中一个Schema,hasValidItem就会返回true,最后断言这个值为true即可。
方法3:针对每个元素做任意匹配
如果需要确保数组里的每个元素都匹配两个Schema中的任意一个,可以用match each结合#or:
Then def schema1 = read('../data/in/sub_navigation_widget.json') And def schema2 = read('../data/in/sub_navigation_widget_more.json') Then match each sub_widget == #or(schema1, schema2)
内容的提问来源于stack exchange,提问作者Achintya Kumar
相关产品推荐
相关产品推荐

