Как подменял запрос в Charles
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Подмена запросов в Charles Proxy
Charles Proxy — это мощный инструмент для перехвата и модификации сетевого трафика, широко используемый QA-инженерами для тестирования клиент-серверных приложений. Подмена запросов (также известная как rewriting или breakpoints) — одна из ключевых возможностей, позволяющая эмулировать различные сценарии, такие как ошибки сервера, медленные ответы или изменение данных. Я активно использую эту функциональность на протяжении более 10 лет в тестировании API, мобильных и веб-приложений.
Основные методы подмены запросов в Charles
-
Breakpoints (Точки останова)
Позволяют перехватывать запросы или ответы перед их отправкой/получением, чтобы вручную изменить данные. Это идеально для проверки обработки ошибок или нестандартных ответов.
Процесс:- Включаем точки останова для нужного домена или конкретного URL в меню Proxy > Breakpoint Settings.
- Выполняем действие в приложении, которое вызывает целевой запрос.
- Charles приостанавливает выполнение, отображая перехваченный запрос.
- Модифицируем данные (например, меняем статус-код на 500 или редактируем JSON-тело).
- Нажимаем Execute для отправки изменённого запроса или ответа.
Пример изменения JSON в точке останова:
// Оригинальный ответ {"status": "success", "balance": 100} // Изменённый ответ для тестирования {"status": "error", "balance": -50, "code": "INSUFFICIENT_FUNDS"} -
Map Local (Локальная подмена)
Заменяет удалённые ресурсы локальными файлами, что удобно для тестирования новых версий API без развёртывания на сервере. Используется через Tools > Map Local.
Сценарий: Подмена ответа API локальным JSON-файлом для проверки отображения данных в приложении. -
Rewrite (Перезапись)
Автоматически изменяет части запросов или ответов по заданным правилам. Настраивается в Tools > Rewrite. Позволяет, например, добавлять заголовки, менять домены или модифицировать тело.
Пример правила Rewrite:- Тип: Body > JSON
- Где:
{"status": "success"} - Заменить на:
{"status": "failure"}
-
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, можно эффективно моделировать сложные сценарии, выявляя уязвимости и улучшая качество продукта.