Что такое инструмент Charles Proxy и для чего он используется?

«Что такое инструмент Charles Proxy и для чего он используется?» — вопрос из категории Инструменты тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Charles Proxy — это кроссплатформенное программное обеспечение (прокси-сервер), которое выступает в роли промежуточного узла (man-in-the-middle) для перехвата, анализа и модификации HTTP/HTTPS-трафика между клиентским приложением (браузер, мобильное приложение) и сервером. Это незаменимый инструмент для тестирования, отладки и анализа работы с сетью.

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

  • Отладка API: просмотр запросов и ответов в удобном формате (JSON, XML).
  • Тестирование: модификация запросов/ответов «на лету» для проверки поведения приложения.
  • Производительность: анализ времени загрузки ресурсов, эмуляция медленных сетей.
  • Безопасность: проверка передаваемых данных на наличие чувствительной информации.

Ключевые возможности:

Функция Описание
SSL Proxying Расшифровка HTTPS-трафика для его просмотра (требует установки сертификата Charles на устройство).
Breakpoints Остановка запроса или ответа для их модификации перед отправкой. Полезно для тестирования обработки ошибок.
Throttling Имитация различных сетевых условий (3G, медленный Wi-Fi) для тестирования при низкой скорости.
Map Local / Remote Подмена ответа от сервера на содержимое локального файла (Map Local) или перенаправление запроса на другой URL (Map Remote).
Repeat / Compose Повторение выбранного запроса (для воспроизведения сценария) или создание нового запроса вручную.
Rewrite Автоматическое изменение запросов и ответов по заданным правилам (например, подмена заголовков).

Базовый пример настройки и перехвата:

  1. Запустите Charles (по умолчанию слушает порт 8888).
  2. Настройте ваше устройство или браузер использовать Charles как HTTP-прокси.
  3. Установите и доверьте корневой сертификат Charles на устройстве для расшифровки HTTPS.
  4. Весь сетевой трафик начнёт отображаться в интерфейсе.

Пример перехваченного запроса в Charles:

GET /api/v1/products?category=books HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJ...
User-Agent: Mozilla/5.0
Accept: application/json