如何使用空手道工具比较包含数组的2个JSON对象

时间:2019-01-10 06:40:27

标签: api testing karate

其中一种使用intuit / karate进行的API测试,

期望的JSON是:{name: hello, config:[{username: abc, password: xyz},{username: qwe, password: tyu}]}

有两种可能的API响应。

第一个可能的实际JSON:{name: hello, config:[{username: qwe, password: tyu},{username: abc, password: xyz}]}

第二种可能的实际JSON:{name: hello, config:[{username: abc, password: xyz},{username: qwe, password: tyu}]}

同样,数组元素的顺序在实际响应中是不同的,因此以下验证响应的方法会随机引发错误。

  • 响应==
  • 响应包含

有时会引发错误: 错误:{实际:response.config [0] .abc,预期:response.config [0] .qwe}

有时会引发错误: 错误:{实际:response.config [0] .qwe,预期:response.config [0] .abc}

请问您提供JSON验证的完全空手道方法,其中整个JSON都忽略包含数组的JSON中的元素序列吗?

1 个答案:

答案 0 :(得分:1)

您需要仔细阅读文档:https://github.com/intuit/karate#contains-short-cuts

* def response1 = {name: 'hello', config:[{username: 'qwe', password: 'tyu'},{username: 'abc', password: 'xyz'}]}
* def response2 = {name: 'hello', config:[{username: 'abc', password: 'xyz'},{username: 'qwe', password: 'tyu'}]}

* def config = [{username: 'qwe', password: 'tyu'},{username: 'abc', password: 'xyz'}]
* match response1 == { name: 'hello', config: '#(config)' }
* match response2 == { name: 'hello', config: '#(^^config)' }