Позитивные и негативные проверки данных · QA Orbit
Перейти к содержимому
QA ORBIT
Новости Инструменты Библиотека Полезные сайты Курсы ИИ и тестирование
Войти
КурсыТренажёры3
Маршруты обучения
КурсыТестирование API: контракт, данные и состояниеУрок 2
Программа курса

Тестирование API: контракт, данные и состояние

0 из 6 уроков пройдено
01HTTP-запрос, ответ и проверяемый контракт≈ 45 мин02Позитивные и негативные проверки данных≈ 50 мин03Авторизация, объектный доступ и состояние≈ 55 мин04Коллекция, окружение и осмысленные assertions≈ 55 мин05Диагностика, повторы и честный результат≈ 50 мин06Итоговый проект: проверка API-контракта≈ 80 мин
Учебные данные. Реальные навыки.
Урок 02 / 6 · 02 / Валидация≈ 50 мин с практикой

Позитивные и негативные проверки данных

Различайте неверный JSON, media type и нарушение полей; проверяйте отсутствие записи при отказе.

В своём темпе
Что вы сможете после урока
  • Проектировать независимые негативные запросы.
  • Различать отсутствие поля, null, неверный тип и значение.
  • Проверять ошибку и неизменность данных.

Негативный запрос тоже должен быть точным

Сначала создайте базовый валидный запрос и убедитесь, что его контекст корректен: адрес, токен, media type и исходные данные. Затем меняйте одно условие. Если одновременно удалить токен и испортить JSON, A1 даст 401; вы ничего не узнаете о парсере JSON. Порядок проверок важен для ожидаемой ошибки, а изолированные примеры помогают локализовать нарушение.

У тела есть несколько независимых уровней. Без Content-Type application/json стенд возвращает 415; с этим заголовком и обрезанным JSON —400; с синтаксически правильным JSON {"title":null} —422. Эти ответы относятся к разным основаниям. Не называйте любой ошибочный ввод «плохим JSON»: число 42 и null допустимы в JSON как значения, но не удовлетворяют схеме нашего поля title.

Отсутствие поля не равно null

Для description и priority контракт задаёт defaults только при отсутствии. {"title":"План"} создаёт description="" и priority=normal. Явное description:null нарушает строковый тип и должно дать 422; пустая description="" допустима. Title обязательный, поэтому отсутствие, null, число, пустая строка — разные отрицательные классы. Unknown authorId также запрещён; клиент не должен тихо управлять серверным авторством.

Для длины title используйте воспроизводимые точки 0,1,2,79,80,81 с одной кириллической буквой, затем отдельный случай 80 эмодзи😀. Ключевой оракул — кодовые точки Unicode. Для JSON-файла можно сформировать строку программно; не считайте число байт запроса длиной title. Description имеет собственную границу 500, а priority является перечислением. Случайный длинный текст не объясняет, какое именно условие вы проверили.

Отказ без побочного эффекта — часть контракта

Правильный 422 ещё не доказывает, что задача не была создана перед ошибкой. Снимите контролируемое состояние до запроса и сравните после: все ID и поля должны совпасть по A6. Проверка одного старого ID слишком узкая: новая лишняя запись может появиться рядом. В лаборатории snapshot специально доступен через отдельный ключ local-only, чтобы изучать этот инвариант на синтетических данных. В настоящей системе способ наблюдения выбирают в пределах разрешений.

Запишите expected status, error.code и неизменность отдельно. Когда тест падает, понятное имя показывает, нарушен ли ответ, форма ошибки или данные. Большой единственный assert «всё верно» затрудняет разбор. Одновременно не требуйте неописанный точный текст message: A6 обещает error.code, а не локализованную формулировку. Полезная строгость следует контракту; проверка случайных деталей реализации делает набор хрупким.

Три разных уровня отказа

Вход при валидном токенеСтатусОракул
Content-Type text/plain415 JSON_REQUIREDA2: media type
application/json и {"title":400 MALFORMED_JSONA2: синтаксис
application/json и {"title":null}422 INVALID_TASKA2: схема/поля

Источники и проверка фактов

RFC 9110 — HTTP SemanticsСемантика методов и статусов. Порядок проверок и поля OrbitDesk заданы отдельным учебным контрактом, не самим HTTP.

Авторский учебный материал · Редакция QA Orbit · версия 2026-10-28.1

Теперь применим это к задачеПопробуйте сами, прежде чем открывать разбор.
Предыдущий урокHTTP-запрос, ответ и проверяемый контрактСледующий урокАвторизация, объектный доступ и состояние
QA ORBIT

Проверяй. Понимай. Расти.

Пространство осмысленного тестирования.
ИсследуйтеНовостиИнструментыБиблиотека
РазвивайтесьКурсыТренажёрыМаршруты обученияИИ и тестирование
Оставайтесь на орбитеО проекте Полезные сайтыГлоссарий
© 2026 QA Orbit. Сделано с вниманием к деталям.
КонфиденциальностьУсловия использования Всегда есть что исследовать