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 .