Как делать подмену запросов в Charles Proxy
Что проверяют
Знаете ли вы разные инструменты подмены в Charles и понимаете ли, какой брать под задачу: разовую проверку, повторяемый сценарий или ответ, которого на бэкенде ещё нет. Следом спрашивают, почему не виден HTTPS-трафик мобильного приложения.
Как отвечать
Сначала подготовка. Устройство ходит в сеть через Charles как через прокси, на него ставится корневой сертификат Charles, а нужные хосты добавляются в Proxy > SSL Proxying Settings. На iOS сертификату отдельно включают полное доверие в настройках. На Android начиная с 7.0 приложение не доверяет пользовательским сертификатам, и в отладочной сборке это разрешают через network_security_config.
Дальше сами инструменты:
- Breakpoints: перехват конкретного запроса или ответа на лету. Меняете тело, заголовки или код статуса и отпускаете. Удобно для разовой проверки, например как экран переживёт ответ 500;
- Rewrite: правила по хосту и пути, которые заменяют заголовки, параметры, тело по регулярному выражению или статус ответа. Подходит для повторяемых сценариев;
- Map Local: ответ берётся из локального файла. Так проверяют пустой список, очень длинные строки или новое поле, которое бэкенд ещё не отдаёт;
- Map Remote: запрос уходит на другой хост или путь, например с прода на тестовый стенд;
- Throttling: к подмене не относится, но полезен рядом, эмулирует медленную и нестабильную сеть для проверки таймаутов и лоадеров.
Сильный ответ заканчивается примером из практики: какой дефект вы нашли подменой, скажем, падение приложения на null в поле, которое по контракту обязательно.
Где спотыкаются
Путают Compose и Repeat с подменой. Эти команды шлют запрос от имени самого Charles, приложение ответа не видит, и проверять на экране нечего.
Забывают выключить Map Local или Rewrite. На следующий день тестируют на подставленных данных и заводят несуществующие баги.
Долго редактируют ответ на брейкпоинте. Клиент за это время отваливается по таймауту, и тестировщик ловит ошибку, которую сам же и создал.