当前位置: 首页 > 知识库问答 >
问题:

空手道匹配两个JSON文件:对象数组,其中包含对象的内部混排数组

吴凯泽
2023-03-14

任务:

有3个endpoint:

第一个返回请求的随机数据到另外两个endpoint。

另外两个endpoint使用不同的DBs操作,但或多或少使用相似的数据。

我需要验证来自一个endpoint的响应是否匹配来自另一个endpoint的响应,两个endpoint发送相同的数据,但顺序不同。

例如。:

endpoint“A”:

{
  "items": [
    {
      "field1": 111,
      "array1": [
        {
          "field11": 102,
          "field22": 231
        },
        {
          "field11": 103,
          "field22": 231
        },
        {
          "field11": 102,
          "field22": 256
        },
        {
          "field11": 104,
          "field22": 256
        }
      ],
      "field2": 122,
      "array2": [
        1,
        2,
        3
      ]
    },
    {
      "field1": 211,
      "field2": 222,
      "field3": 233
    }
  ]
}

endpoint“B”:

{
  "items": [
    {
      "field1": 211,
      "field2": 222,
      "field3": 233
    },
    {
      "field1": 111,
      "array1": [
        {
          "field11": 104,
          "field22": 256
        },
        {
          "field11": 102,
          "field22": 256
        },
        {
          "field11": 103,
          "field22": 231
        },
        {
          "field11": 102,
          "field22": 231
        }
      ],
      "field2": 222,
      "array2": [
        1,
        2,
        3
      ]
    }
  ]
}

endpointA_response.items仅包含endpointB_response.items验证失败,因为它认为一个响应的内部数组1与另一个响应的数组1不匹配,因为数组项的顺序不同。

endpointA_响应。项[0]。array1仅包含endpointB_响应。项[1]。array1工作正常,但不是我需要的。无论顺序如何,我都需要比较整个响应。

是否有可能应用仅包含验证到对象的数组,其中包含可能具有不同顺序的项的数组?

共有1个答案

邹时铭
2023-03-14

你在正确的轨道上endpointA_response.items[0]. array1只包含endpointB_response.items[1]. array1

无论顺序如何,我都需要比较整个响应。

然后你必须做一些额外的工作。没有魔法。

我建议分类。在空手道1.0中,有一个Karate.sort()API。例如,如果您确定field1的值是唯一标识符

* def expected = karate.sort(responseA, x => x.field1)

然后,希望它能使事情协调一致,以便您可以进行匹配。

阅读此答案了解其他想法:https://stackoverflow.com/a/53120851/143475

 类似资料:
  • 我正在使用空手道JavaAPI处理Json对象。我将创建以下json: 当我尝试,我得到以下错误: json路径语法经过交叉检查是正确的,我可能缺少的任何其他点? 编辑:我正在使用v1。空手道核心1.0

  • 我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果

  • 如何从Jackson在中生成的json响应中排除所有空json对象、数组或空对象的数组? 我正在为一个客户端构建一个Spring Boot REST API。API向数据库发送请求,并且必须生成JSON响应。 DAO层发送本机SQL查询,并以列表形式接收巨大的DB结果。开发人员必须使用索引手动将此结果映射到Java对象(参见下面的代码) SQL查询返回大量空值(这些查询不能修改)。由于这些空值,只

  • 我有以下两个响应,我需要检查(元素的顺序不同)。尝试了不同的事情,但没有任何结果。任何帮助都将不胜感激!

  • 使用intuit/空手道的API测试之一, 预期的JSON是: API响应有两种可能。 第一个可能的实际JSON: 第二种可能的实际JSON: 同样,阵列元素的序列在实际响应中是不同的,因此遵循响应验证的方法随机抛出错误。 和响应== 有时错误被抛出为:错误:{Actual:response.config[0].abc,应为:response.config[0].qwe} 有时会抛出错误:错误:{

  • 我想用包含其他对象的对象验证json响应的json模式。GET/persons/id请求的json响应示例,该请求将发送对象person: GET/人物请求将发送一个包含人物对象的数组。 验证功能示例(Validator.feature): 我不想在这个特性的末尾添加或 我想从我的主要功能调用模式验证功能,如下所示: 验证两个请求的响应。我需要将这个模式放在一个特性或json文件中,以便只有一个地