1. 概要

REST保証ライブラリは、通常JSON形式でRESTAPIをテストするためのサポートを提供します。

時々、応答を詳細に分析せずに、JSON本体が特定のJSON形式に準拠しているかどうかを最初に知ることが望ましい場合があります。

このクイックチュートリアルでは、事前定義されたJSONスキーマに基づいてJSON応答を検証する方法を見ていきます。

2. 設定

RESTで保証された初期設定は、以前の記事と同じです。

さらに、json-schema-validatorモジュールをpom.xmlファイルに含める必要もあります。

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>

最新バージョンであることを確認するには、このリンクをたどってください。

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 の値として配列を期待するため、oddsStringである応答は検証に失敗します。 したがって、応答の厳密さを緩和したい場合は、最初に次の静的インポートを行うことで、検証中にカスタムルールを追加できます。

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-assuredを使用するときにスキーマに対してJSON応答を検証する方法を示しました。

いつものように、この例の完全なソースコードは、GitHubから入手できます。