空手道匹配两个JSON文件:对象数组,其中包含内部改组的对象数组 [英] Karate match two JSON files: array of objects which contains inner shuffled arrays of object
本文介绍了空手道匹配两个JSON文件:对象数组,其中包含内部改组的对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
任务:
有3个终结点:
First返回请求到其他两个终结点的随机数据。
另外两个终结点使用不同的数据库运行,但使用的数据大致相似。
我需要验证来自一个终结点的响应是否与来自另一个终结点的响应匹配,这两个终结点发送相同的数据,但顺序不同。
例如:
终结点‘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
}
]
}
终结点‘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
]
}
]
}
endpoint A_Response.Items仅包含endpoint B_Response.Items验证失败,因为它认为一个响应的内部array1与另一个响应的array1不匹配,因为数组项的顺序不同。
endpoint A_Response.Items[0].array1仅包含endpoint B_Response.Items[1].array1工作正常,但不是我所需要的。无论排序如何,我都需要比较整个响应。
是否可以将仅包含验证应用于对象数组,该对象数组包含的数组可以具有不同顺序的项?
推荐答案
endpointA_response.items[0].array1 contains only 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
这篇关于空手道匹配两个JSON文件:对象数组,其中包含内部改组的对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文