Proxyman для QA: гайд по перехвату и подмене HTTP-трафика
HTTP/HTTPS-трафик между приложением и сервером — самый частый источник трудноуловимых багов: аналитика, IAP, реклама, remote config, A/B-тесты, push-уведомления. Если вы всё это тестируете «по UI» — половина проблем вам не видна. Proxyman — macOS-приложение, которое перехватывает, показывает и позволяет менять этот трафик в реальном времени. Это must-have для мобильного QA.
Что такое Proxyman
Это локальный HTTP-прокси с GUI. Запускается на Mac → перехватывает трафик с самого Mac и любых устройств, подключённых к той же Wi-Fi сети (iOS, Android, симуляторы). Видит content всех запросов, включая HTTPS — после установки сертификата.
По сути это аналог Charles Proxy и mitmproxy, но с современным UI и фокусом на нативную мобильную разработку. Сайт: proxyman.io.
Зачем мобильному QA
- Видеть, что приложение реально шлёт на сервер: события аналитики, IAP receipts, ad impressions, remote config requests.
- Подменять ответы сервера (Map Local) — тестировать UI на конфигах, которых ещё нет в проде.
- Тормозить сеть — проверять как игра ведёт себя на 3G/2G/packet loss.
- Ставить breakpoint на запрос — на лету менять status code 200 → 500 чтобы протестировать error handling.
- Экспортировать запрос как
curl— копировать в баг-репорт для разработчика, чтобы он одной командой воспроизвёл проблему. - Делать диффы между билдами — что изменилось в API-вызовах между 1.5 и 1.6.
Установка
На Mac
- Скачать с proxyman.io/download (бесплатная версия покрывает 90% задач, Pro — за $69 единоразово).
- Запустить, при первом старте попросит установить self-signed CA сертификат — соглашаемся, ставим в Keychain как Always Trust.
- Trust Mac CA: меню Certificate → Install Certificate on this Mac → ввести пароль.
Подключить iOS-девайс
- В Proxyman: Tools → iOS Device → Setup — увидите IP и порт (обычно 9090).
- На iPhone: Settings → Wi-Fi → информация о текущей сети → Configure Proxy → Manual → ввести IP и порт.
- Открыть Safari на телефоне, перейти на
http://proxy.man/ssl— скачается профиль. - В Settings → General → VPN & Device Management → установить профиль.
- ВАЖНО: Settings → General → About → Certificate Trust Settings → включить тумблер для Proxyman CA. Без этого HTTPS не дешифруется.
Подключить Android-девайс
- Тот же proxy в Wi-Fi-настройках.
- Скачать сертификат с
http://proxy.man/ssl. - Settings → Security → Install certificate → CA certificate.
- Для Android 7+ обычные user-installed сертификаты не работают для приложения, если оно не дебагнутое. Нужен
network_security_config.xmlв манифесте debug-сборки сtrust-anchorsна user CAs. Если ваше приложение это не делает — попросите разработчиков добавить в debug-вариант. - Для emulator: запустить через
emulator -http-proxy http://<mac-ip>:9090.
Ключевые фичи
SSL Proxying — расшифровка HTTPS
По умолчанию Proxyman показывает HTTPS-запросы как зашифрованный «зелёный замок». Чтобы видеть содержимое — правый клик на домене → Enable SSL Proxying. Делать это для всех доменов — плохая идея (системные сервисы зашумят логи). Включайте точечно: ваш API, аналитика, реклама.
Map Local — подмена ответа на локальный JSON
Самая нужная фича для QA. Workflow:
- Поймать запрос (например,
GET /api/levels-config). - Правый клик → Tools → Map Local.
- Указать локальный JSON-файл, который Proxyman будет возвращать вместо ответа сервера.
Юзкейс: разработчики ещё не задеплоили новый формат конфига — вы уже хотите проверить, что UI правильно его отрисует. Пишете JSON, маппите — тестируете без зависимости от бэкенда.
Map Remote — перенаправление на другой URL
Подменяет URL запроса. Юзкейс: dev-сборка по умолчанию бьёт в production-API, а вам нужно в staging. Без перепересборки — добавили правило, и всё.
Breakpoint — пауза посреди запроса
Запрос «зависает» на отправке (Request Breakpoint) или на получении ответа (Response Breakpoint). Открывается окно — редактируете headers, body, status code — нажимаете Execute. Юзкейс: проверить, что приложение корректно обрабатывает 401 / 500 / тайм-аут / пустой ответ. Без участия бэкенд-команды.
Network Conditioner — симуляция плохой связи
Tools → Network Conditions → выбрать профиль: 3G, Edge, packet loss 5%, high latency. Юзкейс: проверить, что игра не виснет при потере соединения посреди загрузки уровня, а корректно показывает retry-popup.
Composer — посылать кастомные запросы
Аналог Postman внутри Proxyman. Юзкейс: взяли реальный запрос из сессии → дублируете → меняете один параметр → отправляете → видите ответ. Проверка edge-cases API без участия приложения.
Compare Flows — диффы между запросами
Выбираете два request/response → Compare. Видите построчный diff. Юзкейс: что изменилось между сборками 1.5 и 1.6 в analytics-событиях. Что разработчики случайно добавили или удалили.
Scripting — JS на каждом запросе
Pro-фича. Можно написать JS-скрипт, который применяется к request или response: автоматически менять заголовки, замерять задержки, логировать определённые поля. Юзкейс: автотест на «никакая аналитика не уходит до получения user consent».
Workflow QA: воспроизводимый баг за 5 минут
Типичный сценарий с моб. игрой:
- Подключили iPhone к Proxyman, включили SSL proxying для домена аналитики и IAP.
- Воспроизвели баг — например, после покупки бустера счётчик в HUD не обновился.
- В Proxyman нашли запрос
POST /v1/iap/verify— увидели ответ 200 OK, но в JSON"granted": false. - Правый клик на запрос → Copy as cURL — вставили в баг-репорт.
- Опционально: Save Session — экспортировали
.prxsessionфайл и приложили к тикету. Разработчик откроет у себя и пошагово проверит.
Без Proxyman этот баг превратится в долгие пляски с логами и stacktrace’ами. С Proxyman — диагноз за 5 минут.
Tips & tricks
- Allow list по доменам. Отфильтруйте всё, что не относится к вашему приложению (системные обновления macOS, iCloud, AppStore, Spotlight). View → Filter Bar → ввести домен. Сразу станет читаемо.
- Save sessions на каждый воспроизведённый баг. Файл лёгкий, лежит локально, можно открыть через 3 месяца и посмотреть.
- Сертификат экспирирует через год. Если в один прекрасный день HTTPS перестал расшифровываться — обновите CA в Proxyman: Certificate → Generate New CA → переустановите на девайсах.
- Custom Note на flow. Помечайте странные запросы текстом «бага про двойное списание» — потом легче искать.
- Multiple tabs (Pro). Можно держать одну вкладку для основного приложения, другую — для конкретного флоу типа онбординга.
Когда Proxyman не подходит
- Не-HTTP трафик (TCP, UDP, WebSocket-binary, gRPC raw) — лучше Wireshark.
- Кросс-платформенная команда (Windows/Linux): Proxyman только Mac. Альтернативы — Charles Proxy (тоже только Mac), mitmproxy (CLI, кроссплатформенный), Fiddler (Windows).
- Production-устройства, где нельзя установить CA сертификат — никакой прокси HTTPS не дешифрует, физика. Только iAP-свежие билды или debug-варианты.
Альтернативы и сравнение
- Charles Proxy — старый стандарт, есть с 2002. Более громоздкий UI, чуть менее удобен для мобильной разработки. $50.
- mitmproxy — open-source, CLI + web UI, кроссплатформенный. Мощный для скриптинга на Python, но порог входа выше.
- Fiddler — Windows-ориентированный, Telerik. Для Mac есть Fiddler Everywhere, но менее зрелый.
- Wireshark — низкоуровневый network analyzer. Не работает с HTTPS из коробки. Для всего что не HTTP — он.
Для casual mobile QA на Mac — Proxyman оптимален. Для агрессивной автоматизации с CI — mitmproxy.
С чего начать
- Установить Proxyman на свой рабочий Mac.
- Подключить тестовый iPhone, поймать первый HTTPS-запрос вашего приложения.
- Сделать одну Map Local-правку — например, подменить feature flag в remote config response → проверить как ведёт себя UI.
- Включить Network Conditioner с профилем 3G на 5 минут — обнаружите кучу мелких UX-проблем.
**Документация: **docs.proxyman.io — гайды по установке, фичам и интеграциям. proxyman.io — главный сайт, скачивание, лицензии.