Что такое charles proxy
Charles Proxy Server — с чего начать?
Зачастую, при тестировании мобильных (да и web) клиент-серверных приложений бывают ситуации, когда нужно проверить как ведёт себя приложение при разном объеме данных, в каком формате приложение отправляет и получает данные, какие параметры у запроса и ответа, какой ответ присылает сервер при некорректном запросе, как реагирует приложение на некорректный ответ, как оно обрабатывает ошибки. Всё это можно относительно просто проверить при помощи Charles Proxy Server.
1. Установка и запуск
Скачиваем Charles Proxy с официального сайта, устанавливаем, запускаем (помним, что бесплатно можно пользоваться 30 дней). После запуска Charles предложит сам настроить сетевые подключения для работы:
Соглашаемся. Далее откроется интерфейс инструмента:
Слева (Structure/Sequence) будут отображаться соединения, внутри которых можно будет увидеть запросы. В правой части будут отображаться параметры запроса.
2. Настройка мобильного устройства
Чтобы Charles мог мониторить весь входящий и исходящий трафик на устройстве, в настройках Wi-Fi подключения на устройстве нужно прописать IP-адрес хоста с запущенным Charles и указать порт 8888 (по умолчанию). В самом Сharles в настройках прокси нужно удостовериться что стоит порт 8888 (при необходимости можно изменить). Итак, проверка настроек Charles:
И настройка Wi-Fi подключения на смартфоне (в данном примере использовался iPhone):
Начиная с этого момента, в Charles мы можем видеть адреса, к которым обращается смартфон.
3. Последние штрихи настройки
Далее, возвращаемся к настройке самого Charles. Во-первых, если нас интересует конкретный адрес, а весь остальной трафик является шумом, то нужно кликнуть по интересующему нас адресу и выбрать пункт “Focus”. Это позволит скрыть все лишние адреса во вкладке “Other Hosts” (см. картинку ниже). Как было упомянуто выше, адреса серверов, на которые смартфон отсылает запросы нам видны, но мы не можем видеть параметры запросов:
Для того, чтобы Charles мог увидеть параметры запроса, нужно прописать адрес сервера в SSl Proxy Settings. Это можно сделать следующим образом:
Теперь если отправить запрос на соответствующий сервер, то можно увидеть параметры запросов:
4. Модифицирование запросов и ответов
Итак, запросы к нужному серверу для нас теперь абсолютно прозрачны, но Charles интересен не только возможностью мониторинга запросов, но и возможностью их модификации. Например, можно изменить какой-либо параметр в заголовке или в теле запроса и посмотреть что вернёт нам сервер, или же наоборот, отправить правильный запрос, но модифицировать ответ, чтобы проверить ситуации, когда сервер может возвращать некорректные данные или когда нужно показать лишь часть данных. Сейчас нас интересует инструмент Rewrite:
Этот инструмент как раз и позволяет вносить нужные нам изменения в запросы. По-умолчанию, там ничего нет, следовательно, нам нужно добавить первую опцию, например, на изменение запроса.
Далее нужно понять что именно мы хотим изменить в конкретном запросе. Например, нужно проверить, как поведёт себя серверная часть приложения в том случае, если клиент пришлёт некорректный запрос (будет отсутствовать одно поле или в поле будет неверный тип данных). Сообщит ли нам сервер об ошибке? Лучше, конечно, проверять, реакцию клиента на некорректный ответ сервера, потому что такая ситуация наиболее вероятна. Набор действий в любом случае идентичен. Под полем Location нужно кликнуть Add, а затем можно поставить значение * (в этом случае перезапись будет работать для всех запросов), либо указать конкретный URL и конкретный path.
После того как был задан адрес, по которому нужно произвести замену, нужно указать что конкретно следует изменить. В нашем случае это тело запроса.
После сохранения и клика по кнопке Apply, Charles начнёт изменять все запросы по указанной связке URL+path в соответствии с заданным правилом. В данном случае в запросе будет передаваться JSON <“field”:”value”>. Подобным образом можно менять тело ответа, приходящего с сервера. Также можно изменять URL, заголовки, параметры запроса, код состояния HTTP.
Послесловие: В данной статье я постарался как можно более просто, но в то же время подробно описать инструкцию по работе с Charles Proxy Server. По сути, данная статья — агрегатор документации, размещенной на официальном сайте.
Начинающему QA: полезные функции снифферов на примере Charles Proxy
В этой статье я расскажу об основных функциях снифферов, которые могут быть полезны QA. Попробую не вдаваться в теорию, а сфокусироваться на практике. Наиболее популярными представителями анализаторов трафика сейчас являются WhireShark, Fiddler и Charles Proxy. Об удобстве интерфейсов и функционале каждого из них можно рассуждать долго, учитывая все плюсы и минусы. Но здесь я отдал предпочтение Charles, поскольку сам им активно пользуюсь. Буду рассказывать на его примере.
Что собой представляет Charles Proxy
Первичная настройка
При тестировании мобильного приложения
Charles Proxy необходимо запустить на компьютере, который находится в той же локальной подсети, что и мобильное устройство с тестируемым приложением.
Как правило, соединение настраивается по Wi-Fi. В настройках Wi-Fi мобильного устройства в качестве proxy-сервера надо указать IP-адрес компьютера и стандартный порт инструмента 8888 (пароль остается пустым).
Главное отличие в настройках для этой ОС в том, что с Android 6.0 и выше в Androidmanifest надо добавить специальную конфигурацию, позволяющую просматривать защищенный трафик. На продакшене эта конфигурация убирается из соображений безопасности.
При тестировании приложения на ПК
Сертификат устанавливается в доверенные корневые центры.
Два слова об интерфейсе
С помощью контекстного меню запроса можно настраивать блокировки, повторять и изменять запросы. На этом мы еще остановимся.
На вкладке Sequence запросы выведены по времени в виде настраиваемой таблицы. Видно, когда начался запрос, сколько он длился, его размер, статус и т.п. Наведя на конкретную строку, мы получим ту же информацию о теле, заголовках и т.п.
Если запросов на экране слишком много, с помощью панели инструментов их можно очистить или вообще остановить перехват. Там же есть возможность включить и выключить троттлинг (подробнее об этих функциях расскажу позже). Базовая настройка каждой из функций осуществляется через меню, а кнопки панели управления выступают своего рода тумблерами On / Off.
Фильтрация
В Charles Proxy очень много вариантов фильтрации запросов.
На вкладке Sequence есть аналогичный фильтр.
Charles Proxy умеет работать с регулярными выражениями. Для этого на вкладке Sequence выбираем Settings и отмечаем пункт Filter uses regex. И вписываем в поле поиска элементарную регулярку.
можно выбрать все запросы, в которых в начале имени хоста находится четыре буквы, а потом идет точка.
Там же можно включить Autoscroll списка запросов или указать максимальное количество строк.
Блокируемый запрос можно прервать двумя способами (подходящий надо выбрать в настройках):
вернуть ошибку 403.
От выбранного способа блокировки зависит, какой ответ мы получим.
Можно провести эксперимент. Включим наш тестовый стенд в Block list, выбрав простой сброс соединения. С помощью контекстного меню запроса повторим его (команда Repeat) и получим такой ответ:
Просмотр SSL-трафика
Если ранее мы успешно установили SSL-сертификат, для просмотра зашифрованного трафика остается только включить SSL proxying для нужного хоста в самом Charles Proxy. Это можно сделать через контекстное меню конкретного хоста.
Аналогично настройке фильтров на вкладках Include и Exclude можно добавить или исключить конкретные хосты. Если списки на этих вкладках не заполнять, по умолчанию мы будем читать трафик со всех хостов.
Брейкпоинты
Установить Breakpoint можно из контекстного меню запроса. После этого все аналогичные запросы будут перехвачены. Их можно будет просматривать и редактировать.
Чтобы проверить, как это работает можно использовать повтор запроса (Repeat из того же контекстного меню). Запрос перехватывается, его можно редактировать.
Map remote
Эта функция может быть полезна, если мы поймали ошибку на продакшене, например при загрузке таблицы, а информации в dev-контуре для полноценного тестирования не хватает. Вместо того, чтобы перезаполнять информацию в каждом контуре, мы можем скопировать ответ сервера в нужный контур и посмотреть, как он ведет себя после исправления ошибки.
Map Local
Главное отличие Map Local от предыдущей функции в том, что замена осуществляется не на ответ другого сервера, а на содержимое локального файла. Настройки выглядят точно также, но вместо второго сервера мы указываем локальный путь к файлу с ответом.
Rewrite
Функция Rewrite может быть полезна, если вам нужно переписать данные, которые отправляются в Charles Proxy. В отличие от простого редактирования Rewrite позволяет задать правила изменения и работать в автоматическом режиме. Можно изменять и добавлять заголовки, искать и заменять текст в теле запроса или ответа. Можно даже менять статус ответа.
Настроить это можно через Rewrite settings, доступные в контекстном меню. Единственный недостаток инструмента в том, что каждое правило замены прописывается отдельно.
Помимо изменения запросов и ответов мы можем запретить кэширование или cookie (функции No caching и Block cookies). Эти опции повторяют аналогичные инструменты панели разработчика в браузере. В обоих случаях настраивается список хостов, для которых действует настройка. Если же список пуст, то кэширование и cookie отключаются на всех перехваченных хостах.
Throttling
Charles Proxy помогает тестировать сервис на плохой связи, искусственно ограничив через настройки пропускную способность канала. Эта функция полезнее всего для тестирования десктопных приложений, поскольку на мобильных устройствах качеством связи можно управлять через панель разработчика.
Ограничения можно включить либо для хостов из списка, либо для всех перехваченных запросов. Из коробки есть несколько пресетов, но все параметры связи можно корректировать вручную. Мне по большей части хватает базовых настроек.
Repeat Advanced
Хотя полноценное нагрузочное тестирование лучше проводить в специальных инструментах, Charles Proxy имеет одну базовую настройку, которая помогает закрыть минимальные потребности. Функция Repeat Advanced (доступная через контекстное меню перехваченного запроса) позволяет нужное количество раз повторить тот же запрос. После настройки откроется отдельная сессия, где будут видны детали каждого из запросов.
Отмечу, что Charles Proxy платный. Можно использовать триальную версию. Но раз в 5-7 минут поверх него будет отображаться всплывающее окно с версией, а раз в 30 минут он будет выключаться, при этом сессии не сохраняются. Решайте сами, помешает ли это вашей работе.
Автор статьи: Артем Холевко, Максилект.
Текст подготовлен по материалам внутреннего семинара Максилект.
Погружение в удивительный мир Charles для чайников
В сегодняшней статье я вам поведаю о том, как пользоваться программой Charles, мощным инструментом для тестирования веб-сервисов, в перечень возможностей которого входит перехватывание запросов, их подмена и перенаправление на локальные файлы.
Charles работает и на мобильных устройствах, но в этой статье мы будем рассматривать только версию для Windows. Давайте же начнем!
Установка Charles
Начать следует, конечно же, с установки. Скачиваем программу с официального сайта разработчика.
Программа платная, но есть тестовый период на 30 дней. Даже без покупки программой можно спокойно пользоваться, но время одной сессии будет ограничено 30 минутами, а также частенько на 5-10 секунд будет появляться оверлей.
Вы можете получить полную версию программы сами-знаете-какими методами, но мы их рассматривать не будем. Все же лучше поддержать разработчиков!
После скачивания следует запустить exe-файл и произвести инсталляцию. Здесь ничего сложного нет, просто оставьте стандартные настройки установки.
Настройка программы
После установки программу следует настроить. Многие пользователи Charles забывают об этом этапе, а затем кусают локти, пытаясь понять, почему у них ничего не работает. На самом деле настройка программы очень простая, сейчас все покажу!
Для начала нужно установить сертификат программы. Именно из-за него, увы, и возникает большинство проблем, связанных с неработоспособностью программы.
Инструкция по установке сертификата:
Жмем «Установить сертификат».
Здесь выбираем «Локальный компьютер» и жмем «Далее».
ВАЖНО! На этом этапе выбираем «Поместить все сертификаты в следующее хранилище», жмем «Обзор», затем ОБЯЗАТЕЛЬНО выбираем «Доверенные корневые центры сертификации».
Жмем «Далее».
Установку сертификата мы выполнили, теперь нам необходимо включить SSL Proxying и настроить его фильтрацию, чтобы начать перехватывать запросы. Фильтрация определяет, какие именно запросы нужно ловить, но мы сделаем так, чтобы у нас перехватывались все запросы.
Ставим галочку на «Enable SSL Proxying», затем под полем «Include» жмем на кнопку «Add».
Программа настроена. Теперь рассмотрим ее возможности и функции.
Compose
Данная функция позволяет нам отправить копию выбранного запроса с измененными параметрами.
Нам достаточно выбрать один конкретный запрос и с помощью функции Compose поменять его параметры (заголовок запроса, тело запроса, куки, код и пр.)
Для начала мы можем отделить конкретные запросы от остальных с помощью функции Focus :
У нас создается копия запроса, в которой мы можем менять все, что нам нужно: тело, шапку, тип запроса, версию HTTP и т.д.
Например, можно подменять некоторые значения в коде, чтобы проверить валидацию на бэкенде. Допустим, поле принимает только числовое значение. Мы используем Compose, передавая в значение поле уже буквы. Если запрос пройдет без ошибок, то это значит, что валидация отсутствует.
После изменения нужных нам параметров жмем « Execute » и получаем копию запроса с ответом от сервера.
Breakpoint
Данная функция позволяет точнее работать с запросами, вешая на них так называемый «Breakpoint» (точку остановки).
Ниже показано, как через настройки добавить запрос в список Breakpoint. После повторного получения указанного вами запроса в программе откроется отдельная сессия, в которой вы сможете спокойно работать с ним.
Отмечу, что эта функция, по сути, делает автоматический Compose. Вы так же можете менять значения, но вам не придется каждый раз выбирать конкретный запрос.
Ставим галочку на «Enable Breakpoints», затем жмем «Add».
Заполняем все поля в открывшемся окне (выше пример заполнения).
При повторном получении запроса с такими же данными у вас будет открываться новое окошко, в котором вы сможете работать с пойманным запросом. Удобно!
Rewrite
Rewrite» src=»https://timeweb.com/media/image9.png» title=»» />
Ставим галочку на «Enable Rewrite», затем в открывшемся окне под левым полем жмем «Add», а дальше жмем «Add» уже под правым верхним полем.
Заполняем все поля (они идентичны тем, что заполняются при создании Breakpoint).
Затем жмем «Add» уже под правым нижним полем, указываем тип редактирования запроса, заменяемые значения, а также условия замены.
Давайте поймаем запрос и посмотрим на реакцию Charles!
Charles поймал нужный запрос, а затем заменил все Header одним значением.
Repeat Advanced
Данная функция будет полезна для нагрузочного тестирования. Хоть Charles и не блещет особым потенциалом в данной области, но базовую проверку корректности флуд-контроля вы сможете выполнить.
Ниже подробно показано, как это сделать.
Здесь настраиваем все в соответствии с указаниями на приложенной выше картинке.
Должно открыться новое окно, где отправляются запросы.
Map Local
Последняя функция в сегодняшней статье. Позволяет работать с локальными файлами.
Демонстрация инструмента ниже.
При повторном получении того же запроса Charles будет перенаправлять его на локальный файл.
Надеюсь, эта статья помогла вам разобраться в основах Charles. Это действительно мощный и довольно простой инструмент для тестирования. Спасибо за внимание!
Битва Charles и Fiddler: как тестировать с комфортом?
Всем привет! Меня зовут Ксения Мерзлозубова, и я тестирую мобильные приложения в компании ATI.SU.
Для тестирования большинства задач мобильному тестировщику необходим сниффер — инструмент для перехвата и анализа трафика. Сейчас существует множество снифферов, но самые популярные — это Charles и Fiddler. В этой статье я опишу их достоинства и недостатки, обращу внимание на фичи, удобство использования, дизайн и еще некоторые нюансы. Снифферы всегда помогают мне при ручном тестировании, поэтому надеюсь, что и вы сможете выбрать один из них или будете использовать все.
Добавлю, что у Fiddler существует 2 версии: Classic и Everywhere. Расскажу про обе.
Charles
Тестировщики обычно называют его «Чарльз» или ласково «Чарлик». Для начала обсудим основные плюсы этого сниффера.
Плюсы
Кроссплатформенность. Есть версии на Mac OS, Windows и Linux. Это очевидное преимущество, если каждый из ваших коллег выбрал себе рабочую ОС по душе, и нужен общий инструмент для тестирования.
Удобная панель инструментов с такими функциями как очищение сессии, редактирование и перевыполнение запроса, остановкой перехвата трафика и другими.
Панель инструментов
Классификация запросов по хостам. У сниффера есть экраны Structure и Sequence. На экране Sequence перехваченные запросы отображаются последовательно, а на экране Structure еще и с группировкой по хостам. Для удобства можно настроить фокус на определенный хост. Тогда остальные запросы попадут в группу Other hosts. Этот вариант подойдет, если вы тестируете небольшую группу запросов к одному хосту, а остальные в текущий момент не важны.
Возможность экспортировать настройки. Например, можно попросить коллегу экспортировать настройки Charles и загрузить их себе, чтобы не настраивать все опции вручную. Настройки экспортируются в формате xml.
Возможность просматривать несколько сессий в соседних закладках. Здесь под «сессией» я подразумеваю один сеанс перехвата трафика. Например, вы воспроизводите сложный баг, и вам нужно повторить его дважды, чтобы сравнить траффик. Тогда можете использовать для каждого повтора отдельную сессию, а затем переключаться между ними.
Современный интерфейс. В отличие от Fiddler Classic, у которого интерфейс напоминает десктопные приложения из 2000-х, Charles выглядит актуальнее.
Минусы
Нет возможности наложить таймаут на запрос. При тестировании часто требуется проверить, как поведет себя конкретный запрос при задержке ответа и нестабильном интернете. К сожалению, Charles позволяет создать такую задержку только для хоста. Настройка влияет на все запросы указанного хоста, а их может быть очень и очень много. Найти настройку можно так: Proxy — Trottle Settings.
Trottle Settings
Нет возможности экспортировать сессию в формате txt или json. Теперь под «сессией» я подразумеваю запрос и ответ вместе, одним файлом. Charles предлагает форматы chls, csv, trace, har и другие.
Форматы экспорта сессии
Документация без скриншотов и видео. У этого сниффера есть документация на официальном сайте, и она целиком состоит из текста. На мой взгляд, документация платного инструмента должна быть как минимум дополнена поясняющими скриншотами, а еще лучше видео.
Это платный инструмент. В отличие от Fiddler Classic, у Charles бесплатный только триальный период в 30 дней. Однако, этот минус сомнительный, т.к. хороший инструмент и должен быть платным.
Fiddler Classic
Этот инструмент долгое время был моим любимчиком, так как с него я начинала изучение снифферов.
Плюсы
Удобная подмена ответов. Чтобы подменить ответ, в Fiddler Classic достаточно перетащить запрос на закладку AutoResponder. Далее можно выбрать вариант ответа в Rule Editor или нажать Edit Response и дать волю фантазии.
AutoResponder в Fiddler Classic
Для сравнения, чтобы подменить ответ в Charles, придется:
Копировать url; Добавить настройку подмены (Rewrite).
Вставить скопированный url.
Создать новое правило подмены (Rewrite rule) для url.
Выбрать тип подмены. Например, Body или Status.
Выбрать, в запросе или в ответе сделать подмену.
Допустим, вы подменяете тело ответа (Body). Тогда нужно заготовить измененное тело заранее и вставить в поле Value.
Rewrite в Charles
На самом деле шаги не сложные, но путь к подмене ответа длиннее, чем в Fiddler. В качестве альтернативы в обоих снифферах есть возможность подменять ответ на файл.
Много функций вынесены на панель инструментов. На мой взгляд, панель инструментов Fiddler Classic менее удобная, чем у Charles, но разработчики постарались вынести на нее большое количество опций.
Возможность цветового выделения запросов. Для наглядности, можно выделить запрос другим цветом. В Charles я не нашла подобной функции.
Бесплатный инструмент. Из трех инструментов, которые я сравниваю, только Fiddler Classic абсолютно бесплатно можно скачать с официального сайта.
Два способа редактирования запросов. В Fiddler и Charles есть аналогичные способы редактирования запросов. Они позволяют менять любую часть запроса. Покажу их на скриншотах ниже.
Редактирование запроса в Fiddler Classic
Редактирование запроса в Charles
Однако в Fiddler есть и второй способ: использование редактора запросов Composer. Основное преимущество этого способа в том, что в Composer есть лог измененных и выполненных запросов. В нем очень просто найти запрос, который вы меняли ранее и вернуться к его редактированию.
Документация. Просто почитайте ее на официальном сайте.
Минусы
Только под Windows. Для других ОС на официальном сайте Fiddler предлагается скачать Fiddler Everywhere, о котором я расскажу позже в этой статье.
Устаревший дизайн интерфейса. Этот пункт выглядит очень субъективно, но с ним согласны большинство моих коллег.
Редактирование ответа только в текстовом формате. В AutoResponder есть встроенный редактор ответа. Если ответ содержит множество вложенных структур и полей, то читать его в текстовом виде крайне неудобно, а редактирование в формате json отсутствует. Также нет поиска по тексту в редакторе, поэтому быстро найти нужное поле не получится. Однако, выход есть — можно использовать отдельный текстовый файл для подмены ответа.
Fiddler Everywhere
Перейдем к новому Fiddler. Судя по списку релизов на официальном сайте, этот сниффер появился в 2018 году.
Плюсы
Кроссплатформенность. В отличие от предшественника, у Fiddler Everywhere есть версии под Mac OS, Windows и Linux.
Удобные фильтры запросов. Перехваченные запросы отображаются на закладке Life Traffic. Там можно настроить, какие столбцы показывать, а какие скрывать. Также есть фильтры по каждому столбцу. Если использовать фильтры по нескольким столбцам, то они применяются вместе.
Life Traffic
Сохранение сессий внутри инструмента — это преимущество по сравнению с Charles и Fiddler Classic, где сессии нужно экспортировать в файл для сохранения.
Отправка сессий другим пользователям. В Fiddler Everywhere можно поделиться сессией с коллегой, указав его email, если он тоже пользуется этим инструментом. Тут «сессия» — это один или несколько запросов.
Современный интерфейс. В отличие от Fiddler Classic, этот сниффер может похвастаться более актуальным интерфейсом, который напоминает привычный многим тестировщикам Postman.
Улучшенный Composer. В Fiddler Everywhere редактор запросов Composer получил функционал и дизайн, аналогичный Postman, за исключением некоторых функций. Например, нет возможности использовать переменные, писать скрипты или использовать раннер для запуска коллекций.
Сохранение коллекций. В отличие от Charles и Fiddler Classic в этом сниффере можно сохранять запросы в коллекции и давать им названия.
Документация. У Fiddler Everywhere есть подробная документация на официальном сайте.
Минусы
Нет брейкпоинтов. Брейкпоинты позволяют останавливать выполнение запроса и на ходу изменять его. Многие тестировщики привыкли к ним в Charles и Fiddler Classic. На текущий момент есть просьбы пользователей сделать breakpoints к команде разработчиков Progress Telerik. Вот еще пример. Судя по ответам, этот функционал есть в планах на будущее.
Платный инструмент. У сниффера есть бесплатный триальный период в 30 дней, а далее можно выбрать тарифный план.
Дополнительно
Добавлю, что большая часть функционала описанных снифферов совпадает. Они все отлично справляются с редактированием запросов, экспортом и импортом сессий, поиском по части запроса, поэтому на этих функциях я не останавливалась в статье.
В зависимости от проекта и задачи, тестировщику может потребоваться разный функционал сниффера. Если вам приглянулся какой-то инструмент, рекомендую попробовать его на практике, так как ваши рабочие потребности могут отличаться от моих.
Если у вас есть, что сказать по теме статьи, буду рада комментариям!