2017-02-26 5 views
1

jsonレスポンスの各インスタンスをチェックする最も動的な方法は、スクリプトアサーション内の別のjsonレスポンスの値と一致しますか?私は最初の部屋の価格が二totalPriceと一致する最初のtotalPriceと第二roomPriceと一致することを確認したい値をチェックする方法jsonレスポンスの別の対応値と一致する

{ 
    "xxx": [{ 
      "roomInformation": [{ 

       "xxx": xxx 

      }], 

      "totalPrice": xxx 
     }, 

     { 
      "roomInformation": [{ 
       xxx: xxx 
      }], 
      "totalPrice": xxx 
     } 
    ] 

} 

:私は何を意味

は、私は以下の次の応答を持って言うことができますです。これは私が[0]と[1]でjsonを単に見ることができないので、これの多くの異なるインスタンスを得ることができるように動的でなければなりません。各roomPriceとそれに対応するtotalPriceとの一致を確認してください。ここで

おかげ

+1

有効なJSONがありますか?あなたの質問のJSONは無効です... –

+0

私はあなたにいくつかの有効なjsonを手に入れます – BruceyBandit

+0

既に検証済みのコピーと現在の応答のマスター/ゴールドコピーを使用していますか? – Rao

答えて

1

は、各roomPricetotalPriceと一致するかしないチェックするscript assertionです。

EDIT:OPのフル応答に基づいてはhere

スクリプトアサーションを提供:

//Check if the response is not empty 
assert context.response, "Response is empty or null" 

def json = new groovy.json.JsonSlurper().parseText(context.response) 
def sb = new StringBuffer() 
json.regions.each { region -> 
    region.hotels.each { hotel -> 
     (hotel?.totalPrice == hotel?.roomInformation[0]?.roomPrice) ?: sb.append("Room price ${hotel?.roomInformation[0]?.roomPrice} is not matching with total price ${hotel.totalPrice}")  
    } 
} 
if (sb.toString()) { 
    throw new Error(sb.toString()) 
} else { log.info 'Prices match' } 
+0

私はこれを試してみましょうラオとティムの答え – BruceyBandit

+0

あなたの他の回答に基づいて、スクリプトの変更が必要な場合があります。 – Rao

2

ので、変数としてJSONを与えられた:

def jsonTxt = '''{ 
    "hotels": [{ 
      "roomInformation": [{ 

       "roomPrice": 618.4 

      }], 

      "totalPrice": 618.4 
     }, 

     { 
      "roomInformation": [{ 
       "roomPrice": 679.79 
      }], 
      "totalPrice": 679.79 
     } 
    ] 

}''' 

我々は、次を使用することができますスクリプト:

import groovy.json.* 

new JsonSlurper().parseText(jsonTxt).hotels.each { hotel -> 
    assert hotel.roomInformation.roomPrice.sum() == hotel.totalPrice 
} 

ご覧のとおり、私はsumを使用してすべてのroomInformation.roomPrice値を一緒に追加しています。あなたの例では、1つの価格しかないので、これは問題ありません。また、複数の部屋を合計して合計するケースもカバーします

+0

は 'hotels'の変数名のように 'ホテル'ですか? – BruceyBandit

+0

また、log.infoで値を確認するテストが必要な場合は、正しいことを確認するためにlog.infoを書き込む正しい方法は何でしょうか? – BruceyBandit

+0

@ BruceyBanditええ、 'ホテル'は 'ホテル 'の' each'要素のための変数の名前です。そしてログアウトしたい場合は、$ {hotel.roomInformation.roomPrice} == total:$ {hotel.totalPrice} "またはそれに類するものを' log.info ' –

関連する問題