Зачем QA прокси-инструменты
HTTP-прокси инструменты располагаются между клиентом и сервером, давая полную видимость и контроль над сетевым трафиком. Для QA-инженеров они незаменимы: отладка мобильных приложений (где нельзя увидеть сетевые запросы напрямую), тестирование граничных случаев (модификацией ответов сервера) и симуляция сетевых условий (throttling, задержка).
В отличие от DevTools браузера, которые показывают трафик только из браузера, прокси-инструменты захватывают трафик из любого приложения — мобильных, десктопных, CLI и фоновых сервисов.
Типичные QA-сценарии
- Отладка мобильных приложений: Просмотр каждого API-вызова
- Тестирование обработки ошибок: Модификация ответов для возврата ошибок, пустых данных или невалидного JSON
- Симуляция медленных сетей: Throttling полосы пропускания для тестирования в условиях 3G/4G
- Проверка API-контрактов: Инспекция точных payload запросов/ответов
- Тестирование без изменений бэкенда: Замена ответов сервера локальными файлами
Charles Proxy и Fiddler
Charles Proxy
Charles — самый популярный GUI-прокси для QA-инженеров:
Настройка:
- Установить Charles Proxy
- Настроить браузер/устройство на использование Charles как HTTP-прокси (
localhost:8888) - Для HTTPS: Установить корневой сертификат Charles и включить SSL proxying
Основные функции:
| Функция | Назначение | QA-сценарий |
|---|---|---|
| SSL Proxying | Расшифровка HTTPS-трафика | Инспекция деталей запросов/ответов |
| Breakpoints | Пауза запроса/ответа | Модификация данных перед доставкой |
| Map Local | Замена ответа локальным файлом | Тестирование с mock-данными |
| Map Remote | Перенаправление на другой сервер | Маршрутизация продакшен-URL на staging |
| Rewrite | Модификация заголовков/тела правилами | Добавление/удаление заголовков |
| Throttle | Симуляция сетевых условий | Тестирование на медленной сети |
mitmproxy для автоматизации
mitmproxy — командный прокси-инструмент, скриптуемый на Python:
# Установка
pip install mitmproxy
# Интерактивный консольный режим
mitmproxy
# Веб-интерфейс
mitmweb
# Режим дампа (неинтерактивный, для скриптов)
mitmdump
Скрипт-аддон на Python
# modify_response.py — Внедрение ошибок для тестирования
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "/api/v1/checkout" in flow.request.pretty_url:
flow.response.status_code = 500
flow.response.text = '{"error": "Internal Server Error"}'
# Запуск со скриптом
mitmdump -s modify_response.py
Charles/Fiddler/mitmproxy] P -->|Инспекция и модификация| S[Сервер] S -->|Ответ| P P -->|Инспекция и модификация| C
Продвинутые техники прокси
Настройка прокси для мобильных приложений
iOS:
- Подключитесь к тому же WiFi, что и машина с прокси
- Настройки > WiFi > HTTP-прокси > Вручную: укажите IP и порт прокси
- Откройте
chls.pro/sslдля установки корневого сертификата Charles - Настройки > Основные > Об устройстве > Доверие сертификатам > Включить корневой Charles
Android:
- Для Android 7+ приложения по умолчанию игнорируют пользовательские сертификаты
- Добавьте network security config для разрешения сертификатов прокси:
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Инспекция WebSocket и gRPC
- Charles Proxy может инспектировать WebSocket-фреймы
- mitmproxy поддерживает инспекцию WebSocket с выделенными event hooks
- gRPC-трафик (HTTP/2 + protobuf) требует proto-файлов для читаемой инспекции
Автоматическая запись ответов для mock-серверов
# Записать все ответы в файл
mitmdump -w recorded_session.flow
# Воспроизвести записанные ответы (работает как mock-сервер)
mitmdump --server-replay recorded_session.flow
Это создаёт мгновенные mock-серверы из реального трафика — незаменимо для офлайн-тестирования и CI-окружений.
Практическое упражнение
Настройте Charles Proxy и выполните задачи:
- Настроить SSL proxying для
api.example.com - Захватить трафик из мобильного приложения или браузера
- Использовать breakpoints для модификации API-ответа (изменить status code на 500)
- Использовать Map Local для возврата mock-данных из локального JSON
- Настроить throttling для симуляции условий 3G
Подход к решению
- Proxy > SSL Proxying Settings > Добавить
api.example.com:443 - Настроить прокси устройства на
ваш-ip:8888, установить сертификат Charles - Proxy > Breakpoints > Добавить
api.example.com/endpoint> Редактировать ответ - Tools > Map Local > Маппинг URL-паттерна на локальный
.json - Proxy > Throttle Settings > Включить, выбрать пресет «3G»
Советы профессионала
- Всегда отключайте настройки прокси после тестирования — оставшиеся конфигурации вызывают загадочные сбои
- Используйте Map Local для тестирования фронтенда с mock-ответами API без бэкенда
- Записывайте прокси-сессии для баг-репортов — они захватывают точные данные
- Для мобильного тестирования используйте Android network security config
- Скрипты mitmproxy можно интегрировать в CI для автоматизированных тестов
Ключевые выводы
- Прокси-инструменты обеспечивают непревзойдённую видимость клиент-серверной коммуникации
- Модификация запросов/ответов позволяет тестировать граничные случаи, невозможные через UI
- Скриптуемость mitmproxy связывает ручное исследование с CI-автоматизацией
- Тестирование мобильных приложений почти всегда требует настройки прокси