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

空手道-验证存储在不同文件中的json响应

司迪
2023-03-14

我需要验证存储在两个不同文件中的2个json响应。我正在阅读它们并进行比较。但是我得到一个错误的原因:所有的键值不匹配和有几个元素不匹配。只有当我将json存储在文件中并在我的功能文件中读取时,才会出现此问题。

Json文件1:Test.Json

{
   "webServiceDetail":{
      "feature":{
         "featureCd":"ABCD",
         "imaginaryInd":"100.0",
         "extraInd1":"someRandomValue1"
      },
      "includefeatureList":[
         {
            "featureCd":"PQRS",
            "featureName":"Checking SecondAddOn Service",
            "extraInd1":"someRandomValue1",
            "extraInd2":"someRandomValue1"
         },
         {
            "featureCd":"XYZ",
            "featureName":"Checking AddOn Service",
            "imaginaryInd":"50.0"
         }
      ]
   }
}

Json文件2:Test1.Json

{
   "webServiceSummary":{
      "service":{
         "serviceCd":"ABCD"
      },
      "includeServicesList":[
         {
            "serviceCd":"XYZ",
            "serviceDescription": "Checking AddOn Service"
         },
         {
            "serviceCd":"PQRS",
            "serviceDescription":"Checking SecondAddOn Service"
         }
      ]
   }
}

现在,我使用下面的代码来匹配两个json文件。

* def Test = read('classpath:PP1/data/Test.json')
* def Test1 = read('classpath:PP1/data/Test1.json')

* def feature = Test.webServiceDetail.feature
* set expected.webServiceSummary.service
| path               | value                |
| serviceCd          | feature.featureCd    |

* def mapper = function(x){ return { serviceCd: x.featureCd, serviceDescription: x.featureName} }
* def expectedList = karate.map(Test.webServiceDetail.includefeatureList, mapper)
* set expected.webServiceSummary.includeServicesList = expectedList
* print expected
* print Test1
* match Test1 == expected

下面是错误响应。

com.intuit.karate.exception.KarateException: Test.feature:35 - path: $, actual: {webServiceSummary={service={serviceCd=ABCD}, includeServicesList=[{"serviceCd":"XYZ","serviceDescription":"Checking AddOn Service"},{"serviceCd":"PQRS","serviceDescription":"Checking SecondAddOn Service"}]}}, expected: {webServiceSummary={service={serviceCd=ABCD}, includeServicesList=[[object Object], [object Object]]}}, reason: all key-values did not match

共有1个答案

宫俊才
2023-03-14

很接近,但includeDeviceList的顺序不匹配。做一个改变:

* set expected.webServiceSummary.includeServicesList = '#(^^expectedList)'
 类似资料:
  • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?

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

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

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

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

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