私は安心して経験が限られています。私は通常、その中で例を見つけることができますか、またはGoogleで失敗するいくつかのテストがありますが、匿名配列内の要素のネストされたプロパティに一致させようとしていて、 。REST Assured:JSONでネストされたプロパティを使用して要素を検索し、他のプロパティを検証する方法
例JSON:
[
{
"id":1,
"type":{
"typeId":3,
"name":"LPM"
},
"status":{
"id":1,
"price":1.20,
"source":172,
"valid":0
}
},
{
"id":2,
"type":{
"typeId":2,
"name":"ST"
},
"status":{
"id":10,
"price":1.20,
"source":172,
"valid":0
}
}
]
私は残りの部分保証を使用している、と私はLPMに等しいtype.name
を持って、リスト内の要素を見つけたい、そしてstatus.price
を検証し、status.source
、とだけのstatus.id
こと素子。
私が最初に応答を検証し始めたとき、それが配列であることを一つの項目に対してのみ可能ではなかったので、私が使用していた。があるかもしれないしかし、これは、もはや仕事に保証され
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("[0].type.name", equalToIgnoringCase("LPM"))
.body("[0].status.id", equalTo(statusId))
.body("[0].status.source", equalTo(sourceId))
.body("[0].status.price", equalTo(price));
は、配列内に複数の要素があり、順序は保証されていません。
私はあることを私の体のチェックを変更した:
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("type.name", hasItem("LPM"))
.body("status.id", hasItem(statusId))
.body("status.source", hasItem(sourceId))
.body("status.price", hasItem(price));
これはテストに合格するために取得するのに十分であるが、これはtype.name
LPMとstatus.id
、status.source
、および要素のstatus.price
ができることのリスクを紹介します間違っているかもしれませんが、type.name
STの要素と照合されるため、これは検出されません。
だから私はすなわち、唯一その要素をチェックし、私はstatus.id
、status.source
、およびstatus.price
1つだけ、その後があるように保証することができたのそれはtype.name
だとしてLPMを持っている要素を、見つけることができるようにしないでほしいです STエレメント。
type.name
が必要な要素を見つけるためにボディマッチャーを修正しようとしましたが、ツリーを上から下に戻す方法がわからないため、これを動作させることはできません
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("$.findAll (it.type.name = LPM}.status.id ", hasItem(statusId))
.body("$.findAll (it.type.name = LPM}.status.source", hasItem(sourceId))
.body("$.findAll (it.type.name = LPM}.status.price", hasItem(price));
この場合でも、本当に一度行うと3回ツリーが検索されます。
私の真ん中の試合はこのテストに合格していますが、私はこの権利を得たいと思います。私はList
に要素を入れてそこから作業することができますが、他の例との一貫性のために、私は現在別のオプションを見ることはできませんが、むしろそうしたいと思います。
ドキュメントで何をしようとしているのかの例を見つけようとしましたが、実際には可能ではない可能性が常にあります。もしそうでなければ、私はそれの背後にある理論を教えてくれて嬉しいです。
助けてください。ここで
あなたはこれを行うことだけを主張していますかwitj REST Assured? –
@GrzegorzGórkiewiczはい、私は別のテストフレームワークを導入したくありません。私が望むようにできないなら、リストにjsonをデシリアライズし、それを反復処理します。 – Clarkey
私は別の**テストの**フレームワークを意味しませんでした。私は、例えばGoogleのGSONを使ってJSONObjectsのリストをインスタンス化し、次にこのリストに希望のプロパティを持つ要素が含まれていることをHamcrestにアサートしたかったのです。 –