Karate 空手道中的JSON响应验证

Karate 空手道中的JSON响应验证,karate,Karate,我从一个过滤器查询中得到以下响应。由于筛选器应仅返回一个值,因此我正在使用以下内容验证该值: 和match GetDataSet_响应包含{“totalRows”:1} 该过滤器基于Acctid。现在,我需要验证acctID值和整个json模式。在空手道中如何做呢?在模式中,您可以定义 期望值的数据类型,但不知道确切值 为数据编写一个预期条件 定义您已经知道的数据变量或硬编码数据 忽略一些不麻烦的数据 分解JSON并创建多个逻辑模式(从JSON中可以为“colDefs”和“rowData”创建

我从一个过滤器查询中得到以下响应。由于筛选器应仅返回一个值,因此我正在使用以下内容验证该值: 和match GetDataSet_响应包含{“totalRows”:1}


该过滤器基于Acctid。现在,我需要验证acctID值和整个json模式。在空手道中如何做呢?

在模式中,您可以定义

  • 期望值的数据类型,但不知道确切值
  • 为数据编写一个预期条件
  • 定义您已经知道的数据变量或硬编码数据
  • 忽略一些不麻烦的数据
  • 分解JSON并创建多个逻辑模式(从JSON中可以为“colDefs”和“rowData”创建单独的模式)
还有更多用于复杂验证的选项

我不确定您的确切需求,我已尝试创建一个可能适合您需求的模式

  "totalRows": 1,
  "colDefs": [
    {
  "entityAttributeId": "acctNm",
  "headerName": "Account Name",
  "field": "2",
  "entityPath": "",
  "entityId": "account"
},
{
  "entityAttributeId": "acctId",
  "headerName": "Account ID",
  "field": "1",
  "entityPath": "",
  "entityId": "account"
}
],
"rowData": [
{
  "1": "1939",
  "2": "Bay Pond Partners",
  "rowMeta": {
    "account": {
      "acctInstrumentId": "0025-1939",
      "acctId": "1939"
    }
  }
  }
]
}
您可以将模式存储在JSON文件中/直接在脚本中定义它并将其与响应匹配

假设我们将此模式存储在文件
filterResponseSchema.json

YourFilter.feature

{
  "colDefs": [
    {
      "entityAttributeId": "acctNm",
      "entityId": "account",
      "entityPath": "",
      "field": "2",
      "headerName": "Account Name"
    },
    {
      "entityAttributeId": "acctId",
      "entityId": "account",
      "entityPath": "",
      "field": "1",
      "headerName": "Account ID"
    }
  ],
  "rowData": [
    {
      "1": "#string",
      "2": "#string",
      "rowMeta": {
        "account": {
          "acctId": "#(acctID)",
          "acctInstrumentId": "#string"
        }
      }
    }
  ],
  "totalRows": 1
}
注意:

i) 在调用此模式之前,请确保有一个变量名“acctID”,以便karate将该值嵌入到JSON模式中

ii)我对您的“colDefs”值的假设将始终相同,因此我对其进行了硬编码

涵盖了大量的模式验证示例


我建议你阅读这篇文章以获得更多的见解。

我是空手道新手。这个模式看起来很好,但是我如何使用它呢?你可以把它保存在json格式中,在你的特性中定义它,并将它与你的响应匹配在答案中添加一个示例特性谢谢。这对我有用。您能告诉我您在何处或使用了什么工具(如果有)来创建此架构吗。下次它会帮我的。很高兴它成功了:)。我在eclipse中使用了JSON编辑器,并根据您的问题自己编写了它。我没有任何工具可用于此。
* def acctID = "1939"
# call your filter request
* def myFilterSchema = read('filterResponseSchema.json')
* match response == myFilterSchema