如何在响应中嵌套 JSON 时使用匹配包含验证 JSON 键的子集

How to validate Sub-Sets of JSON Keys using match contains when there are nested JSON's in the response

从回复中,我提取了这样一个子集。

{
  "base": {
    "first": {
      "code": "1",
      "description": "Its First"
    },
    "second": {
      "code": "2",
      "description": "Its Second"
    },
    "default": {
      "last": {
        "code": "last",
        "description": "No"
      }
    }
  }
}

如果我需要使用 进行单个验证并匹配 X 包含 以检查

  1. 首先里面的代码是 1
  2. default-last 里面的代码是最后一个?

我没有对每个验证都使用 json 路径,而是尝试提取特定部分并对其进行验证。如果没有嵌套的 json 路径,我可以很容易地使用 和匹配 X 包含 ,但是当有嵌套的 jsons 时,我不能去做。

这对你有用吗:

* def first = get[0] response..first
* match first.code == '1'
* def last = get[0] response..default.last
* match last.code == 'last'

编辑:好的看起来你想尽可能地压缩成一行,更重要的是能够在嵌套节点中做 contains。就我个人而言,有时我觉得这不值得麻烦,但这里是。

另请参阅这些快捷方式:https://github.com/intuit/karate#contains-short-cuts

* def first = { code: "1" }
* match response.base.first contains first
* match response.base contains { first: '#(^first)' }
* def last = { code: 'last' }
* match response.base contains { first: '#(^first)', default: { last: '#(^last)' } }

嗯,我觉得我的问题略有不同。 例如,如果我使用 json 路径直接指向 first 并将其保存到变量 savedResponse,我可以执行此验证

And match savedResponse contains {code: "1"}

如果 first 下有 10 个键值组合,如果我需要验证其中的 6 个,我可以使用相同的 json 路径,我可以很容易地做到它使用匹配包含

如果我将上述响应保存到变量 savedResponse,我可以使用类似的方式使用匹配包含验证多个事物,在此。下面的语句无论如何都不起作用。

And match savedResponse contains {first:{code:"1"}, last:{code:"last"}}

但是,如果我修改某些内容,它会起作用吗?