RESTを使用したJSONスキーマ検証
1. 概要
REST保証ライブラリは、通常JSON形式のREST APIのテストをサポートします。
JSON本体が特定のJSON形式に準拠しているかどうかを最初に知ることは、応答を詳細に分析することなく、時々望ましい場合があります。
このクイックチュートリアルでは、we can validate a JSON response based on a predefined JSON schemaがどのようになっているのかを見ていきます。
2. セットアップ
RESTで保証された初期設定は、our previous articleと同じです。
さらに、pom.xmlファイルにjson-schema-validatorモジュールを含める必要もあります。
io.rest-assured
json-schema-validator
3.0.0
最新バージョンであることを確認するには、this linkに従ってください。
また、同じ名前で作成者と機能が異なる別のライブラリも必要です。 これはREST保証のモジュールではなく、検証を実行するためにjson-schema-validatorによって内部で使用されます。
com.github.fge
json-schema-validator
2.2.6
その最新バージョンはhereで見つけることができます。
ライブラリjson-schema-validatorにも、json-schema-coreの依存関係が必要な場合があります。
com.github.fge
json-schema-core
1.2.5
そして、最新バージョンは常にhereで見つかります。
3. JSONスキーマ検証
例を見てみましょう。
JSONスキーマとして、クラスパスに存在するevent_0.jsonというファイルに保存されたJSONを使用します。
{
"id": "390",
"data": {
"leagueId": 35,
"homeTeam": "Norway",
"visitingTeam": "England",
},
"odds": [{
"price": "1.30",
"name": "1"
},
{
"price": "5.25",
"name": "X"
}]
}
次に、これがREST APIによって返されるすべてのデータが続く一般的な形式であると仮定すると、JSON応答が次のように適合しているかどうかを確認できます。
@Test
public void givenUrl_whenJsonResponseConformsToSchema_thenCorrect() {
get("/events?id=390").then().assertThat()
.body(matchesJsonSchemaInClasspath("event_0.json"));
}
io.restassured.module.jsv.JsonSchemaValidator.からmatchesJsonSchemaInClasspathを静的にインポートすることに注意してください
4. JSONスキーマ検証 設定
4.1. 応答を検証する
REST-assuredのjson-schema-validatorモジュールは、独自のカスタム構成ルールを定義することにより、きめ細かい検証を実行する能力を提供します。
検証で常にJSONスキーマバージョン4を使用する必要があるとします。
@Test
public void givenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect() {
JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder()
.setValidationConfiguration(
ValidationConfiguration.newBuilder()
.setDefaultVersion(SchemaVersion.DRAFTV4).freeze())
.freeze();
get("/events?id=390").then().assertThat()
.body(matchesJsonSchemaInClasspath("event_0.json")
.using(jsonSchemaFactory));
}
これを行うには、JsonSchemaFactoryを使用し、バージョン4のSchemaVersionを指定して、要求が行われたときにそのスキーマを使用していることを表明します。
4.2. 検証を確認する
デフォルトでは、json-schema-validatorはJSON応答文字列に対してチェック済み検証を実行します。 これは、スキーマが次のJSONのようにoddsを配列として定義している場合を意味します。
{
"odds": [{
"price": "1.30",
"name": "1"
},
{
"price": "5.25",
"name": "X"
}]
}
その場合、バリデーターは常にoddsの値として配列を期待するため、oddsがStringである応答は検証に失敗します。 そのため、応答の厳密性を低くしたい場合は、最初に次の静的インポートを行うことにより、検証中にカスタムルールを追加できます。
io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;
次に、検証チェックをfalseに設定してテストを実行します。
@Test
public void givenUrl_whenValidatesResponseWithStaticSettings_thenCorrect() {
get("/events?id=390").then().assertThat().body(matchesJsonSchemaInClasspath
("event_0.json").using(settings().with().checkedValidation(false)));
}
4.3. グローバル検証構成
これらのカスタマイズは非常に柔軟ですが、多数のテストでは各テストの検証を定義する必要がありますが、これは面倒であり、あまりメンテナンスできません。
これを回避するには、we have the freedom to define our configuration just once and let it apply to all testsを使用します。
検証をオフにして、JSONスキーマバージョン3に対して常に使用するように構成します。
JsonSchemaFactory factory = JsonSchemaFactory.newBuilder()
.setValidationConfiguration(
ValidationConfiguration.newBuilder()
.setDefaultVersion(SchemaVersion.DRAFTV3)
.freeze()).freeze();
JsonSchemaValidator.settings = settings()
.with().jsonSchemaFactory(factory)
.and().with().checkedValidation(false);
次に、この構成を削除するには、resetメソッドを呼び出します。
JsonSchemaValidator.reset();
5. 結論
この記事では、REST-assuredを使用するときにスキーマに対してJSON応答を検証する方法を示しました。
いつものように、この例の完全なソースコードはover on GitHubで入手できます。