Перейти к содержимому

Фотография

Валидация json схемы и json


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 kamyshev1993

kamyshev1993

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Камышев Андрей Анатольевич

Отправлено 01 мая 2020 - 09:09

Все привет.

Пишу api тесты и столкнулся с проблемой при валидации json схемы и json.

 

Есть к примеру у меня класс 

 

public class Dog {      

@Column(name = "dog_id")    

@Getter @Setter private int id;      

@Column(name = "dog_name")    

@Getter @Setter private String name;

}

 

При помощи библиотеки jackson я строю схему json данного класса

 

private static String getJsonSchema(Class<?> clazz) {

ObjectMapper objectMapper = new ObjectMapper();
JsonSchemaConfig config = JsonSchemaConfig.nullableJsonSchemaDraft4();
JsonSchemaGenerator generator = new JsonSchemaGenerator(objectMapper, config);
JsonNode jsonNode = generator.generateJsonSchema(clazz);
return jsonNode.toString();
}

 

После этого прохожу валидацию

 

@Step("Check response matches json schema")
public static void checkResponseJsonSchema(Response response, @Parameter String schema) {
Allure.addAttachment("Response", response.asString());
LOGGER.debug("Entity schema is:" + schema);
response.then().assertThat().body(JsonSchemaValidator.matchesJsonSchema(schema));
}

 

сам response возвращает что то типо

{"id":2344,"name":"name"}

 

 

Суть самого вопроса, попробую семитировать случайное удаление параметра из ответа, путем добавления нового поля в классе, к примеру добавлю поле gender.

 

response все так же будет отдавать json с 2 параметрами, а в схеме уже будет 3 параметра, но при валидации ошибки не произойдет и я не пойму почему? 


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 01 мая 2020 - 10:49

потому что в схеме не указано что лишних полей не должно быть

 

поэтому эта схема не будет выдавать ошибки когда полей будет больше чем описано


  • 0

#3 kamyshev1993

kamyshev1993

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Камышев Андрей Анатольевич

Отправлено 01 мая 2020 - 10:57

потому что в схеме не указано что лишних полей не должно быть

 

поэтому эта схема не будет выдавать ошибки когда полей будет больше чем описано

 

Как объяснить это схеме?

 

При помощи аннотации @JsonProperty(required = true) не лучший выбор, потому что к примеру, если есть у нас в классе поле id, то в ответе оно будет, а в запросе нет (primary key).

И мы столкнемся с проблемой, когда захотим сравнить json запроса и json ответа со схемой.

 

Или в таких случаях делают два разных класса с разным набором полей?


  • 0

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 01 мая 2020 - 17:55

 

 

Как объяснить это схеме?

прочитать документацию

 

 

 

И мы столкнемся с проблемой, когда захотим сравнить json запроса и json ответа со схемой.

незачем проверять джейсон запроса, ведь его сами и сделали


  • 0

#5 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 02 мая 2020 - 17:32

 

 

 

Как объяснить это схеме?

прочитать документацию

 

 

 

И мы столкнемся с проблемой, когда захотим сравнить json запроса и json ответа со схемой.

незачем проверять джейсон запроса, ведь его сами и сделали

Я вас категорически умоляю! Ви таки уверенны, что его сделали правильно? Ви батенька бааааальшой оптимист.

ЗЫЖ Только схема должна быть не сгенерированна с объекта, а прилагаться к ТЗ как контракт.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных