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

用空手道验证JSON响应

袁晟
2023-03-14

我一直在验证下面的回答。

当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。

    My Response is: {
      "response": [
        {
          "tagName": "CaseTag",
          "value": "CaseTagMckAuto_TagValueOne",
          "entityType": "Case",
          "partitionId": 1,
          "appId": 1,
          "id": 46,
          "tagId": 1,
          "entityId": 1
        },
        {
          "tagName": "CaseTag",
          "value": "CaseTagMckAuto_TagValue",
          "entityType": "Case",
          "partitionId": 1,
          "appId": 1,
          "id": 45,
          "tagId": 1,
          "entityId": 1
        }
      ]
    }

我试过:

And match response[0].tagName contains ['CaseTag']


Then match each res contains
    ...
           {
              {tagName: 'CaseTag', value: 'CaseTagMckAuto_TagValueOne', 
               entityType: 'Case', partitionId: 1, appId: 1,id: 46, 
               tagId: 1, entityId:1}
           }
    ...

And match response[0] == {tagName: 'CaseTag', value: 
      'CaseTagMckAuto_TagValueOne', entityType: 'Case', partitionId: 1, 
       appId: 1,id: 46, tagId: 1, entityId:1}

All three statements fails json it is not valid json array when i try giving

And match response == {tagName: 'CaseTag', value: 
      'CaseTagMckAuto_TagValueOne', entityType: 'Case', partitionId: 1, 
       appId: 1,id: 46, tagId: 1, entityId:1}        

它说它不是字符串。你能帮我确认一下这个请求吗?

共有1个答案

闻人飞翼
2023-03-14

看来你对筑巢感到困惑了。这是一个适用于我的示例,只需将其粘贴到功能文件中,无需HTTP:

* def response = 
"""
[
   {
      "tagName":"CaseTag",
      "value":"CaseTagMckAuto_TagValueOne",
      "entityType":"Case",
      "partitionId":1,
      "appId":1,
      "id":46,
      "tagId":1,
      "entityId":1
   },
   {
      "tagName":"CaseTag",
      "value":"CaseTagMckAuto_TagValue",
      "entityType":"Case",
      "partitionId":1,
      "appId":1,
      "id":45,
      "tagId":1,
      "entityId":1
   }
]
"""
* match response == '#[2]'
* match response[0].tagName == 'CaseTag'
* match each response == { tagName: 'CaseTag', value: '#string', entityType: 'Case', partitionId: 1, appId: 1, id: '#number', tagId: 1, entityId: 1 }
* match each response contains { tagName: 'CaseTag', entityType: 'Case', partitionId: 1, appId: 1, tagId: 1, entityId: 1 }

查看JSON中如何包含响应。如果确实如此,请在使用匹配之前执行此操作,使其与上面的操作类似:

* def response = response.response

 类似资料:
  • 我试图验证非json格式的错误响应体。我尝试了使用模式以及使用包含匹配的关键字。这对我不起作用。 在post调用中观察到多个匹配时从API返回的实际响应: 我的空手道特点: 尝试*匹配实际的[0] == '#(^partSchema)'也从https://gist.github.com/ptrthomas/2a1e30bcb4d782279019b3d5c10b3ed1。不工作

  • 我正在使用空手道验证GET请求的整个json响应。 下面是来自请求的json响应示例(我只为items显示了两个元素) 以下是我试图验证的方式: 但是,我得到了一个断言错误:

  • 我需要验证一个JSON响应(如下所示),并检查JSON数组中是否有任何一个项的日期为createdDate。 “createdDate”实际上是作为时间戳返回的,但我没有实际值。我唯一需要验证的是今天的日期。项目的顺序也不保证。我查看了https://intuit.github.io/karate/指定的javascript宏,但它没有我正在尝试做的示例。请让我知道任何建议。

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

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

  • 下面是我在点击特定Web服务时收到的JSON响应: 我不知道哪个索引有我的期望值(我需要在确定哪个具有)后验证多个值),这是动态的。不希望使用硬编码值。并匹配,因为这将在下次更改。 对此我有两个问题: 如何将响应传递给java代码并获取具有的数组索引,以便使用此索引进行验证? 下面的代码不起作用。