空手道 DSL 没有 return 订单中的响应

Karate-DSL doesn't return the response in an order

假设我有一个 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
  }
]

响应没有 return 基于 ID 或名称的顺序....因此,当执行匹配以将其与数据库中相应查询的结果进行比较时,它变成 "FAILED".尝试一些像 Postman 这样的工具来检查顺序,它遵循 "id" 并且与自然的 SQL 查询相同。

另外,按照自定义js函数'sort-array.feature'对response进行排序,但是response类型是数组;因此,它不起作用。

我想知道我们如何处理基于配置值(如:id)或默认值(如 "name")的响应顺序,如我的情况,或任何比较方法API 端点的结果(实际结果)到查询结果(预期结果)

非常感谢。

请阅读文档和示例,尤其要注意 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,因此您几乎可以进行任何想要的比较。