空手道:在一种情况下验证 json 和数组的键时出现问题

karate: getting issues validating keys for json & array in one scenario

我正在使用空手道进行 API 测试,我目前的要求是我只需要编写一个场景并处理两个响应作为其中的一部分。 我的意思是我的回应有时 return 是一个 json 对象,有时 return 是一个 json 对象数组。

例如: 第一次执行端点 Returns 响应 --

{ 
  "id": 123,
  "Name: "mytest",
  "Loc: "United States"
}

并且在下一次执行期间,相同的端点Returns响应--

[
  { 
    "id": 123,
    "Name: "mytest",
    "Loc: "United States"
  },
  { 
    "id": 456,
    "Name: "mytest1",
    "Loc: "United Kingdom"
  }
]

我的用例是比较可用的键应该是['id','name','Loc']

最初它只是 returning a json 所以我使用 karate.keysOf(response) 并且它工作正常。 现在我需要在一个场景中处理我的两个用例,因为它可以 return 一个 json 或一个 json 数组,我需要检查存在的键——如果 json然后只检查一次,如果是数组,则检查数组中的所有 json 个对象。 我知道有办法单独做,但不确定这是否可以合并到一个用例中 有没有一种方法可以使 responseType 成为 json 或数组,并编写两个带有条件的单独代码或可以处理我的用例的任何方式。

如有任何帮助,我们将不胜感激。 提前谢谢你。

您可以使用架构处理此问题,

# schmea for single json object
* def schema = {'id':'#present', 'Name' : '#present', 'Loc' : "#present"}

# determine if it an Json Array or object and set expected schema
* def expectedSchema = (karate.match(response, "#array").pass) ? "#[] schema" : schema

* match response == expectedSchema