Мониторинг траффика мобильного приложения

Мобильное приложение на андроид (iOS в ближайшей перспективе), REST, Appium, Ruby.

Нужно каким либо образом проверять сработала ли кнопка или нет(напр. Логин) т.е. ушел ли запрос на сервер, и каков был ответ(что более актуально, тк. по тост сообщения не отлавливаются)

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

Вопрос такой: каким образом можно монитрить траффик девайса, так что бы иметь доступ к запросам/ответам от сервера. в идеале - кроссплатформенные варианты

UPD: Упустил: монторинг траффика программно

Видеть ответы сервера на запросы девайса вы должны в своём сниффере. Мы для этого используем fiddler Fiddler | Web Debugging Proxy and Troubleshooting Solutions. Для того, чтобы видеть запросы сервера (например, если он обращается к каким то сервисам), нужно сниффать траффик сервера. Для этих целей можно опять же использовать фиддлер. Только на сервере нужно указать хост с фиддлером как прокси.

Если нет возможности настроить прокси на сервере, то сниффер нужно ставить на сам сервер.

Могут возникнуть сложности с мониторингом https трафика.

1 лайк

Когда тестирую руками примерно так и делаю, только использую Charles.
Но вопрос на самом деле про программный мониторинг трафика для его дальнейшего использования в тестах (не было ясно с моего поста, обновил)

А можно вопрос. А зачем сниферить трафик в вашем случае? Клиент и сервер адекватно реагируют друг на друга, ну и нормально, нет? Или какое-то особое поле?

Дело в проверках. Например при некорректных данных в случае логина, серверная валидация каких либо полей, и пр. у Андроида это реализованно через тост уведомления. как их отлавливать - не представляю. вот и пришла идея про мониторинг траффика.

Всё равно не понял. К вам же на сервер запрос приходит? Он его разбирает и говорит, что логин не верный, так?

зарос вида POST ./login с контентом.
в ответ приходит в зависимости от контента: 200 OK / 401 Unauthorized
Во втором случае так же приходит json с конкретной проблемой(не валидные данные/ пользователь заблокирован/пр)
вот и на основе этих ответов приложение делает разное. переводит на другой экран, показывает тосты, и пр.
вот и хочу иметь доступ к рест интерфейсу. и в нужные моменты проверять правильно ли приложение отреагировало

А нельзя просто кейсы соответствующим образом составлять, и проверять как приложение отреагировало?

А если изменить задачу и сделать отдельные тесты для сервера?

Проверять именно работу API отдельно от клиента. Это позволит проверять какой сервер дал ответ в зависимости от запроса.

Проверять ушел ли вообще запрос на сервер - как мне кажется проще по логам самого сервера.

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

1 лайк

Наверно не полно обьяснился. имеем такую систему:
приложение, и экран логина. в нем поле ввода пароля и кнопка логин
при удачном логине открывается другой экран ( тут проблем вообще нет)
при не удачном логине, в зависимости от введеного пользователем, от состояния сервера, наличия интернета, и пр - появляется тост сообщение с соответсвующим сообщением.

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

  • смотреть на сервере(логи, сама база(есть счетчики логинов) и пр)
  • делать скриншоты экрана с тостом, и читать текст с картинки. и там уже находить нужное.

Вот последний вариант таки получилось реализовать. Но возможность отслеживать траффик, отдельно от этой задачи, все равно класная фича:)

А зачем отслеживать??? Отправляйте сами ответ от сервера. Тут действительно надо разбивать задачу. Отдельно сервер, отдельно клиент. А потом уже интеграционные тесты.

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

Ограничение: соответственно, работает только с debug-билдами.

Параметры и примеры использования: Outil de ligne de commande Logcat  |  Android Developers (можно фильтровать по Activity).

Решил уже с помощью встроенного в руби вебсерва/прокси - WEBrick
пришлось расширить его, тк он не принимает PUT / DELETE

Вот что получилось: gist