空手道DSL不会按顺序返回响应

时间:2018-12-23 14:09:29

标签: karate web-api-testing

假设我有一个GET端点,结果如下所示

[
  {
    "id": 42,
    "studentName": "John",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS2",
    "year": 2019
  },
  {
    "id": 41,
    "studentName": "John",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS1",
    "year": 2019
  },
  {
    "id": 1,
    "studentName": "Tom",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS2",
    "year": 2019
  }
]

响应不会以基于ID或名称的顺序返回...。因此,在执行匹配以将其与数据库中相应查询的结果进行比较时,它变为“ FAILED”。尝试使用诸如Postman之类的工具来检查顺序,该顺序遵循“ id”并且与自然SQL查询相同。

此外,请遵循并自定义js函数'sort-array.feature'来对响应进行排序,但是响应类型是数组;因此,它不起作用。

我想知道我们如何根据配置的值(例如:id)或默认值(例如,“名称”)来处理响应的顺序,或者采用任何方法比较响应结果API端点(实际结果)到查询结果(预期结果)

非常感谢您。

1 个答案:

答案 0 :(得分:0)

请阅读文档和示例,尤其要注意contains。我在下面提供一个示例,剩下的就是您要做的作业(特别是因为您非常喜欢Postman:P)。将其粘贴到新的场景中,然后查看其工作情况。

* def response =
"""
[
  {
    "id": 42,
    "studentName": "John",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS2",
    "year": 2019
  },
  {
    "id": 41,
    "studentName": "John",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS1",
    "year": 2019
  },
  {
    "id": 1,
    "studentName": "Tom",
    "alternateName1": "",
    "alternateName2": "",
    "code": "NS2",
    "year": 2019
  }
]
"""
* match response[*].id contains only [1, 41, 42]

空手道允许您以多种方式创建甚至转换JSON,因此您几乎可以进行任何比较。