Karate框架匹配JSON时因数组对象索引顺序不一致匹配失败怎么办
Karate框架数组顺序不敏感匹配解决方案
问题原因
Karate 默认执行数组匹配时会严格校验元素的索引顺序,你的测试用例中response和ScenarioModelResponse的elements数组内两个对象顺序相反,因此会触发索引级别的字段比对失败,报错提示elements[0].externalRefId不匹配符合默认匹配规则的预期。
可选解决方案
- 方案1:使用
contains only单独匹配不要求顺序的数组
拆分匹配逻辑,对顺序不敏感的elements数组用contains only校验(该语法只要求数组包含全部预期元素、无多余元素,不校验顺序),其余字段正常匹配:And match response.modelId == ScenarioModelResponse.modelId And match response.relationships == ScenarioModelResponse.relationships And match response.elements contains only ScenarioModelResponse.elements - 方案2:使用Karate内置的忽略数组顺序修饰符
#[]
直接在整结构匹配时给elements字段添加忽略顺序的标记,一次性完成全量匹配:And match response == { modelId: '#(ScenarioModelResponse.modelId)', relationships: '#(ScenarioModelResponse.relationships)', elements: '#[] #(ScenarioModelResponse.elements)' } - 方案3:提前对数组按固定字段排序后再匹配
用Karate内置的karate.sort方法将两个数组按统一字段排序后再执行原有匹配逻辑,适合需要保留原有contains匹配规则的场景:* def sortedActual = karate.sort(response.elements, 'externalRefId') * def sortedExpected = karate.sort(ScenarioModelResponse.elements, 'externalRefId') * set response.elements = sortedActual * set ScenarioModelResponse.elements = sortedExpected And match response contains ScenarioModelResponse
内容的提问来源于stack exchange,提问作者Virender Kamboj
相关产品推荐
相关产品推荐

