Charles Proxy
Что такое Charles Proxy?
Charles Proxy - это HTTP прокси / HTTP монитор / Reverse Proxy, который позволяет тестировщику просматривать весь HTTP и SSL/HTTPS трафик между компьютером и интернетом. Это незаменимый инструмент для:
- Анализа API запросов и ответов
- Отладки проблем с сетевыми запросами
- Тестирования различных сценариев путем модификации запросов
- Имитации медленного соединения или сетевых ошибок
- Тестирования мобильных приложений
Установка и первоначальная настройка
Установка Charles
- Скачайте Charles с официального сайта: https://www.charlesproxy.com/
- Установите программу (30-дневная пробная версия)
- Запустите Charles
Базовая настройка
- Включите запись трафика: Proxy → Start Recording (Cmd/Ctrl+R)
- Настройте браузер: Charles автоматически настроит системный прокси
- Проверьте работу: Откройте любой сайт и убедитесь, что трафик отображается
Настройка HTTPS
Для просмотра HTTPS трафика:
- Help → SSL Proxying → Install Charles Root Certificate
- Добавьте сайты для SSL Proxying:
- Proxy → SSL Proxying Settings
- Add: Host:
*
, Port:443
- В браузере доверьте сертификату Charles
Основной интерфейс
Structure View (Структурированный вид)
- Показывает запросы сгруппированные по доменам
- Удобен для анализа конкретных сайтов
- Иерархическая структура URL
Sequence View (Последовательный вид)
- Показывает все запросы в хронологическом порядке
- Удобен для анализа временной последовательности
- Показывает timing каждого запроса
Основные панели
- Request - детали исходящего запроса
- Response - детали входящего ответа
- Summary - краткая информация о запросе
- Chart - временная диаграмма запроса
Анализ HTTP запросов
Просмотр деталей запроса
Request (Запрос):
GET /api/v1/users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Response (Ответ):
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 245
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"status": "active"
}
Анализ производительности
Timing информация:
- DNS Lookup - время поиска IP адреса
- Connect - время установки соединения
- SSL Handshake - время SSL рукопожатия
- Request - время отправки запроса
- Response - время получения ответа
Поиск медленных запросов:
- Сортируйте по столбцу "Duration"
- Ищите запросы с временем > 1-2 секунд
- Анализируйте bottlenecks в timing диаграмме
Модификация запросов и ответов
Breakpoints (Точки останова)
Настройка Breakpoint:
- Выберите запрос
- Proxy → Breakpoint Settings
- Добавьте URL или используйте правый клик → "Breakpoints"
Типы Breakpoints:
- Request - остановка перед отправкой запроса
- Response - остановка перед получением ответа
Модификация в реальном времени:
Исходный запрос:
POST /api/login
{"username": "test", "password": "123"}
Модифицированный запрос:
POST /api/login
{"username": "admin", "password": "admin123"}
Map Remote (Перенаправление)
Использование: Перенаправление запросов с одного сервера на другой
Настройка:
- Tools → Map Remote
- Add Mapping:
- From:
https://api.prod.com/api/v1/
- To:
https://api.test.com/api/v1/
- From:
Применение:
- Тестирование с разными средами
- Использование mock серверов
- Отладка с локальными сервисами
Map Local (Локальная замена)
Использование: Замена ответов сервера локальными файлами
Настройка:
- Tools → Map Local
- Add Mapping:
- URL:
https://api.example.com/api/users
- Local Path:
/path/to/mock-users.json
- URL:
Файл mock-users.json:
{
"users": [
{"id": 1, "name": "Test User 1"},
{"id": 2, "name": "Test User 2"}
]
}
Rewrite (Переписывание)
Автоматическая модификация:
- Tools → Rewrite
- Add Set и настройте правила
Примеры правил:
- Добавление заголовков
- Изменение URL параметров
- Модификация тела запроса/ответа
Имитация сетевых условий
Throttling (Ограничение скорости)
Настройка:
- Proxy → Throttle Settings
- Выберите предустановленные настройки или создайте свои
Предустановки:
- 56k Modem - 56 kbit/s
- 3G - 1.6 Mbps down, 768 kbps up
- 4G - 12 Mbps down, 5 Mbps up
Применение:
- Тестирование на медленных соединениях
- Проверка поведения при загрузке
- Оптимизация производительности
No Caching (Отключение кэша)
Настройка: Proxy → Proxy Settings → Web Interface Включите "No Caching"
Результат:
- Браузер не будет использовать кэшированные ресурсы
- Все запросы будут выполняться заново
- Полезно для тестирования обновлений
Тестирование мобильных приложений
Настройка для iOS/Android
Настройка Charles:
- Help → Local IP Address - запомните IP адрес
- Proxy → Proxy Settings - убедитесь что порт 8888 включен
Настройка мобильного устройства:
- Подключите устройство к той же Wi-Fi сети
- Настройки Wi-Fi → Прокси → Ручной:
- Сервер: IP адрес Charles
- Порт: 8888
Для HTTPS на мобильных:
- На устройстве откройте
http://chls.pro/ssl
- Установите сертификат Charles
- iOS: Настройки → Основные → Об этом устройстве → Доверие к сертификатам
- Android: Настройки → Безопасность → Доверенные учетные данные
Анализ мобильного трафика
Фильтрация запросов:
Filter: *.myapp.com
Показывает только запросы к серверам приложения
Поиск проблем:
- Ошибки 4xx/5xx в API запросах
- Медленные запросы (> 5 секунд)
- Большие размеры ответов
- Неэффективные запросы (множественные вызовы)
Практические сценарии тестирования
1. Тестирование API авторизации
Сценарий: Проверить, как приложение обрабатывает различные ответы сервера авторизации
Шаги:
- Настройте Breakpoint на
/api/auth/login
- Выполните вход в приложение
- Измените ответ сервера:
Оригинал:
{"success": true, "token": "abc123"}
Тест 1 - Ошибка сервера:
{"success": false, "error": "Invalid credentials"}
Тест 2 - Медленный ответ:
Добавьте задержку в 10 секунд
2. Тестирование обработки ошибок
Map Local для имитации ошибок:
500_error.json:
{
"error": "Internal Server Error",
"message": "Database connection failed"
}
404_error.json:
{
"error": "Not Found",
"message": "User not found"
}
Применение:
- Настройте Map Local для API endpoints
- Проверьте как приложение отображает ошибки
- Убедитесь в корректной обработке каждого статус-кода
3. Тестирование загрузки файлов
Throttling для медленной загрузки:
- Настройте очень медленное соединение (56k)
- Попробуйте загрузить большой файл
- Проверьте:
- Показывается ли прогресс загрузки
- Можно ли отменить загрузку
- Как обрабатываются таймауты
4. Тестирование кэширования
Проверка HTTP кэширования:
- Выполните запрос к API
- Проверьте заголовки кэширования:
Cache-Control: max-age=3600
ETag: "abc123"
Last-Modified: Wed, 15 Jan 2024 14:30:00 GMT
- Повторите запрос и проверьте использование кэша
- Используйте No Caching для принудительного обновления
Расширенные возможности
Composer (Создание запросов)
Создание тестовых запросов:
- Tools → Composer
- Настройте запрос:
Method: POST
URL: https://api.example.com/users
Headers:
Content-Type: application/json
Authorization: Bearer token123
Body:
{
"name": "Test User",
"email": "test@example.com"
}
- Нажмите "Execute" для отправки
Repeat (Повторение запросов)
Нагрузочное тестирование:
- Выберите запрос
- Tools → Repeat
- Настройте количество повторений
- Анализируйте производительность при нагрузке
Charts (Графики)
Анализ производительности во времени:
- View → Show Chart
- Показывает время ответа для каждого запроса
- Помогает выявить паттерны производительности
Интеграция с тестированием
Автоматизация с Charles
Экспорт в curl:
# Charles может экспортировать запросы в curl команды
curl -X POST "https://api.example.com/login" \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"123"}'
Экспорт сессий:
- File → Export Session
- Сохранение в различных форматах (HAR, CSV, XML)
Collaboration (Совместная работа)
Sharing sessions:
- File → Save Session
- Отправьте .chls файл коллегам
- Они могут открыть и проанализировать тот же трафик
Полезные горячие клавиши
Cmd/Ctrl + R - Start/Stop Recording
Cmd/Ctrl + K - Clear Session
Cmd/Ctrl + F - Find
Cmd/Ctrl + G - Find Next
Space - Quick Look preview
Delete - Remove selected requests
Cmd/Ctrl + D - Duplicate request
Советы и лучшие практики
Организация тестирования
- Используйте фильтры для конкретных доменов
- Сохраняйте сессии для каждого тест-кейса
- Документируйте найденные проблемы со скриншотами Charles
- Создавайте шаблоны запросов в Composer для повторного использования
Безопасность
- Отключайте Charles когда не тестируете
- Не оставляйте прокси включенным постоянно
- Будьте осторожны с сертификатами на рабочих устройствах
- Не перехватывайте трафик других пользователей
Производительность
- Очищайте сессии регулярно (Cmd/Ctrl + K)
- Используйте фильтры для уменьшения объема данных
- Настройте включение/исключение доменов в Proxy Settings
Заключение
Charles Proxy - мощный инструмент для тестирования сетевого взаимодействия. Он позволяет:
- Глубоко анализировать API трафик
- Имитировать различные сетевые условия
- Тестировать обработку ошибок
- Отлаживать мобильные приложения
- Проводить нагрузочное тестирование
Освоение Charles значительно расширит ваши возможности как тестировщика, особенно при работе с веб и мобильными приложениями.