Писали ли проверки для JSON схемы, чтобы проверить наличие и порядок элементов в ответе
Что проверяют
Понимаете ли вы, что схема гарантирует, а что нет. В формулировке вопроса спрятана ловушка: порядок ключей внутри объекта JSON не значим, и проверять его схемой не нужно, да и нечем.
Как отвечать
Разделите два случая. Структура ответа проверяется схемой: типы, required, enum, границы чисел и длины строк, формат, и обязательно запрет лишних полей, иначе переименованное поле пройдёт молча.
{
"type": "object",
"required": ["id", "items"],
"additionalProperties": false,
"properties": {
"id": {"type": "integer"},
"items": {"type": "array", "minItems": 1}
}
}Порядок элементов внутри массива это уже про данные: его проверяют сравнением списка или утверждением про сортировку, а если массив имеет фиксированную форму кортежа, схема умеет описать позиции по очереди. Инструменты называйте свои: валидатор схемы в Python, в JavaScript, встроенная проверка в клиенте для API. Схему лучше брать из спецификации сервиса, а не держать рядом её копию.
Где спотыкаются
Уверенно обещают проверить схемой порядок полей в объекте. Сериализатор вправе отдать их как угодно, поэтому такая проверка либо не делает ничего, либо разваливается после смены библиотеки на сервере.
Пишут схему без обязательных полей и без запрета лишних. Она пропускает ответ, в котором половина данных исчезла, а тест остаётся зелёным, и это хуже, чем отсутствие теста: появляется ложная уверенность.
Загоняют в схему бизнес-значения: конкретную сумму, конкретный идентификатор. Схема описывает контракт и должна переживать смену данных, а значения проверяются отдельными утверждениями в теле теста.