当数组内的数据动态变化时如何在空手道中匹配数组内的数组
How to match array inside array in karate when data inside array is dynamically changes
这是我用来验证的代码行:
And match response.modelGroups contains only ExpectedResonse.modelGroups
实际 response.modelGroups:
[
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 1,
"id": 1,
"name": "Revenue",
"templateModels": [
{
"description": "TBA",
"displayOrder": 1,
"id": 1,
"name": "Residential Revenue",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 2,
"id": 2,
"name": "Other Revenue",
"useTenureType": "TBA"
}
]
},
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 2,
"id": 2,
"name": "Cost",
"templateModels": [
{
"description": "TBA",
"displayOrder": 3,
"id": 3,
"name": "Operating Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 4,
"id": 4,
"name": "Development Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 5,
"id": 5,
"name": "Land & Infrastructure Cost",
"useTenureType": "TBA"
}
]
}
]
预计 response.modelGroups:
[
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 1,
"id": 1,
"name": "Revenue",
"templateModels": [
{
"description": "TBA",
"displayOrder": 2,
"id": 2,
"name": "Other Revenue",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 1,
"id": 1,
"name": "Residential Revenue",
"useTenureType": "TBA"
}
]
},
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 2,
"id": 2,
"name": "Cost",
"templateModels": [
{
"description": "TBA",
"displayOrder": 3,
"id": 3,
"name": "Operating Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 4,
"id": 4,
"name": "Development Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 5,
"id": 5,
"name": "Land & Infrastructure Cost",
"useTenureType": "TBA"
}
]
}
]
验证后异常:
匹配失败:CONTAINS_ONLY
$[0].templateModels[0].name | not equal (STRING:STRING)
'Residential Revenue'
'Other Revenue'
当 json 包含数组的数组并且这些数组的数据和大小正在动态更改时,我不明白如何验证它。
使用contains deep
:
* def expected =
"""
[
{
"id": 1,
"data": [
{
"name": "a"
},
{
"name": "b"
}
]
},
{
"id": 2,
"data": [
{
"name": "c"
},
{
"name": "d"
},
{
"name": "e"
}
]
}
]
"""
* def response =
"""
[
{
"id": 2,
"data": [
{
"name": "e"
},
{
"name": "d"
},
{
"name": "c"
}
]
},
{
"id": 1,
"data": [
{
"name": "b"
},
{
"name": "a"
}
]
}
]
"""
* match response contains deep expected
是的,没有 contains only deep
,但欢迎您将该代码贡献给空手道 :)
但说真的,那种极端的检查是不需要的。如果您确实需要验证 contains only
,请部分验证:
* def ids = $expected[*].id
* match response[*].id contains only ids
这是我用来验证的代码行:
And match response.modelGroups contains only ExpectedResonse.modelGroups
实际 response.modelGroups:
[
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 1,
"id": 1,
"name": "Revenue",
"templateModels": [
{
"description": "TBA",
"displayOrder": 1,
"id": 1,
"name": "Residential Revenue",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 2,
"id": 2,
"name": "Other Revenue",
"useTenureType": "TBA"
}
]
},
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 2,
"id": 2,
"name": "Cost",
"templateModels": [
{
"description": "TBA",
"displayOrder": 3,
"id": 3,
"name": "Operating Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 4,
"id": 4,
"name": "Development Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 5,
"id": 5,
"name": "Land & Infrastructure Cost",
"useTenureType": "TBA"
}
]
}
]
预计 response.modelGroups:
[
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 1,
"id": 1,
"name": "Revenue",
"templateModels": [
{
"description": "TBA",
"displayOrder": 2,
"id": 2,
"name": "Other Revenue",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 1,
"id": 1,
"name": "Residential Revenue",
"useTenureType": "TBA"
}
]
},
{
"defaultEscalationRate": 5,
"description": "sample description",
"displayOrder": 2,
"id": 2,
"name": "Cost",
"templateModels": [
{
"description": "TBA",
"displayOrder": 3,
"id": 3,
"name": "Operating Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 4,
"id": 4,
"name": "Development Cost",
"useTenureType": "TBA"
},
{
"description": "TBA",
"displayOrder": 5,
"id": 5,
"name": "Land & Infrastructure Cost",
"useTenureType": "TBA"
}
]
}
]
验证后异常: 匹配失败:CONTAINS_ONLY
$[0].templateModels[0].name | not equal (STRING:STRING)
'Residential Revenue'
'Other Revenue'
当 json 包含数组的数组并且这些数组的数据和大小正在动态更改时,我不明白如何验证它。
使用contains deep
:
* def expected =
"""
[
{
"id": 1,
"data": [
{
"name": "a"
},
{
"name": "b"
}
]
},
{
"id": 2,
"data": [
{
"name": "c"
},
{
"name": "d"
},
{
"name": "e"
}
]
}
]
"""
* def response =
"""
[
{
"id": 2,
"data": [
{
"name": "e"
},
{
"name": "d"
},
{
"name": "c"
}
]
},
{
"id": 1,
"data": [
{
"name": "b"
},
{
"name": "a"
}
]
}
]
"""
* match response contains deep expected
是的,没有 contains only deep
,但欢迎您将该代码贡献给空手道 :)
但说真的,那种极端的检查是不需要的。如果您确实需要验证 contains only
,请部分验证:
* def ids = $expected[*].id
* match response[*].id contains only ids