«1. Обзор

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

Время от времени может быть желательно, без детального анализа ответа, сначала узнать, соответствует ли тело 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 мы будем использовать 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"));
}

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

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

4.1. Проверка ответа

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

Скажем, мы хотим, чтобы наша проверка всегда использовала схему 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": [{
        "price": "1.30",
        "name": "1"
    },
    {
        "price": "5.25",
        "name": "X"
    }]
}

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

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);

затем, чтобы удалить эту конфигурацию, вызовите метод сброса:

JsonSchemaValidator.reset();

5. Заключение ~~ ~ В этой статье мы показали, как мы можем проверить ответ JSON по схеме при использовании REST-assured.

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

«