API-проверки хвалят за скорость: баг на контракте дешевле, чем тот же баг через вёрстку. Новичок часто делает две крайности. Либо кликает в Postman без списка и завтра не повторит. Либо автоматизирует «всё», включая разовое «а что если», и получает медленный сьют, которому не верят. Как войти в QA вообще — в как стать QA. Карта навыков без культа фреймворка — в навыках QA. Здесь другое: что именно смотреть на эндпоинте, где рука, где авто, и почему сниппет из блога не заменяет матрицу на один метод.
Список «Postman / REST Assured / pytest / Playwright» из старой версии не закон рынка. Инструмент вторичен. Сначала поведение и риск. Автопуть и CV автоматизатора — в как стать автотестировщиком и резюме автоматизатора, не здесь. Блоков кода нет: на экране просят ваш контракт, не чужой пример.
Коротко:
- Смотрите запрос и ответ: код, тело, заголовки, ошибка, побочный эффект. Не «открылось в UI».
- Вручную — исследование нового и разовый баг. В авто — то, что будете гонять каждую неделю.
- Минимум на метод: позитив, плохие данные, граница, без токена, чужие права.
- Контракт ломается тише UI: поле переименовали, тип сменили, 200 с пустым телом.
- Не автоматизируйте то, чего сами не поняли руками. Сьют без головы — шум в CI.
Чем проверка API не клики и не «покрыли сервис»
Клиент шлёт запрос, сервер отвечает. Проверка смотрит этот договор напрямую. UI рядом может врать: кнопка серая, а метод живой; форма красивая, а 500 на пустом поле. Поэтому API не «вместо ручного», а слой, где дешевле ловить деньги, доступ и данные.
Фраза «покрыли API» без списка методов и рисков ничего не значит. Как «покрытие 80%» в чужом резюме. На созвоне купят: какой эндпоинт, какой риск, что сломается у пользователя, как поймаете завтра. Собеседование этого жанра: вопросы QA. Слоты: вакансии QA.
Разработчик, который тестирует свой метод, и QA, который держит контракт команды, делают похожую матрицу. Разница в зоне вреда и в том, кто останавливает релиз. Не спорьте титулами. Спорьте списком проверок.
Контракт, а не только «код 200»
Код ответа — вход, не финиш. 200 с телом, где нет обязательного поля, — дыра. 201 без Location, если клиент на него завязан, — дыра. 400 без понятной ошибки заставляет фронт гадать. 401 и 403 путать нельзя: не вошёл и не имеет права — разные баги и разные тикеты.
Тело: типы, обязательность, внезапный null, лишние поля, которые клиент начнёт считать законом. Заголовки: тип содержимого, пагинация, кэш, корреляция запроса, если она у вас есть. Побочный эффект: повтор POST создал вторую сущность; DELETE «успешен», а запись жива; PATCH тихо не применился.
Идемпотентность — не слово для резюме. Это ответ на вопрос: можно ли безопасно повторить. Оплата и создание заказа это любят ломать. Не копируйте определение из учебника. Прогоните два одинаковых запроса и посмотрите базу или следующий GET, не только первый код.
Матрица на один эндпоинт
Возьмите один важный метод, не «весь сервис за вечер». Запишите:
- Кто вызывает и зачем. Какой пользователь, какой клиент.
- Счастливый путь: валидное тело, ожидаемый код и два-три поля, без которых клиент не живёт.
- Плохие данные: нет поля, неверный тип, пустая строка, слишком длинное, отрицательное, спецсимволы.
- Граница: ноль, максимум, пустой список, неизвестный идентификатор.
- Доступ: нет токена, просроченный, чужой ресурс, роль без права.
- Конфликт и повтор: 409, второй create, повторная отмена.
Это не ГОСТ. Это список, который вы завтра повторите. Если не можете назвать риск пункта — пункт декоративный. Тестовое на вход часто просит такой список, не код: тестовое задание. На интервью тот же список важнее названия фреймворка: вас просят спроектировать проверку, а не процитировать статус-коды.
Не раздувайте матрицу «все коды HTTP». Берите те, которые ваш сервис реально обещает и которые ломают клиента. Лишний 418 в чек-листе не ловит дыру в правах. Недостающий 403 на чужой заказ — ловит. Два поля в теле, без которых фронт падает, важнее десятка декоративных кодов.
Что оставить руками
Новый эндпоинт на разработке: понять поведение быстрее в клиенте запросов, чем сразу писать сьют. Разовый баг с прода: воспроизвести, зафиксировать тело и заголовки, отдать разработке. Исследование «а что если пропущу поле, которое в доке необязательное». Смена окружения, где авто ещё врёт из-за данных.
Рука здесь — не вечный Postman как профессия. Рука — пока поведение не стабильно или пока вы сами не можете предсказать ответ. Как только одно и то же гоняете каждую сборку — это кандидат в авто, не медаль «я всё руками, так надёжнее».
Не путайте исследовательский проход с регрессом в чате: «я вчера тыкал, вроде ок». Вчерашний тык не ловит ночной рефакторинг поля. Либо чек-лист на повтор, либо авто. Третьего «в голове» нет. Если метод трогает деньги или чужие данные — не оставляйте его только в памяти смены.
Что класть в авто — и когда рано
В авто кладут то, что стыдно пропустить повторно: логин, создание сущности, оплата, права, контракт полей, без которых клиент падает. Прогон должен жить в CI и падать понятно: какой метод, какой ожидание, какой факт. Иначе это локальный скрипт «у меня работает».
Рано автоматизировать: поведение меняется каждый день, нет стабильных тестовых пользователей, нет изоляции данных, вы не поняли позитив. Сьют по сырому методу флакает и вас научат ненавидеть авто. Сначала матрица и один ручной проход, потом три-пять кейсов, не сорок.
UI-авто поверх того же потока не заменяет API-слой. Кнопка может не нажаться, а метод уже сломан. Если цель — контракт сервера, бейте в метод. UI — другой риск. Резюме, где Selenium вместо API на junior, часто слабее, чем честные проверки запросов: снова навыки.