Битва снифферов: Charles vs Proxyman |
26.10.2021 00:00 |
Привет, меня зовут Даша, я работаю тестировщицей клиентского мобильного приложения в Ozon. Сегодня поговорим о снифферах в тестировании мобильных приложений –– программах для перехвата, анализа и модификации трафика. Пожалуй, самый популярный сниффер, о котором я слышала, — Charles. Про него уже не раз писали, есть довольно детальные разборы. Но не Charles-ом единым! Например, у нас в Ozon команда разработчиков в основном пользуется Proxyman, а тестировщики (в том числе и я) — Charles. Не так давно у нас в команде разработки мобильного приложения случился холивар на тему “Charles vs Proxyman”. Я попыталась выяснить, почему некоторые люди пользуются Proxyman, а другие — Charles. Из разговоров с коллегами мне было не до конца понятно, какой из снифферов лучше (и чем именно). Поэтому я решила попользоваться Proxyman и разобраться самостоятельно. Давайте вместе посмотрим, какой из инструментов — Charles или Proxyman — выйдет победителем в битве снифферов. Готовим поле для битвы снифферов: ключевое о тулинге Снифферы позволяют видеть, что приходит с бэка, изменять или перезаписывать этот ответ; то же самое можно сделать с запросами на бэк. Это даёт нам отличные возможности для тестирования клиент-сервисного взаимодействия (особенно если основная логика зашита на сервере). Например, сегодня с бэка приходит заголовок страницы, состоящий из одного слова, и всё выглядит красиво и соответствует макетам. Но завтра бэк решает написать в заголовке пару предложений вместо одного (условно) — и то, как это будет выглядеть, как раз и помогает узнать сниффер. В своей работе я чаще всего использую следующие функции: Rewrite, Map Local, Breakpoints и Throttling. Rewrite:
Map Local — для полной замены ответа страницы с бэка на локальный файл. Этой фичей удобно пользоваться для тестирования различных состояний элементов: открываешь файл, на который был заменён ответ страницы, меняешь в нём значение, сохраняешь и обновляешь страницу на устройстве. Как шутят наши разработчики, если у тебя достаточно сохранённых ответов с разных страниц, то из них можно построить приложение. Breakpoints — с помощью этой функции можно поставить точку останова на любой URL; когда устройство будет его запрашивать, запрос к серверу откроется в формате редактирования. Запрос можно будет изменить или прервать; то же самое произойдёт с ответом от сервера. По сути, Breakpoints может заменить Rewrite и Map Local, но всё же эта фича больше подходит для единоразового использования. Постоянно выискивать ту самую строчку, которую необходимо изменить, довольно затратно по времени, да и запрос за это время может отвалиться по тайм-ауту. Throttling — отличная фича для подмены скорости интернета. Можно увидеть, как поведёт себя приложение на медленной скорости, как при этом будут загружаться картинки, видео или карта. Давайте сравнивать Charles и Proxyman на примере этих функций. Начинаем битву снифферов: установка и настройкаДля начала давайте разберёмся, как установить наши снифферы. Charles: можно бесплатно скачать с официального сайта. После инсталляции приложения устанавливаем сертификат на железо: Help -> SSL Proxying -> Install Root Certificate. Сниффер готов к работе. Proxyman: скачиваем бесплатно с официального сайта. Устанавливаем сертификат: Certificate -> Install Certificate on this Mac -> Install and trust. Сниффер готов к работе. Сравнение основных фич Charles и Proxyman Начнём с простого. Установка сертификата и подключение мобильного устройства к снифферуCharles:
Всё, вы великолепны! Можете запускать приложение и работать с трафиком. Proxyman: процесс подключения реального устройства такой же, как в случае с Charles. Отличаются только место, где можно узнать IP, и адрес для скачивания сертификата. Чтобы узнать IP, переходим в Certificate -> Install Certificate on iOS (Android) -> Physical Devices. Здесь можно найти IP-адрес, который необходимо вводить в настройках, а также адрес, по которому можно скачать сертификат и подробную инструкцию по его установке. В этом раунде победителем для меня стал Proxyman. В нём есть подробное описание процесса установки сертификата на мобильное устройство. В случае с iOS многие забывают о том, что необходимо включить опцию «Доверие сертификатам», а подробная инструкция Proxyman позволяет избежать этой ошибки. Подключение симулятора к снифферуПодключение симулятора происходит немного по-другому по сравнению с подключением реального устройства. Я пишу тут именно про симулятор, потому что подключение эмулятора ничем не отличается от подключения реального устройства. Charles:
Proxyman: 1. Открыть Certificate -> Install Certificate on iOS -> Simulators. 2. Поставить последовательно галочки в каждом пункте. Готово, вы великолепны! В этом раунде тоже выигрывает Proxyman — это видно даже по количеству пунктов в списке. Несколько кликов — и всё готово, в отличие от замороченной настройки Charles. Функции снифферов: RewriteCharles:
Есть большой выбор типов Rewrite, которые можно задать в выпадающем меню Type. Например, можно добавить, изменить или удалить Header в Request, изменить Response Code или подменить URL запросов. Например, вот так будет выглядеть правило для добавления Header в Request: Proxyman:
Всё, после этого можно выбирать и заменять значения Request и Response. Вот так будет выглядеть скрипт для добавления параметров Header и Query в Request: В этом раунде для меня однозначно выигрывает Charles. Возможно, потому что я не фанат замороченных настроек и писать срипт для подмены хедера для меня слишком сложно по сравнению с нажатием нескольких кнопок. Функции снифферов: Map LocalСледующая по порядку, но не менее важная функция — Map Local. С её помощью можно полностью подменить ResponseBody. Charles:
Proxyman:
В этом раунде для меня нет победителя, но фича, с помощью которой в Proxyman можно открывать файл сразу в текстовом редакторе, мне очень понравилась. Функции снифферов: BreakpointsФункция Breakpoints предназначена для изменения и прерывания запросов и ответов непосредственно в сниффере. Charles:
Также можно задать правила Breakpoints в пункте меню Proxy -> Breakpoints Settings. После перехода по указанному URL сработает Breakpoints — и запрос с ответом станут редактируемыми; по нажатию на кнопку Abort их можно будет прервать. Proxyman:
При желании можно изменить URL, а также использовать Breakpoints для чего-то одного: только для запроса или только для ответа. В этом раунде силы снифферов равны. Функции снифферов: ThrottlingПоследняя функция из основного незаменимого арсенала снифферов — Throttling. Charles:
Proxyman:
Charles vs Proxyman: выбираем победителяМы рассмотрели только четыре функции снифферов — из списка незаменимых. Понятно, что в целом функций гораздо больше (надеюсь когда-нибудь собраться с силами и написать более подробный гайд по Proxyman). Как видно из итогов раундов, у каждого сниффера есть свои плюсы и минусы. Мне нравится Charles за удобный интерфейс и более понятную настройку правил (нажал две кнопочки — и готово!), а Proxyman — за более гибкую настройку правил и подключения симуляторов (наверное, именно этим объясняется любовь разработчиков). В этот раз явного победителя в битве снифферов нет; какой использовать, каждому предстоит решать самостоятельно. Рассказывайте в комментариях, что выбираете вы! |