我正在尝试验证Xml响应,其中一个父元素具有多个子元素,这些子元素具有相同的标签,但文本内容不同,如下所示:
Scenario: test
Given def expectation = <parent><child>1</child><child>2</child</parent>
And def reality = <parent><child>2</child><child>1</child></parent>
Then match reality == expectation
空手道应该不受数据元素顺序的影响,但是这种情况失败了。这是一个错误还是我忽略了什么?
我知道我可能可以对每个子节点使用“匹配包含”,但是我实际上是在尝试验证更复杂的响应。
在此先感谢您的帮助!
答案 0 :(得分:2)
好吧,如果将XML转换为JSON,也许可以更好地解释这一点:
* json expect = expectation
* print json
哪个给你:
{
"parent": {
"child": [
"1",
"2"
]
}
}
另一个json是:
{
"parent": {
"child": [
"2",
"1"
]
}
}
因此,您认为问题是对的,它们不相等,因此必须进入contains
等所有内容。
Then match expectation/parent/child contains $reality/parent/child
如果您的XML相对没有属性复杂性,那么在转换为JSON时您可能会做一些疯狂的事情:
* def children = ['1', '2']
* def expected = { parent: { child: '#(^^children)' } }
* json actual = reality
* match actual == expected
答案 1 :(得分:1)
我认为,如果必须正确匹配数据数组,则应提供该数组的父节点(可以是任意顺序)作为匹配的输入。
Then match reality.parent[*] == expectation.parent[*]
您提到必须验证更复杂的响应,我建议您将其分为逻辑验证步骤并使用适当的验证条件。