1. Обзор
Библиотека REST-assured обеспечивает поддержку тестирования API REST, обычно в формате JSON.
Время от времени может быть желательно, не анализируя ответ в деталях, сначала узнать, соответствует ли тело JSON определенному формату JSON.
В этом кратком руководстве мы рассмотрим, как мы можем проверить ответ JSON на основе предопределенной схемы JSON .
2. Настройка
Первоначальная настройка, гарантирующая покой, такая же, как и в нашей предыдущей статье .
Кроме того, нам также необходимо включить модуль json-schema-validator в pom.xml файл:
io.rest-assured json-schema-validator 3.3.0 test
Чтобы убедиться, что у вас есть последняя версия, перейдите по этой ссылке .
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")); }
Обратите внимание, что мы по-прежнему будем статически импортировать соответствует Схеме Json В Classpath из io.restassured.module.js v. 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 Версию схемы и утверждали, что она использует эту схему при выполнении запроса.
4.2. Проверка Валидаций
По умолчанию json-schema-validator запускает проверенные проверки в строке ответа JSON. Это означает, что если схема определяет odds как массив, как в следующем JSON:
{ "odds": [{ "price": "1.30", "name": "1" }, { "price": "5.25", "name": "X" }] }
тогда валидатор всегда будет ожидать массив в качестве значения для odds , следовательно, ответ, в котором odds является строкой , не пройдет проверку. Поэтому, если мы хотим быть менее строгими с нашими ответами, мы можем добавить пользовательское правило во время проверки, сначала выполнив следующий статический импорт:
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 .