Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Пример тестирования POST-запроса
При тестировании POST-запроса, который предназначен для создания новых ресурсов в системе, важно проверить не только "счастливый путь", но и различные граничные условия, ошибки и аспекты безопасности. Рассмотрим пример тестирования эндпоинта POST /api/users, который создаёт нового пользователя.
Тестовые сценарии
1. Позитивное тестирование
- Успешное создание пользователя с валидными данными.
{
"name": "Иван Иванов",
"email": "ivan@example.com",
"age": 30
}
Ожидаемый результат: Код ответа 201 Created, в теле ответа возвращаются данные созданного пользователя, включая уникальный id.
2. Негативное тестирование
- Отсутствие обязательных полей (например,
email).
{
"name": "Иван Иванов",
"age": 30
}
Ожидаемый результат: Код ответа 400 Bad Request с сообщением об ошибке.
- Невалидный формат email.
{
"name": "Иван Иванов",
"email": "invalid-email",
"age": 30
}
Ожидаемый результат: 400 Bad Request.
- Дублирование уникальных данных (например, повторяющийся
email).
{
"name": "Петр Петров",
"email": "ivan@example.com", // уже существует
"age": 25
}
Ожидаемый результат: 409 Conflict или 400 Bad Request.
3. Тестирование граничных значений
- Минимальные/максимальные значения для числового поля
age(например, 0, 150).
{
"name": "Тест",
"email": "test@example.com",
"age": 0
}
Ожидаемый результат: Если age должен быть > 0, то 400 Bad Request.
- Длина строковых полей (например,
nameдлиной 1 символ или 255 символов).
{
"name": "A",
"email": "a@b.com",
"age": 30
}
4. Тестирование безопасности
- Инъекции (SQL, XSS) в полях ввода.
{
"name": "<script>alert('xss')</script>",
"email": "test@example.com",
"age": 30
}
Ожидаемый результат: Данные должны быть санитизированы или отклонены.
- Отсутствие аутентификации/авторизации, если эндпоинт защищён.
Ожидаемый результат:
401 Unauthorizedили403 Forbidden.
5. Тестирование производительности
- Нагрузочное тестирование: множество одновременных POST-запросов.
- Большой размер тела запроса (например, поле
nameс 10 000 символов).
Пример теста на Python с использованием библиотеки requests
import requests
import pytest
BASE_URL = "https://api.example.com"
def test_create_user_success():
"""Позитивный тест: успешное создание пользователя."""
payload = {
"name": "Иван Иванов",
"email": "ivan@example.com",
"age": 30
}
response = requests.post(f"{BASE_URL}/api/users", json=payload)
assert response.status_code == 201
data = response.json()
assert "id" in data
assert data["name"] == payload["name"]
assert data["email"] == payload["email"]
def test_create_user_missing_email():
"""Негативный тест: отсутствие обязательного поля email."""
payload = {
"name": "Иван Иванов",
"age": 30
}
response = requests.post(f"{BASE_URL}/api/users", json=payload)
assert response.status_code == 400
error_data = response.json()
assert "error" in error_data
assert "email" in error_data["error"].lower()
def test_create_user_duplicate_email():
"""Негативный тест: попытка создать пользователя с уже существующим email."""
payload = {
"name": "Иван Иванов",
"email": "duplicate@example.com",
"age": 30
}
# Первый запрос — успешное создание
requests.post(f"{BASE_URL}/api/users", json=payload)
# Второй запрос — ожидаем ошибку
response = requests.post(f"{BASE_URL}/api/users", json=payload)
assert response.status_code in [400, 409]
Ключевые аспекты для проверки в POST-запросах
- Коды ответа HTTP:
201 Createdпри успехе,400при ошибке клиента,5xxпри ошибке сервера. - Тело ответа: Должно соответствовать контракту API (формат JSON, XML).
- Заголовки ответа: Например,
Locationдля созданного ресурса. - Сохранение данных: Проверка, что данные действительно сохранены в БД.
- Валидация данных: Сервер должен проверять входящие данные.
- Идемпотентность: POST не обязан быть идемпотентным, но это стоит учитывать.
Эти примеры покрывают основные аспекты тестирования POST-запросов, что позволяет обеспечить надежность и безопасность API.