mobile-qatools

Proxyman для QA: гайд по перехвату и подмене HTTP-трафика

HTTP/HTTPS-трафик между приложением и сервером — самый частый источник трудноуловимых багов: аналитика, IAP, реклама, remote config, A/B-тесты, push-уведомления. Если вы всё это тестируете «по UI»...

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: меню CertificateInstall Certificate on this Mac → ввести пароль.

Подключить iOS-девайс

  • В Proxyman: ToolsiOS DeviceSetup — увидите IP и порт (обычно 9090).
  • На iPhone: Settings → Wi-Fi → информация о текущей сети → Configure Proxy → Manual → ввести IP и порт.
  • Открыть Safari на телефоне, перейти на http://proxy.man/ssl — скачается профиль.
  • В Settings → General → VPN & Device Management → установить профиль.
  • ВАЖНО: Settings → General → AboutCertificate 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 — главный сайт, скачивание, лицензии.