如果数据元素的顺序不同,则空手道匹配失败

时间:2018-10-15 15:31:52

标签: karate

我正在尝试验证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

空手道应该不受数据元素顺序的影响,但是这种情况失败了。这是一个错误还是我忽略了什么?

我知道我可能可以对每个子节点使用“匹配包含”,但是我实际上是在尝试验证更复杂的响应。

在此先感谢您的帮助!

2 个答案:

答案 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[*]

您提到必须验证更复杂的响应,我建议您将其分为逻辑验证步骤并使用适当的验证条件。