← Назад к вопросам

Как подменял ответ в Charles

2.0 Middle🔥 181 комментариев
#Тестирование API

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

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

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

Подмена ответа сервера в Charles

Подмена (или модификация) ответа сервера в Charles Proxy — это мощная техника, используемая QA-инженерами для тестирования различных сценариев без необходимости изменять реальный бэкенд или ждать его готовности. Это позволяет имитировать состояния системы, которые сложно или долго воспроизводить вручную.

Основные сценарии использования подмены ответа:

  • Тестирование обработки ошибок: Имитация ответов с кодами 4xx/5xx (например, 404, 500, 502) для проверки устойчивости фронтенда.
  • Проверка граничных условий и валидации: Подстановка некорректных данных, пустых массивов, null-значений, очень длинных строк.
  • Тестирование UI при разных данных: Эмуляция ответов с большим/малым количеством элементов, особыми статусами заказов, пустыми результатами поиска.
  • Ускорение тестирования: Локальное создание данных для отладки, когда бэкенд ещё не реализовал нужный эндпоинт.
  • Тестирование локализации: Подмена текстовых полей для проверки корректного отображения интерфейса.

Пошаговый метод подмены через Breakpoints

Это самый гибкий и часто используемый способ, позволяющий перехватывать и редактировать запросы/ответы «на лету».

  1. Настройка перехвата (Breakpoint):
    *   В дереве запросов Charles найдите нужный домен и путь (например, `GET /api/user/profile`).
    *   Кликните правой кнопкой мыши и выберите **Breakpoints**.
    *   Или перейдите в меню **Proxy -> Breakpoint Settings** и добавьте URL (можно использовать `*` как wildcard).

  1. Перехват и редактирование запроса:
    *   После включения Breakpoint выполните действие в приложении, которое вызовет нужный запрос.
    *   Charles приостановит выполнение на этапе запроса (до отправки на сервер). Здесь можно отредактировать заголовки или тело запроса (если это POST/PUT).
    *   Нажмите **Execute**, чтобы отправить модифицированный запрос дальше.

  1. Перехват и редактирование ответа (собственно подмена):
    *   После отправки запроса Charles приостановит выполнение снова, но теперь на этапе **ответа** от сервера. Это ключевой момент для подмены.
    *   Во вкладке **Edit Response** вы можете изменить:
        *   **Статус код** (например, с 200 на 404).
        *   **Заголовки**.
        *   **Тело ответа** (во вкладках `JSON`, `Text`, `Hex`). Это основное поле для редактирования.

```json
// Пример: исходный успешный ответ от /api/order/123
{
  "status": "success",
  "order": {
    "id": 123,
    "total": 99.99,
    "items": ["Item A", "Item B"]
  }
}

// Пример подмены на ответ с ошибкой (вкладка JSON)
{
  "status": "error",
  "code": "ORDER_NOT_FOUND",
  "message": "Запрошенный заказ не существует или был удален."
}
```

4. Завершение операции: После внесения изменений нажмите Execute. Charles отправит модифицированный ответ вашему приложению, которое обработает его как реальный.

Альтернативный метод: Map Local / Map Remote

Эти методы полезны для постоянной или массовой подмены без интерактивного перехвата.

  • Map Local: Заменяет ответ от удалённого сервера содержимым локального файла. Идеально для прототипирования или подмены больших JSON-схем.
    *   **Tools -> Map Local**
    *   Добавьте правило, указав URL и выбрав локальный `.json`/`.txt` файл.
    *   Все последующие запросы по этому URL будут возвращать данные из файла.

  • Map Remote: Перенаправляет запрос с одного URL на другой. Может использоваться для подмены, если у вас есть тестовый стенд с готовыми ответами.
    *   **Tools -> Map Remote**
    *   Настройте правило: `http://original-api.com/data` -> `http://test-stub.com/mock-data`.

Критические аспекты для QA-инженера

  1. Контекст тестирования: Всегда четко понимай, какой именно сценарий ты проверяешь с помощью подмены. Фиксируй это в тест-кейсе или баг-репорте.
  2. Чистота эксперимента: После завершения теста отключай Breakpoints и правила Map Local/Remote, чтобы не влиять на другие проверки. Используй сессии (Sessions) для изоляции разных тестовых наборов.
  3. Работа с HTTPS: Для расшифровки HTTPS-трафика необходимо установить сертификат Charles в систему и в доверенные корневые центры эмулятора/устройства. Без этого трафик будет зашифрован.
  4. Валидность данных: Подменённый ответ, особенно в JSON, должен сохранять корректную структуру (синтаксис, типы данных), иначе приложение может упасть с ошибкой парсинга, что не является целью теста.
  5. Инструмент отладки: Подмена в Charles — это в первую очередь инструмент ручного исследовательского тестирования. Для автоматизации (в CI/CD) подобные задачи решаются с помощью API-мок-серверов (WireMock, MockServer) или интерсепторов на уровне кода/сети (Puppeteer, Cypress, Nock).

Таким образом, владение техниками подмены в Charles — это обязательный навык профессионального QA-инженера, который значительно расширяет возможности по тестированию логики приложения, его устойчивости к сбоям и корректности обработки данных в условиях, максимально приближенных к реальным, но полностью контролируемых тестировщиком.