【问题标题】:How to compare 2 JSON objects containing array using Karate tool [duplicate]如何使用空手道工具比较包含数组的 2 个 JSON 对象[重复]
【发布时间】:2019-06-04 23:54:33
【问题描述】:

使用 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 中的元素序列?

【问题讨论】:

    标签: api testing karate


    【解决方案1】:

    解决办法如下:

    * 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)' }
    

    【讨论】:

    • 如果响应 API 返回的结果与 response1 或 response2 完全相同,则上述答案有效。
    • @NageshPathrut 没有。最后一行对两者都有效。你读过文档吗?
    • config: '#(^^config)' 也会验证数组中单个元素的数据吗?我必须测试数组元素是否存在以及是否存在,那么它的数据是否与数组的预期元素之一匹配。
    • 还请解释您的答案,而不仅仅是指向文档。
    • 您可以留下文档链接,但链接本身并不是答案(就像您说的,答案可能会过时,但链接也会消失)。您不必跟踪所有答案并对其进行更新,这是社区的责任……但是在发布答案时本身应该是好的,即包含对寻求答案的人的解释。地狱,我已经阅读了很多文档,但我仍然在这里找到了很多答案。但这已经足够了:-P。无论哪种方式:感谢伟大的框架。
    猜你喜欢
    • 2019-02-14
    • 2019-12-21
    • 2011-05-26
    • 2020-11-19
    • 2020-10-31
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多