Ответ
В тестировании REST API я постоянно работаю со стандартными HTTP-методами, которые соответствуют операциям CRUD:
- GET: Запрос данных от сервера. Использую для проверки получения ресурсов (например, списка пользователей). Должен быть безопасным (не менять состояние) и идемпотентным.
- POST: Отправка данных для создания нового ресурса. Тестирую создание сущностей, валидацию входящих данных и коды ответа (201 Created).
- PUT: Полное обновление существующего ресурса. Проверяю замену всех полей объекта.
- PATCH: Частичное обновление ресурса. Тестирую сценарии, когда нужно изменить только одно-два поля.
- DELETE: Удаление ресурса. Проверяю, что ресурс действительно удаляется и возвращается корректный статус (204 No Content).
- HEAD, OPTIONS: Использую реже, в основном для проверки метаданных или CORS-заголовков.
Пример теста на Python с библиотекой requests:
import requests
# Тестирование GET-запроса
response = requests.get('https://api.example.com/v1/users/123')
assert response.status_code == 200
assert response.json()['id'] == 123
# Тестирование POST-запроса с передачей тела
new_user = {'name': 'Alice', 'email': 'alice@example.com'}
response = requests.post('https://api.example.com/v1/users', json=new_user)
assert response.status_code == 201
assert 'id' in response.json()
При тестировании важно проверять не только успешные сценарии, но и обработку ошибок (4xx, 5xx), а также соблюдение принципов идемпотентности и безопасности методов.
Ответ 18+ 🔞
А, ну это ж про наши любимые HTTP-методы, ебать мои старые костыли! Сидишь, тестишь эти REST API, а там всё по полочкам, как в армии. Каждый метод — свой чин, свои обязанности. Слушай, разложу как есть.
GET — это наш разведчик, тихий и незаметный. Его задача: сходить, посмотреть, что там на сервере лежит, и вернуться с докладом. Ничего не трогает, не ломает. Просто читает. Идемпотентный, то есть сколько раз ни кинь — хуй с горы, всегда один результат должен быть. Тестишь — проверяешь, что список пользователей приходит, а не счёт на оплату за электричество.
POST — это уже десантник, создатель. Прилетает с пачкой данных и говорит: «Принимай нового рекрута!». Тестишь создание всего: юзеров, заказов, котиков. Главное — смотреть, чтобы в ответе был статус 201 Created, а не какая-нибудь херня. И чтобы ID новому созданцу присвоили, а то без паспорта затеряется.
PUT — это переписчик истории, ёпта. Приходит и говорит: «Всё, что было про этого пользователя — забыли. Вот новый паспорт, новые данные, живите с этим». Полное обновление, с ног до головы. Проверяешь, что старые поля нахуй сгинули, а новые — на месте.
PATCH — его младший брат, хитрая жопа. Не хочет весь объект таскать, только точечно исправить. «У этого юзера только email поменялся, остальное оставь». Тестишь именно такие сценарии — поменял один атрибут, а остальные как были, так и остались.
DELETE — ликвидатор. Пришёл, увидел, стёр с лица сервера. Проверяешь, что после него ресурс реально исчезает, а в ответе красуется гордый 204 No Content — мол, работа сделана, вопросов нет.
Ну а HEAD с OPTIONS — это такие штабные писари. Редко нужны, но без них иногда никуда. Один заголовки проверяет, другой по CORS'у отчитывается.
Вот, смотри, как на Python с requests это выглядит, простейший пример:
import requests
# GET-запрос — пошёл посмотрел, что за юзер под номером 123
response = requests.get('https://api.example.com/v1/users/123')
assert response.status_code == 200 # Должен ответить "ок"
assert response.json()['id'] == 123 # И в теле именно тот ID, который просили
# POST-запрос — создаём новую Алису
new_user = {'name': 'Alice', 'email': 'alice@example.com'}
response = requests.post('https://api.example.com/v1/users', json=new_user)
assert response.status_code == 201 # Обязательно 201 — создано!
assert 'id' in response.json() # И сервер должен выдать новоиспечённый ID
Но это всё, конечно, цветочки. Ягодки начинаются, когда тестишь не только радужные сценарии. Обязательно надо проверить, как API отбивается от кривых данных — ошибки 4xx (это клиент накосячил) и 5xx (это сервер грохнулся). И святое — принципы идемпотентности и безопасности. Чтобы GET сто раз не создал сто заказов, а DELETE, выполненный дважды, не вызвал ошибку «уже удалён». В общем, доверия ебать ноль, проверяй всё до последнего байта.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶