REST保証のJSONスキーマ検証
1.概要
REST保証ライブラリは、通常はJSON形式でREST APIのテストをサポートします。
時々、応答を詳細に分析することなく、JSON本体が特定のJSON形式に準拠しているかどうかを最初から知ることが望ましい場合があります。
このクイックチュートリアルでは、
定義済みのJSONスキーマに基づいてJSONレスポンスを検証する方法
について説明します。
2セットアップ
初期のREST保証の設定は
前の記事
と同じです。
さらに、
pom.xml
ファイルに
json-schema-validator
モジュールも含める必要があります。
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.0</version>
</dependency>
最新版を入手するには、https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22json-schema-validator%22[このリンク]に従ってください。
同じ名前で作者と機能が異なる別のライブラリも必要です。これはREST保証のモジュールではなく、検証を実行するために
json-schema-validator
によって内部で使用されています。
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
</dependency>
その最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22json-schema-validator%22[ここ]にあります。
ライブラリ__json-schema-validatorには、json-schema-core依存関係も必要になる場合があります。
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-core</artifactId>
<version>1.2.5</version>
</dependency>
そして最新版は常にhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22json-schema-core%22[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応答文字列に対してチェックされた検証を実行します。つまり、スキーマが
odds
を次のJSONのように配列として定義しているとします。
{
"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. グローバル検証設定
これらのカスタマイズは非常に柔軟ですが、テストごとに検証を定義しなければならないテストが多数あるため、これは面倒で保守性がよくありません。
これを避けるために、私たちは自分の設定を一度だけ定義し、それをすべてのテストに適用することができます。
検証をオフにし、常に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アシュアードを使用するときに、スキーマに対してJSONレスポンスを検証する方法を説明しました。
いつものように、この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/rest-assured[GitHubで利用可能]です。