Ответ
HTTP-коды состояния сгруппированы в пять классов, определяемых первой цифрой кода:
| Класс | Описание | Примеры |
|---|---|---|
| 1xx (Информационные) | Сервер получил запрос и продолжает обработку. | 100 Continue, 101 Switching Protocols |
| 2xx (Успешные) | Запрос был успешно получен, понят и обработан. | 200 OK, 201 Created, 204 No Content |
| 3xx (Перенаправления) | Для завершения запроса требуется дополнительное действие (обычно — переход по другому URI). | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx (Ошибки клиента) | Запрос содержит ошибку или не может быть выполнен сервером из-за действий клиента. | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx (Ошибки сервера) | Сервер не смог выполнить заведомо корректный запрос. | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
Почему это важно для тестирования: Анализ кода ответа — первичный способ определения успешности или характера сбоя API-запроса.
Пример проверки в автотесте (Python + pytest):
import requests
def test_get_user_success():
response = requests.get("https://api.example.com/users/1")
# Проверяем, что запрос успешен (код 2xx)
assert response.status_code == 200
# Или проверяем конкретный код
assert response.status_code == requests.codes.ok # то же, что и 200
def test_get_user_not_found():
response = requests.get("https://api.example.com/users/99999")
# Проверяем, что ресурс не найден
assert response.status_code == 404 Ответ 18+ 🔞
А, слушай, вот это тема, про которую каждый второй думает: "Да похуй, главное 200 или 404". А потом сидит и чешет репу, почему у него тесты ебутся, а в логах пиздец.
Короче, смотри. Все эти цифры, которые сервер тебе плюёт в ответ — они не просто так. Они разбиты на пять семейств, как по зоне. И каждая цифра в начале — это как нашивка, сразу понятно, с кем имеешь дело.
| Класс | Что означает, если по-русски | Примеры, которые все видели |
|---|---|---|
| 1xx (Информашка) | Сервер такой: "Чувак, я твой запрос услышал, не перебивай, я думаю". Это как "минуточку" в техподдержке. | 100 Continue (продолжай слать), 101 Switching Protocols (меняю протокол, не паникуй) |
| 2xx (Успех, ёпта!) | Всё прошло гладко, как по маслу. Запрос пришёл, был понят, и сервер сделал ровно то, что от него хотели. | 200 OK (всё заебись, держи ответ), 201 Created (создал твою хуйню), 204 No Content (сделал, но хвастаться нечем) |
| 3xx (Перенаправления) | Сервер такой: "То, что тебе надо, теперь живёт вот там. Иди, не отвлекай меня". Клиент должен сделать ещё один запрос по новому адресу. | 301 Moved Permanently (переехал навсегда, запомни новый адрес), 302 Found (временно тут, но ищи там), 304 Not Modified (ничего не поменялось, бери из кэша) |
| 4xx (Ошибки клиента) | Вот это, блядь, самое важное! Ошибка ТВОЯ. Ты накосячил: запрос кривой, без пароля, без прав или просто спросил какую-то дичь, которой нет. | 400 Bad Request (ты мне какую-то хуйню прислал), 401 Unauthorized (а кто ты такой?), 403 Forbidden (ты кто такой, чтобы сюда лезть?), 404 Not Found (классика: тут нет того, что ты ищешь, иди нахуй) |
| 5xx (Ошибки сервера) | А вот это уже ЕГО проблемы. Запрос-то был нормальный, годный, но у сервака крыша поехала: код сломался, база легла, соседний сервис сдох. | 500 Internal Server Error (у меня внутри всё горит, сам в шоке), 502 Bad Gateway (я спросил у соседа, а он мне какую-то дичь ответил), 503 Service Unavailable (я сейчас не могу, занят, заходи позже) |
Нахуй это всё тестировщику? Да затем, что это первый и главный признак, жив запрос или нет. Не стал читать JSON, не стал парсить XML — сначала глянул статус. Не 2xx? Значит, пошло что-то не так. 4xx? Ищи косяк в своём запросе, мудак. 5xx? Беги к разработчикам и кричи, что их сервер — манда с ушами.
Как это в тестах выглядит, чтоб не быть распиздяем:
import requests
def test_get_user_success():
response = requests.get("https://api.example.com/users/1")
# Проверяем, что запрос успешен (код 2xx)
assert response.status_code == 200
# Или проверяем конкретный код
assert response.status_code == requests.codes.ok # то же, что и 200
def test_get_user_not_found():
response = requests.get("https://api.example.com/users/99999")
# Проверяем, что ресурс не найден
assert response.status_code == 404
Вот и вся магия. Главное — не путать, когда ты сам идиот (4xx), а когда идиоты на той стороне (5xx). А то ведь бывает, начнёшь орать на бэкендера из-за своей же кривой JSON-ы, а потом охуеешь от стыда.