Ответ вслух Middle JSON и JSON Schema обновлено

Как ты проверяешь структуру ответа

Вопрос

Как ты проверяешь, что ответ API соответствует контракту? Расскажи про JSON Schema.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Для формы ответа я использую JSON Schema: это JSON-документ, где описаны тип каждого поля, обязательные поля, допустимые значения, длины, форматы и структура массивов. Схему беру из OpenAPI, если она есть, тогда тест заодно проверяет, что документация не врёт.

Что должно прозвучать в ответе

  • JSON Schema описывает структуру: типы, обязательные поля, форматы, ограничения

  • Источник схемы: OpenAPI-спецификация или договорённость с разработкой

  • Ловушки: без required схема пропускает пустой объект, format по умолчанию не проверяется

  • additionalProperties false ловит утечки лишних полей, но делает тест хрупким

  • В Postman, pytest или REST Assured валидатор подключается одной строкой

Что могут спросить следом

  • Чем схема лучше проверки полей по одному?
  • Как описать поле, которое может быть null?
  • Что такое контрактное тестирование?

Разбор

Для формы ответа я использую JSON Schema: это JSON-документ, где описаны тип каждого поля, обязательные поля, допустимые значения, длины, форматы и структура массивов. Схему беру из OpenAPI, если она есть, тогда тест заодно проверяет, что документация не врёт. В Postman это pm.response.to.have.jsonSchema, в Python библиотека jsonschema, в Java REST Assured с модулем json-schema-validator. Есть ловушки: properties не делает поля обязательными, нужен required, иначе пустой объект проходит. Format в версии 2020-12 по умолчанию только аннотация, проверку надо включить. additionalProperties false ловит утечку лишних полей вроде хеша пароля, но падает на каждое новое поле, поэтому в строгом режиме проверяю только чувствительные эндпоинты. И схема не заменяет проверку значений: она скажет, что total число, но не скажет, что оно правильное.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.