Проверка схемы JSON с гарантией REST

Проверка схемы JSON с гарантией REST

1. обзор

Библиотека с гарантированным REST предоставляет поддержку для тестирования API REST, обычно в формате JSON.

Время от времени может быть желательно, без подробного анализа ответа, сначала знать, соответствует ли тело JSON определенному формату JSON.

В этом кратком руководстве мы рассмотрим, какwe can validate a JSON response based on a predefined JSON schema.

2. Настроить

Первоначальная настройка с гарантированным REST такая же, как и дляour previous article.

Кроме того, нам также необходимо включить модульjson-schema-validator в файлpom.xml:


    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 мы будем использовать JSON, сохраненный в файле с именемevent_0.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"));
}

Обратите внимание, что мы по-прежнему будем статически импортироватьmatchesJsonSchemaInClasspath изio.restassured.module.jsv.JsonSchemaValidator.

4. Проверка схемы JSON настройки

4.1. Проверить ответ

Модульjson-schema-validator с гарантированным REST дает нам возможность выполнять детальную проверку путем определения наших собственных правил конфигурации.

Скажем, мы хотим, чтобы наша проверка всегда использовала схему 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, указав версию 4SchemaVersion и заявив, что она использует эту схему при выполнении запроса.

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. Конфигурация глобальной проверки

Эти настройки очень гибкие, но при большом количестве тестов мы должны были бы определить валидацию для каждого теста, это громоздко и не очень легко обслуживаемо.

Чтобы этого избежать,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);

Затем для удаления этой конфигурации вызовите метод сброса:

JsonSchemaValidator.reset();

5. Заключение

В этой статье мы показали, как можно проверить ответ JSON на соответствие схеме при использовании REST-гарантированного.

Как всегда, доступен полный исходный код примераover on GitHub.