Какие HTTP-статус коды вы проверяете в API-тестах и что они означают?

«Какие HTTP-статус коды вы проверяете в API-тестах и что они означают?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В API-тестировании проверяю статус-коды из всех основных классов:

Класс Код Значение Когда проверять
2xx (Успех) 200 OK Стандартный ответ для успешных запросов. GET, PUT, PATCH.
201 Created Запрос выполнен, новый ресурс создан. POST при успешном создании.
204 No Content Сервер успешно обработал запрос, но не возвращает контент. DELETE, иногда POST/PUT.
3xx (Перенаправление) 301 Moved Permanently Ресурс навсегда перемещен по новому URI. Проверка корректности редиректа.
4xx (Ошибка клиента) 400 Bad Request Сервер не может обработать запрос из-за синтаксической ошибки. Невалидные входные данные.
401 Unauthorized Требуется аутентификация. Запрос без токена/с неверными кредами.
403 Forbidden Сервер понял запрос, но отказывается его авторизовать. Недостаточно прав.
404 Not Found Сервер не может найти запрашиваемый ресурс. Несуществующий URL или ID.
5xx (Ошибка сервера) 500 Internal Server Error Общая ошибка сервера. Сбой в серверной логике.
502 Bad Gateway Сервер, действуя как шлюз, получил недопустимый ответ. Проблемы с upstream-сервисами.

Пример проверки в тесте:

import requests

# Проверка успешного создания
response = requests.post("https://api.example.com/users", json=user_data)
assert response.status_code == 201, f"Expected 201, got {response.status_code}"

# Проверка обработки ошибки клиента
response = requests.get("https://api.example.com/users/99999")
assert response.status_code == 404, f"Expected 404 for non-existent user"