Android Debug Bridge для тестировщика без SMS и регистрации |
02.11.2022 00:00 |
Автор: Александр Карпенко, inDrive Меня зовут Александр Карпенко, я QA Engineer в inDrive. Я подготовил эту статью для начинающих QA-специалистов. Ниже расскажу, как использовать Android Debug Bridge (ADB) в тестировании мобильных приложений и нужен ли вообще этот инструмент. Я думаю, базовые знания в тестировании у вас уже есть — поэтому не буду описывать процесс подготовки и настройки. Возможности ADB постоянно расширяются, но я поделюсь приемами, которые пригодятся ежедневно. Мой рассказ — о тестировании мобильных приложений, поэтому речь пойдет о macOS из-за возможности эффективно работать со всеми популярными мобильными платформами. На других ОС примеры могут незначительно отличаться, да простят меня адепты Windows. Для начала коснемся самых базовых команд, без которых дальнейшее повествование будет нелогичным. Вывод списка подключенных устройств и соединение с устройствомОбычно мы работаем с одним девайсом, но иногда подключаем несколько устройств — например, по TCP/IP. Тогда указываем вручную, на каком из девайсов нужно выполнить команду. Выводим список всех подключенных устройств, чтобы получить идентификатор:
Чтобы указать ADB, с каким устройством нужно работать, следует прописать серийный номер устройства после ключа
Например, установка приложения на конкретное устройство из списка:
Еще один частый сценарий — одновременная работа с реальным девайсом и эмулятором, например, в роли исполнителя и заказчика. В таком случае легко различать девайсы не по серийному номеру, а с помощью ключей Например,
Также мы можем подключиться к устройству по TCP/IP, когда оно использует ту же Wi-Fi-сеть. Для этого подключаем устройство к ПК кабелем и меняем режим работы на девайсе с USB на TCP/IP командой Вычисляем IP-адрес устройства любым доступным способом. Например, через настройки телефона в общей информации или с помощью команды Если к этому моменту вы уже отключили девайс от ПК, не забудьте дополнительно указать S/N устройства. Подключаемся к нему:
Отключить устройство можно командой
Для возврата в режим работы по USB используем команду
(нижний регистр важен). Установка и удаление приложения, поиск пакета на устройствеУстановка приложения осуществляется командой
Приведу несколько полезных ключей после команды install, которые часто используются:
Удаление приложения происходит уже по имени пакета. Для этого нужно знать, как приложение регистрируется в системе. Используем оболочку Shell и менеджер пакетов Package Manager (pm). Следующей командой выведем список всех установленных приложений:
Можно отфильтровать список по имени приложения. Это понадобится, если список довольно большой, но мы знаем, какое слово присутствует в названии пакета:
Также можно сделать вывод в отдельный файл и там найти нужный пакет:
Теперь, когда мы знаем, как вычислить имя пакета приложения. Вернемся к тому, как удалить его с устройства. Сделать это можно командой
Отдельно приведу команду, которая часто может пригодиться:
Загрузка APK файла с девайсаДумаю, это весьма редкий случай. Но, возможно, кому-то пригодится, как однажды пригодилось мне. Все установленные приложения хранят свой APK в папке /data/app. Поэтому, зная имя пакета, можно найти место, куда установлено приложение, и скачать оттуда его APK. Для этого выполним команду
Это может выглядеть не совсем презентабельно:
Но именно в таком виде нам и нужен этот путь. Немного забежим вперед и посмотрим, как можно скопировать на ПК с телефона нужный нам файл. Сделать это можно командой Текстовые поляНемного коснемся проверки текстовых полей. Например, нужно проверить ограничение на ввод максимального числа символов в поле. Если вы пользуетесь одним устройством, можно хранить разные наборы передаваемых данных на самом телефоне или в облаке. Но когда приходится проверять на разных девайсах, можно хранить данные для тестирования на ПК и передавать их на устройства следующими командами:
Например:
Например, команда
Важно: ADB не работает с кириллицей, получим NullPointerException. Существует способ передачи буфера обмена:
Нужно помнить, что некоторые символы могут не передаваться в том виде, в котором они отображаются на ПК. Проблему можно решить с помощью потокового редактора текста sed. Приведу пример расширенной команды, где мы заменяем все пробелы в буфере на нужные нам спецсимволы для корректной передачи текста на девайс:
ключ
ДиплинкиЭтот способ поможет проверить переходы по диплинкам на нужные экраны в следующих ситуациях:
В Shell ADB мы можем выполнять команды с помощью Activity Manager (AM). Стартуем нашу активити и передаем диплинк, который мы хотим проверить. Обычно в диплинке присутствует символ &, который разделяет экраны. Поэтому при открытии через терминал нужно поставить перед ними обратный слэш (\):
Возможно, при переносе команды в терминал придется переписать кавычки вручную или заменить на одинарные. Может ругаться на ошибку синтаксиса. Создание скриншотов и запись видео с экрана устройстваСделаем скриншот этой командой:
Например:
Сохранить скрин на ПК можно так:
Или можно сразу запускать всю команду целиком:
На последних версиях ADB скриншот можно получить командой
Установленный по умолчанию путь можно изменить вручную, добавив его в конце команды:
Также при желании можно немного автоматизировать этот процесс, добавив алиас в Для записи видео существует команда:
Например:
Можно вручную прописать время записи ключом Остановить запись раньше времени можно комбинацией клавиш CTRL+C. Скопировать файл можно также через команду pull по аналогии со скриншотом. Также можно посмотреть дополнительные возможности этой утилиты с помощью ключа Полезно пользоваться ключом Про то, как стянуть с девайса что-либо мы поговорили, теперь поговорим немного о том, как туда что-нибудь закинуть. Открыли на ПК, изменили формат, содержание, закинули на телефон, проверили, что приложение корректно реагирует на неизвестные форматы, на превышение размера. Загрузить файл на телефон с ПК можно командой:
Выполним команду:
Проверка восстановления состояния приложения после его убийства системойЕще один пример из опыта связан с проверкой восстановления стейта приложения после его убийства системой. Сворачиваем приложение, убиваем процесс — это действие имитирует остановку процесса системой в случае нехватки памяти:
Запускаем снова, смотрим, что ничего не сломалось. Мы столкнулись с таким сценарием: пользователь сворачивает приложение, находясь на определенном экране. Через какое-то время система тормозит процесс и кэширует его стейт. Когда пользователь пытается развернуть приложение, получает краш. Это происходит при обращении к данным из кэша, так как фрагменты восстанавливают свой стек и состояние, но кэш уже пустой. К сожалению, этот баг мы не поймали на тестировании, потому что не сталкивались с таким раньше, и он ушел в прод. Но теперь вы знаете, что такое возможно, и не допустите наших ошибок. ЛогиРабота с логами полезна, когда мы ищем причину краша приложения. Если нужно сохранить текущий буфер логов, сделать это можно командой:
А команда Существует несколько уровней по мере возрастания: V — Verbose, D — Debug, I — Info, W — Warn, E — Error, F — Fatal, S — Silent. Например:
Теперь немного о форматировании вывода и фильтрах, с помощью ключа
Каждое сообщение журнала имеет тег и связанный с ним приоритет. С их помощью можно уменьшить количество вывода в консоль:
Ну и всегда можно использовать утилиту grep для фильтрования вывода:
По традиции, за более дополнительной информацией всегда можно обратиться к помощнику Теперь о том, как это использовать. Например, если баг воспроизвелся, а устройство не было подключено, можно сразу подключить его и перенаправить лог в файл. Для последующего дебага перед сбором логов можно чистить буфер, чтобы исключить лишние данные. Сделать это можно командой: Для любителей покопаться в куче логов есть еще один инструмент — ADB bugreport. Позволяет создавать ZIP-архивы с полной отладочной информацией в простом текстовом формате
Копирует всю информацию об устройстве, такую как данные
Самая важная для нас информация хранится в Есть еще один интересный инструмент для работы с крашами — ANR, когда приложение не отвечает Application Not Responding. Запускаем его командой:
ЭмуляторыВывод списка настроенных эмуляторов:
Запуск нужного нам эмулятора:
При работе с эмуляторами бывает, что необходимо перезапустить службы. При этом сервер нужно запустить после старта эмулятора, но часто достаточно и одной команды:
Для самых ленивых, можно создать эмулятор из командной строки. Например, следующая команда создает эмулятор с именем “test”, используя системный x86-образ с API 25:
Если нужного образа нет, можно предварительно установить его командой:
С эмуляторами также во время работы иногда возникают фантомные проблемы, и одна из частых команд, которая помогает это загрузка эмулятора на холодную без подтягивания автоматического снапшота, при этом на выходе снапшот будет сделан:
Еще несколько полезных ключей при старте эмулятора:
Если эмулятору по-прежнему плохо, можно очистить его с помощью ключа, который возвращает эмулятор в первоначальное состояние: Создание снапшотов — весьма полезный инструмент для сохранения разных состояний девайса. Вручную это можно делать через настройки эмулятора, либо с помощью команды:
Далее можно загрузить сохраненный ранее снапшот командой:
Можно сразу запускать эмулятор с нужным нам снапшотом: Также с помощью команды
С нашим эмулятором можно работать через консоль Далее запускаем наш эмулятор. В другой вкладке терминала подключаемся к нему командой
После отработки команды мы можем делать всякие полезные штуки с нашим эмулятором, в том числе, работать с Например, работа со снапшотами немного упрощается, команды из предыдущего раздела сокращаются до Изменение разрешения на девайсеДля проверки корректности отображения элементов на экране устройства есть полезные команды менеджера окон (wm), позволяющие изменять разрешение и плотность пикселей. Так можно перебрать все необходимые варианты размеров экрана и посмотреть, как наше приложение будет адаптироваться под них:
Если мы запустим наши команды без аргументов, нам вернется текущее разрешение экрана и плотность пикселей подключенного устройства или эмулятора. MonkeyОтдельно можно упомянуть инструмент Monkey, который генерирует случайные пользовательские события на эмуляторе или устройстве: клики, касания и жесты, а также ряд событий системного уровня, что напоминает движения глупой мартышки. Можно использовать Monkey для стресс-тестирования.
Пример полного сценария: Ключ Ключ Ключ Ключ Разрешения приложенияРабота с пермишенами заключается в их отзыве у приложения, потому что предоставление разрешение обычно идет через запрос самого приложения. Это делается быстро и просто, тогда как отзыв разрешения идет через системные настройки.
Итак, чтоб отозвать разрешение у нашего приложения, нужно выполнить команду
Командой
БатареяНемного коснемся работы с батареей, а также затронем режим ожидания.
Теперь поговорим про режимах ожидания. Начиная с Android 6.0, появилась функция Doze Mode. Она направлена на экономию заряда и продление срока службы батареи за счет ограничения активности приложений после того, как пользователь не взаимодействовал с устройством и оно не находилось на зарядке. При этом система периодически выходит из Doze Mode для выполнения отложенных фоновых задач. Еще один схожий инструмент Android — App Standby. В отличие от Doze Mode, это состояние конкретного приложения, которое находится в фоне определенный период времени и после этого входит в режим Standby. Наша задача — убедиться в том, что приложение нормально восстанавливает свою работу после выхода из этих двух режимов энергосбережения. Для перехода устройства в режим Doze Mode нужно выполнить следующие команды:
После всех манипуляций с батареей лучше выполнить команду Также есть команда для принудительного ввода устройства в Doze Mode: Вывести обратно из состояния Doze Mode можно командой Теперь немного про App Standby. Для перевода приложения в данный режим нужно выполнить следующие команды:
Далее выводим наше приложение из режима App Standby командой Проверить статус приложения можно командой Еще немного полезных команд
Получить список доступных для приложения Activity: Получить имя запущенной активити: Запустить выбранную активити приложения: Сделать вызов на указанный телефонный номер: Открыть страницу в браузере: В конце хочу сказать, что все возможности Android Debug Bridge невозможно запихнуть в одну статью, как и досконально изучить их работу. Постоянно что-то меняется: что работало сегодня, внезапно может перестать работать завтра. А потребности в знаниях тех или иных инструментов будут возникать по мере поиска решения конкретных задач. Но могу с уверенностью сказать, что этого материала вам хватит для старта и даже больше. Удачи в ваших начинаниях и приятного погружения в интересный мир тестирования. |