如何在Karate中匹配含可选嵌套JSON对象的响应?
Karate中实现可选键的JSON Schema匹配方案
Karate完全支持你需要的「可选键+统一子结构」匹配场景,当前报错是因为使用了严格相等断言==,它要求schema中定义的所有键必须在实际响应中存在。以下两种方案可以解决问题:
方法一:给可选键添加?标记
在schema的键名前加?,可直接标记该键为可选——实际响应中该键可存在或不存在,只要存在时子结构符合定义即可。修改后的代码如下:
Scenario: * def schema_optional = """ { "a": ##string, "b": ##number } """ * def schema = """ { "?c": ##(schema_optional), "?d": ##(schema_optional), "?e": ##(schema_optional) } """ * def result = """ { "d": { "a": "hi", "b": 19 } } """ * match result == schema
这种方式适合精确控制单个键的可选性,比如混合必填键和可选键的场景。
方法二:使用contains only断言
如果你的需求是确保实际响应的所有键都在schema定义范围内(无额外键),且存在的键结构符合要求,可以用contains only替换==断言,无需修改原schema:
Scenario: * def schema_optional = """ { "a": ##string, "b": ##number } """ * def schema = """ { "c": ##(schema_optional), "d": ##(schema_optional), "e": ##(schema_optional) } """ * def result = """ { "d": { "a": "hi", "b": 19 } } """ * match result contains only schema
contains only会验证:实际对象的所有键都属于schema定义的键,且对应值的结构完全匹配,不强制要求schema的所有键都存在。
内容的提问来源于stack exchange,提问作者Claire C
相关产品推荐
相关产品推荐

