当前位置: 首页 > 知识库问答 >
问题:

空手道:我可以迭代Json数组响应并执行一些条件语句吗

袁羽
2023-03-14

我的json数组响应如下:

response = [
{
"ID": "123",
"Name":"Test1",
"Data":{
      "Status":"Red",
      "Message":"user not valid",
      "Code": "ERROR-P1"
      }
},
{
"ID": "143",
"Name":"Test2",
"Data":{
      "Status":"Amber",
      "Message":"user data missing",
      "Code": "ERROR-P2"
      }
},
{
"ID": "133",
"Name":"Test3",
"Data":{
      "Status":"Green",
      "Message":"",
      "Code": ""
      }
}

json数组中可能有更多具有相同数据和状态的条目。我的用例是检查,条件是如果我的json数组的状态为Red或Amber,则消息和代码不为空,同样,如果我的状态为Green,则消息和代码为空。我需要迭代到整个数组并验证此场景。还需要从Array Json响应中获取状态计数:Red、Amber和Greens。空手道的最佳解决方案可能是什么?任何帮助都将不胜感激。谢谢

共有1个答案

裴昊阳
2023-03-14

干得好:

* def red = []
* def amber = []
* def green = []
* def fun = 
"""
function(x){ 
  if (x.Data.Status == 'Red') karate.appendTo(red, x);
  if (x.Data.Status == 'Amber') karate.appendTo(amber, x);
  if (x.Data.Status == 'Green') karate.appendTo(green, x);
}
"""
* karate.forEach(response, fun)
* assert red.length == 1
* match each red..Message == 'user not valid'
* match each amber contains { Data: { Status: 'Amber', Message: 'user data missing', Code: 'ERROR-P2' } }
 类似资料:
  • 下面是我在点击特定Web服务时收到的JSON响应: 我不知道哪个索引有我的期望值(我需要在确定哪个具有)后验证多个值),这是动态的。不希望使用硬编码值。并匹配,因为这将在下次更改。 对此我有两个问题: 如何将响应传递给java代码并获取具有的数组索引,以便使用此索引进行验证? 下面的代码不起作用。

  • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?

  • 我正试图针对一些案例运行一个简单的测试。我在Windows上使用VS代码,带有空手道扩展和独立空手道。罐子 以下是我的特色: Json有点像 这一切都很好,直到案例数量达到300个左右,在执行结束时就会冻结,并且永远不会在控制台中生成摘要。 对于较小的数字,它可以正常工作,并且摘要总是指示,如果API在~1秒内响应,那么经过的时间也支持这一点。 我的问题是,把冻结放在一边,我可以使用独立JAR并行

  • 我试图为下面的响应编写JSON模式。响应是动态的它可以是细节或细节。如果响应中的是,那么响应将包含人对象(组织对象将不可用)。如果是,组织详细信息将包含在响应中(人对象将不可用)。下面给出了两种不同的预期反应 我试图使用下面给出的模式使上述条件有效 我目前面临的问题是,如果响应中的是,它会抛出以下错误 是否有任何方法可以在模式中指定,如果person对象可用,则organization对象将不可用

  • 我只是想知道如何进行条件模式验证。API响应是基于键的动态响应。如果是,那么,人的详细信息将被包括,如果是组织的详细信息将被包括在JSON响应中。所以响应可以是以下任何一种形式 我为验证上述2个场景而创建的架构如下 但是架构与实际响应不匹配。我应该对架构进行哪些更改才能使其工作?

  • 我尝试运行一些测试,如果测试成功,则需要在每个场景结束时调用“”文件,但如果测试失败,则不应调用“”文件。 我测试结果如下所示: 如果响应代码为,则应运行命令“”,如果为,则应跳过此命令。 有人能帮我一下吗?