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

Как подменял запрос в Charles

2.0 Middle🔥 171 комментариев
#Инструменты тестирования

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

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

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

Подмена запросов в Charles Proxy

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

Основные методы подмены запросов в Charles

  1. Breakpoints (Точки останова)
    Позволяют перехватывать запросы или ответы перед их отправкой/получением, чтобы вручную изменить данные. Это идеально для проверки обработки ошибок или нестандартных ответов.
    Процесс:

    • Включаем точки останова для нужного домена или конкретного URL в меню Proxy > Breakpoint Settings.
    • Выполняем действие в приложении, которое вызывает целевой запрос.
    • Charles приостанавливает выполнение, отображая перехваченный запрос.
    • Модифицируем данные (например, меняем статус-код на 500 или редактируем JSON-тело).
    • Нажимаем Execute для отправки изменённого запроса или ответа.

    Пример изменения JSON в точке останова:

    // Оригинальный ответ
    {"status": "success", "balance": 100}
    
    // Изменённый ответ для тестирования
    {"status": "error", "balance": -50, "code": "INSUFFICIENT_FUNDS"}
    
  2. Map Local (Локальная подмена)
    Заменяет удалённые ресурсы локальными файлами, что удобно для тестирования новых версий API без развёртывания на сервере. Используется через Tools > Map Local.
    Сценарий: Подмена ответа API локальным JSON-файлом для проверки отображения данных в приложении.

  3. Rewrite (Перезапись)
    Автоматически изменяет части запросов или ответов по заданным правилам. Настраивается в Tools > Rewrite. Позволяет, например, добавлять заголовки, менять домены или модифицировать тело.
    Пример правила Rewrite:

    • Тип: Body > JSON
    • Где: {"status": "success"}
    • Заменить на: {"status": "failure"}
  4. Throttling (Искусственная задержка)
    Хотя это не прямая подмена, в Proxy > Throttling Settings можно эмулировать медленные сети (3G, Edge), что помогает тестировать поведение приложения в условиях нестабильного соединения.

Практические примеры из моего опыта

  • Тестирование обработки ошибок:
    С помощью Breakpoints изменял статус-код ответа с 200 на 404 или 500, чтобы убедиться, что приложение корректно отображает сообщения об ошибках и не крашится.

  • Подмена данных для сценариев безопасности:
    Использовал Rewrite, чтобы добавить в запрос невалидные токены или изменить параметры авторизации, проверяя защиту от несанкционированного доступа.

  • Эмуляция различных состояний сервера:
    Через Map Local подменял ответы API на заранее подготовленные файлы с данными для тестирования граничных условий (например, пустые списки, некорректные форматы данных).

Важные аспекты и ограничения

  • HTTPS-трафик: Для перехвата HTTPS необходимо установить SSL-сертификат Charles на устройстве и добавить домены в список SSL Proxying Settings. Без этого трафик будет зашифрованным и недоступным для модификации.
  • Автоматизация: Charles не предназначен для полной автоматизации тестов. Для CI/CD-процессов лучше использовать инструменты вроде WireMock или mitmproxy, которые интегрируются со скриптами.
  • Осторожность с продакшеном: Подмену запросов следует выполнять только в тестовых средах, чтобы избежать случайного воздействия на реальные данные пользователей.

В заключение, Charles предоставляет гибкий набор инструментов для подмены запросов, что делает его незаменимым в арсенале QA-инженера для ручного и исследовательского тестирования. Комбинируя методы Breakpoints, Rewrite и Map Local, можно эффективно моделировать сложные сценарии, выявляя уязвимости и улучшая качество продукта.