← Назад к вопросам

Какие знаешь коды ошибок и состояния сервера?

1.0 Junior🔥 241 комментариев
#API тестирование#Теория тестирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Коды ошибок и состояния сервера

HTTP Статус Коды

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 — ресурс не найден
  • 409 Conflict — конфликт данных
  • 422 Unprocessable Entity — ошибка валидации
  • 429 Too Many Requests — превышен лимит

5xx — Ошибки сервера:

  • 500 Internal Server Error — внутренняя ошибка
  • 502 Bad Gateway — некорректный ответ от шлюза
  • 503 Service Unavailable — сервис недоступен
  • 504 Gateway Timeout — превышено время ожидания

Проверка статус кодов в тестировании

import requests
import pytest

def test_successful_request():
    response = requests.get('https://api.example.com/users')
    assert response.status_code == 200

def test_resource_created():
    response = requests.post('https://api.example.com/users',
        json={'name': 'John'})
    assert response.status_code == 201

def test_invalid_request():
    response = requests.post('https://api.example.com/users',
        json={})  # Пустой JSON
    assert response.status_code == 400

def test_unauthorized():
    response = requests.get('https://api.example.com/admin')
    assert response.status_code == 401

def test_not_found():
    response = requests.get('https://api.example.com/users/999')
    assert response.status_code == 404

def test_server_error():
    response = requests.get('https://api.example.com/broken')
    assert response.status_code == 500

Состояния сервера

UP — сервер работает корректно DOWN — сервер не отвечает (сетевая ошибка) DEGRADED — частичная функциональность MAINTENANCE — плановое обслуживание

Health Check

def test_health_check():
    response = requests.get('https://api.example.com/health')
    assert response.status_code == 200
    data = response.json()
    assert data['status'] == 'healthy'
    assert data['services']['database'] == 'ok'
    assert data['services']['cache'] == 'ok'

Обработка ошибок в тестах

import pytest
from requests.exceptions import ConnectionError, Timeout

def test_connection_error():
    with pytest.raises(ConnectionError):
        requests.get('https://nonexistent.example.com')

def test_timeout():
    with pytest.raises(Timeout):
        requests.get('https://slow.example.com', timeout=1)

Логирование ошибок

import logging

logger = logging.getLogger(__name__)

def handle_error_response(response):
    if response.status_code >= 400:
        logger.error(f"Error {response.status_code}: {response.text}")
        if response.status_code >= 500:
            logger.critical("Server error detected!")

Для эффективного тестирования необходимо проверять все коды ошибок, а не только успешные 200 ответы.

Какие знаешь коды ошибок и состояния сервера? | PrepBro