На что обращать внимание при тестировании HTTP-метода POST в REST API?

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

Ответ

POST используется для создания новых ресурсов. Тестирование фокусируется на корректности создания, валидации входных данных и обработке всех возможных сценариев.

Критические области для проверки:

  1. Успешное создание (Happy Path):

    • Код ответа: 201 Created — стандартный код при успешном создании. Ответ должен содержать заголовок Location с URI созданного ресурса.
    • Тело ответа: Должно содержать полное представление созданного объекта, включая сгенерированные сервером поля (ID, даты).
    • Пример успешного запроса:
      curl -X POST https://api.example.com/users 
        -H "Content-Type: application/json" 
        -d '{"name": "Alice", "email": "alice@example.com"}'
  2. Валидация входных данных:

    • Обязательные поля: Отсутствие обязательного поля должно возвращать 400 Bad Request с понятным сообщением об ошибке.
    • Форматы данных: Проверка валидации email, телефона, дат, числовых диапазонов.
    • Ограничения (Constraints): Максимальная длина строк, уникальность значений (например, email). Нарушение должно возвращать 409 Conflict или 422 Unprocessable Entity.
  3. Обработка ошибок и граничные случаи:

    • Некорректный Content-Type: Запрос с text/plain вместо application/json должен возвращать 415 Unsupported Media Type.
    • Невалидный JSON: 400 Bad Request.
    • Дубликаты: Повторная отправка идентичных данных (если это запрещено бизнес-логикой) — 409 Conflict.
    • Большие объемы данных: Отправка тела запроса, превышающего лимит сервера.
  4. Побочные эффекты: Создание ресурса через POST может запускать другие процессы (отправка email, обновление связанных сущностей). Необходимо проверять эти корреляции.

Инструменты: Postman (коллекции, окружения), Swagger/OpenAPI для документации, автотесты на Python (requests, pytest) или JavaScript (axios, jest).