Что нужно тестировать в API помимо тела запроса?

«Что нужно тестировать в API помимо тела запроса?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При тестировании API я проверяю целый спектр аспектов, выходящих далеко за рамки тела запроса. Вот мой чек-лист ключевых областей:

1. Заголовки запроса и ответа (Headers):

  • Authorization / Api-Key: Корректность токенов, проверка доступа для разных ролей, истечение срока действия.
  • Content-Type / Accept: Соответствие форматам данных (см. вопрос про 415 ошибку).
  • Cache-Control, ETag: Поведение кеширования.
  • Кастомные заголовки, специфичные для проекта.

2. Коды состояния HTTP (Status Codes): Валидация, что API возвращает семантически правильные коды:

  • 200 OK для успешного GET.
  • 201 Created для успешного создания ресурса POST.
  • 400 Bad Request при невалидных данных от клиента.
  • 401 Unauthorized / 403 Forbidden при проблемах с аутентификацией/авторизацией.
  • 404 Not Found для несуществующих ресурсов.
  • 429 Too Many Requests при превышении лимитов (Rate Limiting).
  • 5xx для серверных ошибок.

3. Структура и валидность тела ответа (Response Schema): Использую JSON Schema или аналоги для строгой проверки:

  • Наличие обязательных полей.
  • Корректность типов данных (string, number, boolean, array).
  • Форматы данных (date-time, email, uuid).

4. Параметры пути и строки запроса (Path/Query Parameters):

  • Path params: GET /users/{id} – проверка валидных и невалидных ID.
  • Query params: GET /items?type=book&sort=-price – проверка фильтрации, сортировки, пагинации (limit, offset), значений по умолчанию.

5. Производительность и временные характеристики:

  • Response Time: Укладывается ли в SLA (например, < 200 мс для 95% запросов).
  • Load Testing: Как ведет себя API под пиковой нагрузкой.

6. Обработка ошибок (Error Handling):

  • Читаемость и информативность сообщений об ошибках.
  • Консистентность формата ошибок для всех эндпоинтов.

Пример комплексной проверки на Python:

import requests
import jsonschema
from schemas import USER_SCHEMA  # Наша JSON Schema

def test_get_user_full():
    # 1. Отправляем запрос с параметрами и заголовком
    response = requests.get(
        'https://api.example.com/users/123',
        headers={'Authorization': 'Bearer valid_token'},
        params={'fields': 'name,email'}
    )

    # 2. Проверяем статус-код
    assert response.status_code == 200

    # 3. Проверяем заголовок ответа
    assert response.headers['Content-Type'] == 'application/json'

    response_data = response.json()

    # 4. Валидируем схему ответа
    jsonschema.validate(instance=response_data, schema=USER_SCHEMA)

    # 5. Проверяем бизнес-логику: поля соответствуют запросу
    assert all(field in response_data for field in ['id', 'name', 'email'])
    assert 'password' not in response_data  # Конфиденциальные данные не "светятся"

    # 6. Проверяем время ответа (условно)
    assert response.elapsed.total_seconds() < 1.0