Какие проверки можно применить к массиву в JSON
Что проверяют
Умеете ли вы видеть в массиве больше, чем «пришёл и не пустой», и знаете ли, как это автоматизировать. Следом часто просят показать схему или проверку в вашем инструменте: Postman, REST Assured, pytest.
Как отвечать
Разложите проверки по уровням, от структуры к смыслу:
- наличие и тип: поле есть и это именно массив, а не
null, не объект и не строка. Типичный баг API: при одном элементе приходит объект вместо массива из одного объекта; - пустой,
nullили отсутствует: три разных состояния, и контракт должен говорить, какое допустимо; - количество: границы
0,1, максимум страницы и максимум плюс один, совпадение сtotalв пагинации; - элементы: тип каждого, обязательные поля, форматы (дата, email, UUID), допустимые значения;
- уникальность: нет дублей по
id, а не только полностью одинаковых объектов; - порядок: если API обещает сортировку, проверяйте её, а если не обещает, не завязывайте тест на порядок;
- смысл: все элементы подходят под фильтр запроса, данные совпадают с базой или с тем, что создали в предусловии.
Структуру удобно проверять через JSON Schema: type: array, minItems, maxItems, uniqueItems, items для схемы элемента, contains для условия «хотя бы один такой». В Postman есть pm.response.to.have.jsonSchema(), в REST Assured matchesJsonSchemaInClasspath() и матчеры hasSize(), everyItem(), в Python библиотека jsonschema или модели pydantic. Смысловые проверки (фильтр, сортировку, связь с базой) схема не покрывает, их пишут кодом.
Где спотыкаются
Проверяют уникальность через new Set(array) на массиве объектов. Set сравнивает ссылки, два одинаковых объекта для него разные, и проверка проходит всегда.
Смотрят только на data[0], а ошибка сидит в пятом элементе или появляется только на второй странице.
Путают uniqueItems с уникальностью по ключу: схема ловит полностью совпадающие элементы, а два объекта с одним id и разными именами пропустит.