Какой вид тестирования использовать для проверки POST-запросов API?

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

Ответ

Для тестирования POST-запросов применяется API-тестирование, в частности его функциональная и интеграционная составляющие.

Ключевые аспекты проверки:

  • Коды состояния HTTP: Убедиться, что возвращается корректный статус (например, 201 Created при успешном создании, 400 Bad Request при ошибке валидации).
  • Валидация данных: Проверить обработку обязательных/необязательных полей, корректность форматов (email, даты), граничные значения.
  • Целостность данных: Подтвердить, что отправленные данные корректно сохранились в системе (например, сверив с записью в базе данных).
  • Обработка ошибок: Проверить ответы системы на некорректные, неполные или дублирующиеся данные.
  • Заголовки и метаданные: Убедиться в корректности возвращаемых заголовков (например, Location для созданного ресурса).

Пример теста на Python с использованием библиотеки requests:

import requests

# Эндпоинт и тестовые данные
url = "https://api.example.com/users"
payload = {
    "name": "John Doe",
    "email": "john.doe@example.com"
}

# Выполнение POST-запроса
response = requests.post(url, json=payload)

# Проверки
assert response.status_code == 201, f"Ожидался статус 201, получен {response.status_code}"
response_data = response.json()
assert "id" in response_data, "Ответ не содержит ID созданного пользователя"
assert response_data["name"] == payload["name"], "Имя в ответе не соответствует отправленному"

# Дополнительно: проверка заголовка Location (если предусмотрено)
if 'Location' in response.headers:
    print(f"Ресурс создан по адресу: {response.headers['Location']}")

Дополнительные подходы:

  • Контрактное тестирование: Проверка соответствия API его спецификации (OpenAPI/Swagger).
  • Нагрузочное тестирование: Оценка производительности эндпоинта при множественных параллельных POST-запросах.