# Как можно протестировать API, что там нужно проверять?

### 1️⃣ Типы тестирования API

1. **Функциональное тестирование**
   * Проверяем, что API делает то, что должно.
   * Примеры:
     * Запрос к `/users/123` возвращает пользователя с ID 123.
     * При создании нового ресурса возвращается корректный `status code` (201 Created) и тело ответа с нужными полями.
     * Валидация входных данных: что происходит при передаче пустых, неверных или неожиданных значений.
2. **Тестирование ошибок и граничных значений**
   * Проверяем, как API реагирует на некорректные данные.
   * Примеры:
     * Неверный формат JSON.
     * Пустые или лишние поля.
     * Некорректные параметры запроса.
   * Ожидается, что сервер возвращает корректные ошибки (например, 400, 404, 422).
3. **Тестирование производительности**
   * Проверка скорости ответа и устойчивости под нагрузкой.
   * Примеры:
     * Сколько времени занимает обработка запроса.
     * Как API ведет себя при 1000 одновременных запросах.
   * Используют инструменты типа JMeter, Locust, k6.
4. **Тестирование безопасности**
   * Проверяем авторизацию и аутентификацию.
   * Примеры:
     * Доступ к приватным ресурсам без токена запрещен (401/403).
     * Попытки SQL/XXS-инъекций.
     * Ограничения на количество запросов (rate limiting).
5. **Тестирование совместимости / интеграции**
   * Проверяем, как API взаимодействует с другими сервисами.
   * Примеры:
     * API внешней оплаты правильно обрабатывает статусы платежей.
     * Вебхуки приходят и обрабатываются корректно.

***

### 2️⃣ Что проверять в каждом запросе

1. **HTTP-статус коды**
   * 2xx — успех (200, 201, 204)
   * 4xx — ошибки клиента (400, 401, 403, 404, 422)
   * 5xx — ошибки сервера (500, 502, 503)
2. **Тело ответа (Response Body)**
   * Формат (JSON, XML и т.д.)
   * Корректные поля и значения
   * Отсутствие лишних данных
3. **Заголовки (Headers)**
   * Content-Type (`application/json`)
   * Авторизация, CORS, кеширование
4. **Время отклика**
   * API не должно отвечать слишком медленно (обычно <1–2 сек для большинства эндпоинтов)
5. **Состояние сервера после запроса**
   * Например, при создании/удалении ресурса, данные должны реально появляться или удаляться в базе

***

### 3️⃣ Инструменты для тестирования API

* **Postman / Insomnia** — ручное тестирование и коллекции тестов.
* **Swagger / OpenAPI** — документация + тестирование.
* **Automated testing**:
  * Python: `requests`, `pytest` + `pytest-httpx`
  * JS: `axios` + `jest` / `mocha`
  * Java: `RestAssured`
* **Load testing**: JMeter, Locust, k6


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/web/kak-mozhno-protestirovat-api-chto-tam-nuzhno-proveryat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
