Тестирование Backend с помощью Charles Proxy

Charles proxy — это инструмент мониторинга HTTP и HTTPS трафика. Он выступает в роли прокси-сервера (промежуточного звена) между тестируемым приложением и сервером на бэкенде, позволяя не только видеть, но также перехватывать и редактировать запросы.

Для просмотра запросов/ответов при тестировании WEB приложений достаточно взаимодействия с Postman через API, либо просмотра в DevTools. Но для отслеживания трафика при тестировании мобильного приложения могут возникнуть сложности.
Взаимодействие происходит по локальной сети, к которой подключены ПК и мобильное устройство.

Установка

Для начала необходимо скачать Charles на ПК по ссылке https://www.charlesproxy.com/download/ . Далее установить и открыть программу.

При открытии нас встречает окно, которое сообщает о том, что это пробная версия. Во время использования окно также будет появляться на некоторое время.

b9d5235fe65cb8fae6071d1b625a2a20.png

Настройка SSL Proxying

Необходимо установить сертификат для дальнейшего использования.

Переходим по следующему пути –

81bed0c3abbf4f521a61da6628a3884b.png

  • Для Windows

Открывается окно с сертификатами, необходимо нажать на «Установить сертификат…».

3153877a79a9b560b8ad50e92662c7c1.png

Указать radio button «Текущий пользователь» и нажать «Далее».

Выбрать «Поместить все сертификаты в следующее хранилище», «Обзор…» и выбрать «Доверенные корневые центры сертификации».

24cf1843993f302c3251f6034eef08c8.png

Нажать «Далее» и «Готово».

Появилось окно с сообщением «Импорт успешно выполнен».

8df5e81492b124a42f9a34285e15653f.png

Для проверки работоспособности мы можем открыть браузер и вписать в адресную строку Google.com и перейти по нему.
В программе отобразится запрос к данному url.

Выделенные кнопки должны быть включены.

3b3e2fa06b7053d31c2b879f025f77cc.png

  • Для MacOS

При переходе в «Install Charles Root Certificate» открывается Keychain Access, в котором необходимо два раза кликнуть на синий плюс сертификата Charles Proxy, во вкладке «Trust» везде указать «Always trust».

Далее необходимо перейти по «Proxy» → «SSL Proxying Settings» и заполнить чек-бокс «Enable SSL Proxying».

Также во вкладке «Proxy» присутствует «macOS Proxy», нужно нажать на данную строку, тем самым включить мониторинг трафика.

Подключение мобильного устройства

Для подключения устройства необходимо перейти по следующему пути Help ~> SSL Proxying ~> Install Root Certificate on a Mobile Device or Remote Browser.

ee201069d11a153c5827569f7e980b02.png

Должно открыться окно с ip и портом, по которому можно достучаться до Charles. В нем указаны Server (IP-адресPort (8888).

Также указана ссылка, по которой необходимо перейти из мобильного браузера для установки сертификата — chls.pro/ssl .

Открывшееся окно не нужно закрывать. Оставляем открытым, пока не подключимся с телефона.

11fecf99eb03c8c2b695c07f9ddad073.png

Переходим во вкладку Wi-Fi и выбираем сеть, к которой подключены оба устройства.

Нас интересует «Настройка прокси», устанавливаем «Вручную» и заполняем Сервер и Порт данными, которые предоставляются в информирующем окне.

Нажимаем «Сохранить».

При первом подключении мобильного устройства в программе Charles отобразится окно, информирующее о новом подключении. Необходимо нажать «Принять».

Переходим во вкладку Wi-Fi и выбираем сеть, к которой подключены оба устройства.

Нас интересует «Настройка прокси», устанавливаем «Вручную» и заполняем Сервер и Порт данными, которые предоставляются в информирующем окне.

Нажимаем «Сохранить».

При первом подключении мобильного устройства в программе Charles отобразится окно, информирующее о новом подключении. Необходимо нажать «Принять».

b2b902ea18ef8ef6b6bc31511be35ada.png

Вводим в браузере телефона следующий URL: http://chls.pro/sslилиcharlesproxy.com/getssl

После открытия страницы браузер должен начать скачивать сертификат для Charles.

В настройках, появляется вкладка «Profile Downloaded», необходимо нажать на нее. Далее два раза нажать на «Install».

Далее переходим в «Настройки» → «Основные» → «Об этом устройстве» → «Доверие сертификатам» и передвигаем ползунок у Charles Proxy на активный.

32c398bfc8c9be51004e9e608dbb44e2.png

  • На Android

Необходимо, чтобы компьютер и телефон были подключены к одному Wi-Fi.

В настройках Wi-Fi на телефоне заходим в настройки сети (на телефонах марки Samsung — шестеренка рядом с названием сети Wi-Fi, на телефонах марки Huawei необходимо нажать и удерживать палец на наименовании Wi-FI сети и выбрать «Изменить сеть»).

Далее в пункте «Прокси» выбираем параметр «Вручную».

В поле «Имя узла прокси» вводим ip (192.168…….).

В поле «Порт прокси» указываем порт: например, 8888

d05488e9bc1ec8cc0ff95045929a859c.png

После того, как сохранили настройки сети, в окне Charles должно появиться уведомление с просьбой разрешить или отклонить доступ к девайсу. Жмем «Разрешить»/«Allow».

Вводим в браузере телефона следующий URL: http://chls.pro/sslилиcharlesproxy.com/getssl

После открытия страницы браузер должен начать скачивать сертификат для Charles.

После скачивания сертификата открываем настройки — на Samsung в поиске пишем «Установить из памяти» — Сертификат Wi-Fi — выбрать папку Download — Выбрать сертификат Charles и установить его. Для Huawei и других устройств можно просто нажать на сертификат и установить его, выбрав пункт «Установка для Wi-Fi».

В Android установленные сертификаты проходят верификацию в Settings → Trusted Credentials во вкладке User. 

ВАЖНО:  Начиная с Android 6.0 и выше в файле манифеста AndroidManifest.xml надо добавить специальную конфигурацию, позволяющую просматривать защищенный трафик. Это нужно заранее попросить у разработчика приложения.

Проверка перехвата трафика из мобильного приложения

После подключения устройства, можно открыть приложение и выполнить какие-либо действия (пр. перейти в профиль). Видим, что трафик перехватывается.

d099961748ab16a99db3e2240e2d11b3.png

Далее при нажатии правой кнопкой на ресурс, открывается меню, в котором необходимо выбрать «Enable SSL Proxying».

25e10613f5554890a63357f0403253be.png

*Focus — показывает в списке запросы/ответы только выбранного ресурса. Остальные находятся в «Other Hosts».

После чего, при повторном действии в приложении, открывается доступ к данным.

Для удобства можно использовать вкладку «Sequence» для просмотра статуса, метода, наполнения, а также другой информации о запросах/ответах.

6dd4d0e7262b549af23cf69877fd997e.png

Дополнительный функционал Charles

Rewrite 

Является инструментом для подмены значений в запросах и ответах. Позволяет проверить как будет себя вести визуальная часть приложения при получении данных другого типа, большого количества символов, если по какой-либо причине с бэкенда не приходят данные, их можно подставить в ответе, не дожидаясь фикса, тем самым позволяя сэкономить время на тестирование.

Для работы необходимо перейти по следующему пути: «Tools» → «Rewrite…».

Далее откроется новое окно «Rewrite Settings». Необходимо заполнить чек-бокс «Enable Rewrite» для доступа к таблице и активации инструмента.

1d54b54f4bed0934ac5873834cd9f42b.png

При нажатии на кнопку «Add» в таблицу добавляется новый пункт, необходимо его выбрать. Для удобства, можно переименовать в поле «Name».

При нажатии на кнопку «Add» у верхней таблицы, открывается окно, в котором необходимо вписать URL, запросы и ответы которого будут подменяться.

c78581f454ab65726dc5b5dcaf7db0be.png

После указания URL нажимаем «OK».

945c9688caae1e9aeee1dea9daba9d1f.png

Далее нажимаем на кнопку «Add» у нижней таблицы. В открывшемся окне устанавливаются правила подмены.

В поле «Type» выбирается объект, в котором будут происходить изменения/поиски значения. В примере выбрано тело ответа.

2565a982a80db3cf91f008fe5579f5f0.png

В поле «Name» указывается ключ, в поле «Value» значение. Также необходимо выбрать нужный чек-бокс, Request (Запрос) и/или Response (ответ). Для примера будем заменять значение null на дату »10.10.2023».

c7993b227a7544d498a23233b9bbbdec.png

Так как «Дата загрузки» приходит со значением «null», мы не можем посмотреть, как она будет отображаться.

43e3bdacf840e7e2d2da38f0c5557efc.png

После указанных настроек нажимаем кнопку «OK», выбираем созданный пункт «Body rewrite» и повторно отправляем запрос.

c0a7f7100df214cc32360cb9708b5257.png

Ответ изменился, теперь мы видим указанную нами дату. Конкретно в этом примере, данный способ помог выявить баг, до отправки на прод, где должна была производиться проверка.

41a36d14880a708413203c135df4d7c1.png

Аналогичные действия можно производить при тестировании мобильного приложения.

Исходное значение — 

5e3115d2a098aeeb2ef92e467345a887.png

Измененный ответ —

b28133ec59d8904a85c27c2ea6b4c803.png

Все настройки для одного URL можно хранить в одном пункте, не обязательно заново производить настройку под каждую подмену.

?utm_source=habrahabr&utm_medium=rss&utmfb21f8d6fb7dbd0a21525b6b1ac16233.png

Breakpoint

Является инструментом для разрыва соединения на конкретной точке для mock«а данных в запросах и ответах. Позволяет вручную менять статус код, какие-либо данные.

Для работы необходимо перейти по следующему пути: «Proxy» → «Breakpoint Settings…».

1b554d3d5243e906c8f368af9adfa220.png

В открывшемся окне необходимо заполнить чек-бокс «Enable Breakpoints».

f6af7238317106a88179bf0659b19299.png

Далее нажать на «Add» и ввести в поле «Host» URL и нажать «Tab» для автозаполнения полей «Protocol» и «Path».

Также выбрать на каком моменте будет происходить разрыв «Request» — запрос, «Response» — ответ. Нажать два раза «OK».

f78e7a2f7fd0735bc7e62d662d3a2e46.png

Далее обновляем клиент в месте использования данной точки, в Charles появляется новое окно, сообщающее о разрыве.

Три основные кнопки:

Cancel — отмена действий

Abort — разрыв соединения

Execute — внести изменения и продолжить

8213649503183ee7c71cec181582e408.png5262cc4702d6baab0bd0becf5ccd52d7.png1cafcc17aaf73008f4ccafd973619bab.png

Нажимаем «Execute» и видим изменения в клиенте.

08b16c0e3215e9c05c1dc41d1f0b3ce4.png

Изменим статус код в header ответа со значения »200» на »500».

e766ab7f73f71ce00b8f8d1db006d713.png

Таким образом можно тестировать корректное отображение уведомлений об ошибке при разных статусах.

Для быстрого включения/выключения данной функции существует кнопка в панели.

71a6b94a88866da1887428630b8ea96c.png

© Habrahabr.ru