2017-11-27 9 views
1

レスポンスから、このようなサブセットを抽出しました。マッチを使用してJSONキーのサブセットを検証する方法は、ネストされたJSONがレスポンスに含まれている場合を含みます。

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

私はを使用して、単一の検証を行う必要があるとの一致Xは

  1. 内の最初のコードは、コードが最後であるデフォルト-最後の1内側
  2. でチェックするが含まれている場合は?

すべての検証でjsonパスを使用する代わりに、特定の部分を抽出して検証しようとしています。もしネストされたjsonパスがなければ、私は非常に簡単にを使用してそれを行うことができます。一致Xにはが含まれますが、ネストされたjsonsがあるときは実行できません。

答えて

1

はあなたのためにこの作業を行います。

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

編集:あなたは、ネストされたノードでcontainsを行うことができるようにもっと重要なのは、可能な限り1行に凝縮したいようにokが見えます。個人的には、時にはこれが問題になるわけではないことがわかりましたが、ここにはあります。

は、これらのショートカットも参照してください: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)' } } 
0

Mhmm、私の質問は、私が思う若干異なっています。私は直接JSONのパスを使用して、変数savedResponseに保存最初を指している場合最初下であれば10のキーの値の組み合わせがあった場合は例えば は、私がこの検証

And match savedResponse contains {code: "1"} 

を行うことができますIそのうちの6つを検証する必要がある、私は同じjsonパスを使用することができますと一致を使用して簡単にそれを行うことができます

私は上記の応答を変数savedResponseに保存すると簡単な方法は、これで次のステートメントはとにかく動作しません。

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

しかし、私は何かを修正すれば動作しますか?

+1

私の答えは、これはあなたが探していると思いますか? –

関連する問題