Тестирование Web и API
Почти любой продукт — это клиент и сервер, которые обмениваются сообщениями по протоколу HTTP. Пока UI ещё не собран, API уже можно дёргать напрямую — слать запрос и читать структурированный ответ. Тестировщик, который умеет это делать, находит баги раньше, покрывает негативные и граничные случаи, которые через интерфейс не воспроизвести, и точно говорит, где сломалось — на бэкенде или в UI.
Тема собирает базовый словарь этого слоя — методы и статус-коды HTTP, идемпотентность, форматы JSON и XML, разницу подходов REST и SOAP, заголовки, аутентификацию и инструменты вроде Postman. Ловушки называем сразу — путают код 401 (не аутентифицирован) с 403 (нет прав), считают POST идемпотентным, называют REST протоколом и переворачивают, кто именно шифрует трафик — HTTP или HTTPS. Полная карта — в слоях ниже.
Карта темы
- Что такое API — контракт для обмена данными без экрана и зачем тестировать его отдельно от UI.
- Клиент-серверная архитектура — роли запроса и ответа и что вообще может быть клиентом.
- Методы HTTP —
GET/POST/PUT/DELETE/PATCHи их отображение на CRUD. - GET против POST — параметры в URL против тела, кэширование и видимость в логах.
- Идемпотентные методы — почему повтор запроса безопасен и какие методы это гарантируют.
- Статус-коды HTTP — диапазоны
1xx–5xxи кто виноват по первой цифре. - Код 401 — неверные учётные данные —
401против403и когда правильнее400. - Заголовки запроса — как сервер узнаёт устройство, ОС и язык клиента.
- HTTP против HTTPS — что добавляет
TLSи почему структура сообщения не меняется. - Типы и синтаксис JSON — шесть типов значений и жёсткие правила формата.
- Ошибки синтаксиса JSON — как отличать нарушение синтаксиса от подозрительного значения.
- XML против JSON — вес, схемы, пространства имён и где какой формат уместен.
- REST против SOAP — архитектурный стиль против строгого протокола.
- Проектирование REST API — ресурсы-существительные, глаголы-методы и верные статус-коды.
- Контракт WSDL — машиночитаемое описание SOAP-сервиса в
XML. - Переменные в Postman — переиспользование значений и правило «уже — побеждает».
- Семантика доставки в Kafka — откуда берутся дубли и как их гасят дедупликацией.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
Путать 401 (не аутентифицирован) и 403 (нет прав) | Неверный код в баг-репорте и спор с разработчиком о причине |
Считать POST идемпотентным | Повтор после таймаута создаёт дубль ресурса, а тест этого не ловит |
Называть REST протоколом, а не архитектурным стилем | Смешение REST и SOAP, неверные ожидания по формату и контракту |
Менять местами, кто шифрует трафик — HTTP или HTTPS | Ложные выводы о безопасности и пропущенная утечка в открытом канале |
Считать, что GET не может передавать параметры | Непонимание, откуда берётся ?a=1&b=2, и слепые зоны в тестах чтения |
Возвращать/принимать 200 с флагом ошибки вместо кода 4xx | Клиент считает ошибку успехом, автотесты по статусу зелёные при баге |
Оставлять висячую запятую или ключ без кавычек в JSON | Тело не парсится, и вы путаете это с логической ошибкой сервера |
Считать глобальный scope Postman главнее локального | Подставляется не то значение, тест «плавает» между окружениями |
Ждать от Kafka доставки exactly-once по умолчанию | Дубли не проверяются, а в проде «дважды списанные деньги» |
Значение для собеседований
Web/API-блок — любимая проверка на джуна и мидла в тестировании. Интервьюер смотрит не на заучивание кодов, а на то, отличаете ли вы контракт от реализации — метод от эффекта, статус от тела, стиль от протокола. Кандидат, который на «неверный логин» уверенно отвечает 401 и объясняет разницу с 403, сразу опережает того, кто «вернул бы 200 с ошибкой в теле».
Что обычно проверяют:
- Роли клиента и сервера, что клиентом может быть не только браузер.
- Методы
HTTPи их отображение на CRUD, разницуGET/POST, идемпотентность. - Диапазоны статус-кодов и точный код для неверных учётных данных.
- Форматы
JSON/XML, правила синтаксиса, разницуRESTиSOAP, назначениеWSDL. - Умение прочитать сырой запрос/ответ в
Postmanили DevTools и найти баг в теле или заголовках.
Типичный неверный ответ: «REST — это протокол, а POST идемпотентен, потому что у него есть тело». На деле REST — архитектурный стиль поверх обычного HTTP, а идемпотентность — про итоговое состояние сервера, а не про наличие тела; POST не идемпотентен именно потому, что каждый вызов создаёт новый ресурс.