\",\n \"email\": \"test@example.com\",\n \"age\": 30\n }\n ```\n **Ожидаемый результат:** Данные должны быть санитизированы или отклонены.\n \n - **Отсутствие аутентификации/авторизации**, если эндпоинт защищён.\n **Ожидаемый результат:** `401 Unauthorized` или `403 Forbidden`.\n\n#### 5. **Тестирование производительности**\n - **Нагрузочное тестирование**: множество одновременных POST-запросов.\n - **Большой размер тела запроса** (например, поле `name` с 10 000 символов).\n\n### Пример теста на Python с использованием библиотеки requests\n\n```python\nimport requests\nimport pytest\n\nBASE_URL = \"https://api.example.com\"\n\ndef test_create_user_success():\n \"\"\"Позитивный тест: успешное создание пользователя.\"\"\"\n payload = {\n \"name\": \"Иван Иванов\",\n \"email\": \"ivan@example.com\",\n \"age\": 30\n }\n response = requests.post(f\"{BASE_URL}/api/users\", json=payload)\n \n assert response.status_code == 201\n data = response.json()\n assert \"id\" in data\n assert data[\"name\"] == payload[\"name\"]\n assert data[\"email\"] == payload[\"email\"]\n\ndef test_create_user_missing_email():\n \"\"\"Негативный тест: отсутствие обязательного поля email.\"\"\"\n payload = {\n \"name\": \"Иван Иванов\",\n \"age\": 30\n }\n response = requests.post(f\"{BASE_URL}/api/users\", json=payload)\n \n assert response.status_code == 400\n error_data = response.json()\n assert \"error\" in error_data\n assert \"email\" in error_data[\"error\"].lower()\n\ndef test_create_user_duplicate_email():\n \"\"\"Негативный тест: попытка создать пользователя с уже существующим email.\"\"\"\n payload = {\n \"name\": \"Иван Иванов\",\n \"email\": \"duplicate@example.com\",\n \"age\": 30\n }\n # Первый запрос — успешное создание\n requests.post(f\"{BASE_URL}/api/users\", json=payload)\n # Второй запрос — ожидаем ошибку\n response = requests.post(f\"{BASE_URL}/api/users\", json=payload)\n \n assert response.status_code in [400, 409]\n```\n\n### Ключевые аспекты для проверки в POST-запросах\n\n- **Коды ответа HTTP**: `201 Created` при успехе, `400` при ошибке клиента, `5xx` при ошибке сервера.\n- **Тело ответа**: Должно соответствовать контракту API (формат JSON, XML).\n- **Заголовки ответа**: Например, `Location` для созданного ресурса.\n- **Сохранение данных**: Проверка, что данные действительно сохранены в БД.\n- **Валидация данных**: Сервер должен проверять входящие данные.\n- **Идемпотентность**: POST не обязан быть идемпотентным, но это стоит учитывать.\n\nЭти примеры покрывают основные аспекты тестирования POST-запросов, что позволяет обеспечить надежность и безопасность API.","dateCreated":"2026-04-06T16:48:10.327277","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

Приведи пример тестирования POST

1.6 Junior🔥 202 комментариев
#Тестирование API

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Пример тестирования 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.