Использование снифферов трафика в тестировании на примере Charles Proxy

На проекте тестировщики сталкиваются с ситуациями, когда недостаточно тестовых данных или необходимо смоделировать определенные условия работы приложений, а backend попросту еще не готов к моменту тестирования. На помощь приходят снифферы, которые отлично справляются с подобными проблемами. 

В статье расскажем, что такое снифферы и как они работают, сравним Charles Proxy, Proxyman и Fiddler. А также ближе познакомимся с Charles Proxy и рассмотрим 5 его основных функций.

Что такое снифферы и зачем они нужны

Сниффер — это ПО, которое позволяет отслеживать, изменять и анализировать сетевой трафик. Является одним из основных приложений в арсенале тестировщика. С чем может помочь сниффер:
 

  • Анализ ответа сервера на отправляемый запрос: просмотр статус-кодов, тела ответа, заголовков
  • Изменение запроса и ответа сервера. Позволяет моделировать различные кейсы при тестировании приложений
  • Изменение скорости интернета
  • Перенаправление запросов на другие хосты

Принцип работы снифферов

Рассмотрим работу сниффера с точки зрения клиент-серверной архитектуры. Клиент, он же frontend, и сервер — backend, общаются между собой посредством запросов и ответов через протокол HTTP/HTTPS. Для тестирования и отладки приложений между клиентом и сервером нужен посредник, который сможет анализировать эти запросы и при необходимости выявлять ошибки. Таким инструментом и является сниффер. Сначала он захватывает трафик, проходящий через определенный сетевой интерфейс. Далее перехваченные пакеты данных подвергаются анализу и фильтрации, что позволяет просматривать запросы только от определенных источников. Анализ включает в себя просмотр заголовков и данных пакетов, а также метаданных — адреса отправителя и получателя, порты, протоколы и другие характеристики. 

Схема работы сниффера

Charles Proxy, Proxyman и Fiddler: сравнение снифферов трафика

Для анализа сетевого трафика в мобильной и веб-разработке чаще всего используют Charles Proxy, Proxyman и Fiddler. 

Платформы. Все три инструмента ориентированы на разные платформы. Например, если Charles Proxy является кроссплатформенным, то Proxyman в основном ориентирован на macOS, а Fiddler — на Windows.

Интерфейс. Тут самым приятным может оказаться Proxyman, поскольку является наиболее современным и дружелюбным для пользователя. Следующим идет Charles Proxy. У него не настолько современный дизайн, но он достаточно прост для интуитивного понимания. На третьем месте — Fiddler.  Он сложнее для понимания новичков, однако мощнее, чем ранее описанные инструменты. 

Интерфейс Fiddler

 

Интерфейс Charles Proxy

 

Интерфейс Proxyman

 

Функционал и особенности. Несмотря на различия снифферов, основной функционал у них все-таки схожий — просмотр и изменение трафика. Основным отличием Proxyman является то, что он ориентирован на macOS и очень легко подключается к симуляторам iOS, что значительно упрощает тестирование мобильных приложений. Отличительной особенностью Fiddler будет функция FiddlerScript, которая позволяет разрабатывать сценарии выполнения запросов. Эта функция помогает в автоматизации работы с запросами. Например, если в каталог товаров придет пустая строка вместо ссылки на товар в нескольких карточках, то с помощью скриптов мы можем отследить данный кейс и автоматически подставить ссылку-заглушку. Если необходимо изменить пропускную способность сети, то для этого лучше всего подойдет Charles Proxy, в нем достаточно широкий набор настроек для регулирования скорости интернета.

Последний немаловажный критерий сравнения — стоимость. Charles Proxy и Proxyman работают по платной подписке с бесплатным пробным периодом, а Fiddler classic доступен абсолютно бесплатно.

Charles Proxy и его основные функции для тестирования веб-сайтов и мобильных приложений

Charles Proxy одно из самых популярных приложений для отладки и тестирования HTTP-запросов, поскольку является кроссплатформенным и удобным в использовании. Рассмотрим его основные функции:

Breakpoints 
Достаточно универсальный инструмент. Позволяет перехватывать запрос и менять его в реальном времени. Удобно пользоваться для небольших изменений в запросе. Например, поменять статус кода ответа или для единичных случаев подмены параметров в теле ответа.

Включение Breakpoints через контекстное меню запроса

 

Map Local
Функция «Map Local» в Charles Proxy используется для замены ответа с удаленного сервера на локальные ресурсы. Удобство этой функции особенно заметно, когда время на запрос сильно ограничено или тело ответа достаточно массивно для манипуляций через Breakpoints. 
Настраивается Map Local достаточно просто, либо через строку меню в  приложении (Tools –> Map Local), либо через контекстное меню самого запроса, ответ которого будет заменяться (Нажать правой кнопкой мыши на запрос и выбрать Map Local).

Расположение функции Map Local в меню

 

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

Окно настройки Map Local

 

Чтобы увидеть результат работы, необходимо вызвать этот запрос еще раз. Вместо ответа от удаленного сервера будет отображаться содержимое выбранного файла.

Map Remote
Map Remote используется для перенаправления пользователя с одного URL-адреса на другой. Также позволяет изменить не только хост, но и отдельные параметры. Настроить эту функцию можно аналогично через верхнее меню Charles, либо через контекстное меню запроса. 

Расположение функции Map Remote в меню

 

В открывшемся окне настройки запроса нужно указать адрес, который будет менять сниффер в Map From на ожидаемый в Map To:

Окно настройки Map Remote

 

После того, как изменения будут внесены, необходимо отправить запрос заново. Вместо отправки запроса на исходный сервер, Charles Proxy перенаправит его на указанный ранее адрес.

Rewrite
Rewrite можно назвать самым мощным инструментом Charles Proxy. Он позволяет задавать правила, по которым будут изменяться запросы и ответы, проходя через Charles. Например, можно добавлять и изменять заголовок, искать и заменять текст в теле ответа или запроса.

Настройка этого инструмента выглядит немного сложнее, чем предыдущих:

   А.  Сначала необходимо разрешить Charles использовать Rewrite, поставив галочку Enable Rewrite
   В.  Затем создать новое правило, по которому будет меняться запрос или ответ 
   C.  Добавить запрос в поле Location
   D.  Добавить новое правило для работы с запросом

   E.  В настройках самого правила указать в каком запросе, что и как будет меняться. Исходное значение указывается в поле Match, а ожидаемое — в поле Replace.

Настройки правила в Rewrite

 

Throttling
Инструмент Throttling позволяет тестировать поведение приложения при различных условиях сетевой задержки и ограниченных пропускных способностях сети. 

Окно настройки Throttling

 

Bandwidthскорость соединения
Utilisationпроцент пропускной способности
Round-trip latencyустанавливает задержку между клиентом и сервером
MTU максимальный размер пакета
Reliabilityвероятность, что соединение не удастся 
Stability
вероятность нестабильного соединения и снижения качества интернета. Это полезно для моделирования сетей, в которых периодически падает качество связи, например, мобильных

Итого

Мы познакомились с одним из важных инструментом тестировщика — сниффером. Рассмотрели, какие они бывают, и их основные функции. Стоит отметить, что все рассмотренные приложения для анализа сетевого трафика и их функции полезны в зависимости от поставленных задач. При грамотном выборе и использовании инструмента процесс тестирования станет проще и понятнее.

Полезные материалы

  1. Настройка Charles Proxy — https://habr.com/ru/companies/cleverpumpkin/articles/701700/
  2. Инструкция по работе с Proxyman — https://habr.com/ru/articles/737120/
  3. Видео по снифферам — https://youtube.com/playlist?list=PLxM8tENB_5vgehTytQXz0VQmkyFFq-SQs&si=XfhcuzVeOrkWvd_W
  4. Обзор на Fiddler — https://habr.com/ru/articles/554562/