Adb shell monkey android

Содержание
  1. Инструменты функционального тестирования — Monkey и MonkeyRunner
  2. Monkey
  3. MonkeyRunner
  4. Запускаем Monkey-testing на Android
  5. Как запустить приложение с помощью инструментов Android ADB?
  6. Автоматизация тестирования Android приложений
  7. Концепция автоматического тестирования
  8. Управление Android устройствами
  9. Управление с помощью утилиты ADB
  10. Проверка работы ADB
  11. Работа с несколькими устройствами
  12. Основные команды ADB
  13. Чтение логов
  14. Снятие скриншотов с помощью утилиты screencap
  15. Пример BASH скрипта для тестирования приложения c помощью ADB
  16. Управление с помощью MonkeyRunner
  17. Чтение логов с помощью MonkeyRunner
  18. Снятие скриншотов
  19. Пример управления устройством с помощью MonkeyRunner
  20. Средства автоматизированного тестирования
  21. Тестирование с помощью monkey
  22. Тестирование с помощью MonkeyRunner
  23. Тестирование с помощью getevent/sendevent
  24. Тестирование с помощью Robotium
  25. Сравнение способов тестирования
  26. Анализ результатов
  27. Анализ логов
  28. Анализ скриншотов
  29. Сброс состояния устройства после тестирования
  30. Многократное нажатие кнопки «Назад»
  31. Заключение

Инструменты функционального тестирования — Monkey и MonkeyRunner

Monkey

Начнём с самого простого инструмента — с Monkey. Monkey является не столько инструментом функционального тестирования, сколько т.н. стресс-тестирования, либо, как говорится на официальной странице документации проекта — UI/Application Exerciser. Грубо говоря, Monkey эмулирует попадание телефона с запущенным приложением в лапки к обезьянке (ну или в руки к маленькому ребенку), с последующими хаотичными действиями «пользователя». Впрочем, Monkey позволяет достаточно гибко настроить «хаотичность», интервал между событиями, их тип и т.п. Для подобного тестирования исходный код приложения не требуется — оно просто должно быть установлено на устройство либо эмулятор, а запуск в простейшем случае осуществляется следующим образом из консоли:

$ adb shell monkey -p org.monkeys -v 500

Указывается имя пакета вашего приложения и количество генерируемых событий. В случае возникновения исключения (Exception), соответствующий stack trace будет выведен в консоль:

Вот и все о Monkey — тестируйте свое приложение, и возможно, это сделает его более надежным — кто знает.

MonkeyRunner

Несмотря на схожее с Monkey название, MonkeyRunner совершенно другой инструмент, который позволяет выполнять функциональное тестирование приложения («прокликивающие» тесты), предоставляя API для управления устройством. MonkeyRunner является более низкоуровневым по сравнению с Robotium, и не требует исходного кода приложения в сравнении с Robolectric. Но только лишь тестированием область применения MonkeyRunner не ограничивается — с его помощью можно строить системы, контролирующие android-устройства через UI (и не только). MonkeyRunner использует Jython и скрипты или сценарии тестов могут быть написаны на Python, или записать действия пользователя с помощью рекордера.

Как уже было сказано, MonkeyRunner поставляется вместе в составе SDK, а сам интерпретатор и его интерактивная консоль могут быть запущены с помощью скрипта monkeyrunner , находящегося в каталоге tools SDK.

Запись и проигрывание сценария

Из состава SDK нам понадобятся два python-скрипта: для рекордера и плеера. Запускать их нужно соответственно с помощью monkeyrunner :

Рекордер выглядит примерно так:

С помощью кнопки «Export actions» сценарий может быть записан в файл, после чего его можно будет воспроизвести плеером:

Конечно же, эмулятор должен быть запущен при всех вышеперечисленных действиях.

Как видно из скриншота, MonkeyRunner оперирует координатами для выбора элемента управления, что конечно же не столь удобно, как выбор элемента в Robotium или Robolectric и будет зависеть от размеров экрана, но может быть, что такое поведение будет востребовано для создания сценариев тестирования приложений, не обладающих привычными элементами интерфейса — например, игр.

Написание сценария

MonkeyRunner позволяет описывать собственные сценарии с использованием Python. В дополнение к управлению интерфейсом возможны удаление и установка приложения, сохранение скриншотов и прочее. Пример такого скрипта:

Более подробно о возможностях, предоставляемых API можно узнать в официальной документации к MonkeyRunner.

Интеграция с Eclipse

Чтобы иметь возможность запускать свои сценарии из Eclipse достаточно будет сделать следующее:

  1. Установить расширение PyDev
  2. В настройках PyDev добавить новый Python-интерпретатор в качестве «Interpreter Executable» указав скрипт monkeyrunner (добавить именно как Python, а не Jython). Для старых версий SDK возможно понадобится скрипт-обертка.
  3. Добавить скрипты сценариев в их «Run configuration» указать для них только что добавленный интерпретатор.

Можно конечно создать для сценариев отдельный Python-проект.

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

Источник

Запускаем Monkey-testing на Android

В статье опишу, как запустить Monkey testing на Android с помощью встроенной утилиты. Называется она UI/Application Exerciser Monkey, или просто Обезьянка и позволяет провести стресс-тестирование вашего приложения.

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

Установить Android SDK.

Установить тестируемое приложение на устройство \ эмулятор.

Узнать имя пакета Android приложения.

Для запуска в консоли пишем:

где packagename — имя пакета тестируемого приложения, например com.google.gms , а с помощю ключа -v мы передаём количество действий, выполняемых Обезъянкой, в нашем случае 500 .- количество необходимых действий и наблюдаем как быстро беспорядочно обезъянка тапаем по экрану нашего приложения.

Читайте также:  Gapps для андроид что это

В таком случае некоторые тапы попадют не только по приложению, но и по системным элементам. Для того, чтобы исключить взаимодействие обезъянки с системными кнопками (Home, Back, App, Sound) необходимо добавить ключ —pct-syskeys 0 , где 0 — коилчество тапо в по системным элементам в процентах, в нашем случае это 0%:

В таком варианте запуска между нажатиями по экрану пауза отсутствует. Для того, чтобы добавить паузу и иметь возможность наблюдать за происходящим на экране добавим ключ —throttle 100 — задержка в миллисекундах между нажатиями:

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

Если во время теста случился крэш, то полезно остановить выполнение Обезъянки, чтобы она не продолжала свою работу. Для этого добавляем параметр —kill-process-after-error :

Источник

Как запустить приложение с помощью инструментов Android ADB?

Как отправить намерение с помощью инструментов Android ADB?

Или вы можете использовать это напрямую:

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

/ .bash_profile была намного быстрее function androidrun() < ant clean debug adb shell am start -n $1/$1.MainActivity >и ее использование androidrun com.example.test

Можно запустить приложение с указанием имени пакета только с помощью инструмента обезьяна , следуя этой схеме:

Команда используется для запуска приложения, используя инструмент обезьяны, который генерирует случайный ввод для приложения. Последняя часть команды — целое число, которое определяет количество сгенерированных случайных входных данных для приложения. В данном случае это номер 1, который фактически используется для запуска приложения (щелчок по значку).

Или вы можете использовать это:

/ android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, в котором будет показана следующая запись: launchable-activity: name = ‘com.company.android.package.YourLaunchableActivity’

Пользователи linux / mac могут также создать скрипт для запуска apk с чем-то вроде следующего:

создайте файл с именем «adb-run.sh» с этими 3 строками:

затем «chmod + x adb-run.sh», чтобы сделать его исполняемым.

теперь вы можете просто:

Преимущество в том, что вам не нужно знать имя пакета или имя запускаемой деятельности. Точно так же вы можете создать «adb-uninstall.sh myapp.apk»

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

Кроме того, я хочу упомянуть еще одну вещь.

Когда вы запускаете приложение из adb shell am , оно автоматически добавляет флаг FLAG_ACTIVITY_NEW_TASK, который меняет поведение. Смотрите код .

Например, если вы запускаете действие из Play Store из adb shell am , нажатие кнопки « Назад » (аппаратная кнопка «назад») не отнимает у вас ваше приложение, вместо этого вы перенесете предыдущую активность в Play Store, если она была (если не было задачи Play store). , тогда это займет у вас ваше приложение). Документация FLAG_ACTIVITY_NEW_TASK гласит:

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

Это заставило меня потратить несколько часов, чтобы выяснить, что пошло не так.

Итак, имейте в виду, что adb shell am добавьте флаг FLAG_ACTIVITY_NEW_TASK .

Источник

Автоматизация тестирования Android приложений

Концепция автоматического тестирования

Задача — с наибольшей точностью автоматизировать действия, которые выполняет тестировщик. Давайте их рассмотрим. В наличии есть несколько приложений и несколько Android устройств. Для каждого приложения и каждого устройства выполняются следующие шаги:

  1. Установка приложения на устройство
  2. Запуск приложения
  3. Тестирование приложения выбранным способом
  4. Удаление приложения
  5. Сброс состояния устройства

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

Далее рассматриваются средства, позволяющие автоматизировать перечисленные шаги.

Управление Android устройствами

Для начала нужно выделить компьютер на котором будет запускаться автоматическое тестирование и настроить на нем Android SDK. Примеры приводятся для компьютера с установленной ОС Linux.

На всех тестируемых устройствах нужно отключить экран блокировки и максимально увеличить время ожидания. Для некоторых методов тестирования нужно отключить смену ориентации экрана.

В Android SDK имеются две утилиты для управления устройствами: adb и MonkeyRunner.

Я постараюсь подробно описать автоматизацию действий, использующихся при тестировании. Тем, кто знаком с ADB и MonkeyRunner имеет смысл сразу переходить к разделу «Способы автоматизированного тестирования».

Читайте также:  Iphone gps мы android

Управление с помощью утилиты ADB

ADB (Android Debug Bridge) – утилита для управления Android устройствами из командной строки. Официальная документация по ADB: developer.android.com/tools/help/adb.html

Проверка работы ADB

Устанавливаем и настраиваем Android SDK, подключаем к компьютеру Android устройства и выполняем команду:

Команда выдаст список всех подключенных устройств. Если список устройств не пуст, значит ADB настроен и работает.

Работа с несколькими устройствами

Чтобы указать ADB с каким устройством нужно работать, следует прописать серийный номер устройства после ключа -s :

Серийный номер устройства можно посмотреть командой adb devices . Ключ -s позволяет работать одновременно с несколькими подключенными устройствами. В дальнейшем ключ -s в командах я указывать не буду.

Основные команды ADB

Открыть консоль на устройстве:

Запустить команду на устройстве:

В Android присутствуют многие стандартные утилиты Linux: ls, cat, dmesg,…

Установить приложение из apk файла:

Название package можно получить из apk файла командой:

Загрузить файл с устройства на компьютер:

Загрузить файл с компьютера на устройство:

Примечание:
В большинство директорий на устройстве разрешен доступ только на чтение. Доступ на запись разрешен в директорию /sdcard (из нее нельзя запускать программы) и /data/local/tmp/ .

Запускает указанную activity. Название activity, которая запускается при выборе приложения в меню можно получить из apk файла командой:

Чтение логов

Чтение логов в Android производится утилитой logcat.
Домашняя страница утилиты logcat: developer.android.com/tools/help/logcat.html

Считать логи с устройства (блокируется до нажатия Ctrl-C):

Очистить буфер логов на устройстве:

Считать буфер логов на устройстве (выдает текущее содержимое буфера, не блокируется):

Снятие скриншотов с помощью утилиты screencap

Утилита screencap сохраняет текущее содержимое экрана в графический файл:

Утилита screencap имеется на телефонах с Android 4.x и выше. На предыдущих версиях Android снятие скриншотов можно производить с помощью MonkeyRunner.

Пример BASH скрипта для тестирования приложения c помощью ADB

Управление с помощью MonkeyRunner

Утилита MonkeyRunner предоставляет API для написания скриптов, которые управляют Android устройстами. С помощью MonkeyRunner можно написать скрипт на языке Python, который устанавливает Android приложение, запускает его, имитирует действия пользователя, снимает скриншоты и сохраняет их на компьютер. Утилита MonkeyRunner использует Jython для выполнения скриптов.

Чтение логов с помощью MonkeyRunner

Скрипт запишет логи в файл example.log в текущей директории.

Снятие скриншотов

Скрипт снимает скриншот и сохраняет его в файл screenshot.png в текущей директории.

Пример управления устройством с помощью MonkeyRunner

Средства автоматизированного тестирования

Тестирование с помощью monkey

Представьте, что устройство попало в цепкие лапы очень активной и творческой обезьяны – утилита monkey призвана имитировать подобную ситуацию.

Утилита monkey входит в состав Android SDK. Утилита отправляет на устройство поток псевдо-случайных действий пользователя. Параметры командной строки задают количество действий пользователя, соотношение их типов и имя тестируемого пакета, чтобы, например, обезьяна не вышла за пределы тестируемого приложения и не начала рассылать SMS по всем контактам из адресной книги.

Примеры использования и перечень параметров приведены на домашней странице: developer.android.com/tools/help/monkey.html

Главное достоинство monkey – отсутствие затрат на поддержку. Кроме того, стресс-тестирование приложения потоком произвольных событий может обнаружить нетривиальные ошибки.

Недостатки тестирования утилитой monkey:

  • Неэффективно для тестирования функционала, вызываемого сложной последовательностью действий. Например, monkey не сможет пройти аутентификацию и основной функционал приложения останется без внимания.
  • Игры со сложным управлением, требующим быстрой реакции и сложных жестов, будут завершатся в самом начале, либо вообще не начнутся.
  • Ошибки, найденные с помощью monkey, очень сложно воспроизвести.
  • Нет проверки состояния приложения.

С помощью утилиты monkey можно без усилий протестировать любое приложение – это неплохая отправная точка. Возможно, что этот способ покажет адекватные результаты для конкретного приложения. Если же качество тестирования неудовлетворительное, то следует воспользоваться другими способами тестирования.

Тестирование с помощью MonkeyRunner

При помощи скриптов использующих MonkeyRunner API можно не только разработать основу для тестирующей системы, но и написать скрипты для тестирования конкретного приложения на конкретном устройстве.

Достоинства:

  • Гибкость – реализовать можно практически все, что угодно.

Недостатки:

  • Сложность написания скриптов даже в простых случаях.

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

Тестирование с помощью getevent/sendevent

Утилиты getevent и sendevent позволяют записать последовательность действий пользователя, а затем воспроизвести эту последовательность. Утилиты находятся на самом Android-устройстве и не требуют для работы root-доступа.
Достоинства:

  • Последовательности действий могут быть записаны без дополнительных затрат в ходе ручного тестирования, если оно уже проводится.
  • Для записи сценариев не требуются навыки программирования.

Недостатки:

  • Последовательности действий необходимо записывать отдельно для каждого приложения и для каждого устройства. При изменении интерфейса приложения все записанные действия необходимо проделать заново.
  • Отсутствует проверка состояния приложения. Например, при тестировании браузера открывается страница. Если она открывается дольше, чем в момент записи, то дальнейшие действия будут выполнены до полной загрузки страницы и результат будет некорректный. Иногда возможно записать скрипт таким образом, что во всех подобных случаях ожидание превышает максимально возможное.
  • Быстрая и сложная последовательность действий будет воспроизводиться дольше, чем записывалась – поэтому способ не всегда подойдет для тестирования динамичных игр, где критично время реакции и своевременность действия.
Читайте также:  Самый лучший русско английский переводчик для андроид

Запись последовательности действий:

На устройстве должны воспроизвестись записанные действия.

Тестирование с помощью Robotium

В отличии от рассмотренных ранее способов Robotium не входит в состав Android SDK, а распространяется под Open Source лицензией.

Главное отличие Robotium в том, что тестовые действия описываются на уровне интерфейса приложения. В рассмотренных ранее способах тестовые действия явно или неявно описывались на уровне устройств ввода.

Например, в приложении нужно нажать кнопку «OK». С помощью скрипта MonkeyRunner нажатие на кнопку реализуется как: «Коснуться точки экрана с координатами (x0, y0)». С помощью Robotium это реализуется как: «Нажать кнопку с текстом «OK»».

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

Кроме того, Robotium позволяет проверять реакцию приложения на действие.

Например, после нажатия на кнопку «OK» в приложении должен появиться список с элементом «Item 1». С помощью Robotium можно проверить, появился ли список с таким элементом.

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

Недостатки:

  • Для каждого приложения необходимо разработать сценарий тестирования на языке Java. Это требует навыков программирования и временных затрат.
  • При изменении интерфейса приложения сценарий тестирования придется модифицировать.
  • Написать сценарий Robotium сложнее, чем записать действия с помощью getevent/sendevent.

В целом, Robotium позволяет разрабатывать наиболее качественные сценарии тестирования при адекватных затратах.

Сравнение способов тестирования

Способ тестирования Достоинства Недостатки
Monkey – поток случайных действий пользователя. Отсутствуют затраты на сопровождение.
Не зависит от устройства.
Стресс-тестирование позволяет обнаружить нетривиальные ошибки.
Качество тестирования варьируется от приложения к приложению.
Найденные ошибки сложно воспроизвести.
Нет проверки состояния приложения.
MonkeyRunner – скрипт управления устройством. Гибкость. Сложность написания и поддержки скриптов даже для простых приложений.
getevent/sendevent – запись/воспроизведение действий пользователя. Для записи последовательности действий не требуются навыки программирования. Записанная последовательность действий подходит только к одному устройству при фиксированной ориентации.
При изменении интерфейса приложения необходимо заново записать последовательность действий.
Нет проверки состояния приложения.
Robotium – сценарий тестирования интерфейса приложения с проверкой состояния. Действия описываются на уровне интерфейса приложения.
Сценарий может быть независимым от разрешения экрана и ориентации устройства.
После совершения действия можно проверять состояние приложения.
Сложность написания сценариев на языке Java. При изменении интерфейса приложения сценарий придется модифицировать.

Анализ результатов

В результате тестирования приложения перечисленными выше способами мы получили логи и скриншоты. Теперь их нужно проанализировать на наличие ошибок.

Анализ логов

Для начала можно сделать поиск по подстрокам:

  • I/DEBUG
  • FATAL EXCEPTION
  • WIN DEATH

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

Анализ скриншотов

В процессе тестирования вручную можно подготовить серию скриншотов в ключевых моментах тестирования, а затем сравнивать их с содержимым экрана в процессе автоматизированного тестирования. Это позволит определить, правильно ли идет процесс автоматизированного тестирования и выявлять ошибки.

Также полезно сравнивать скриншот до и после запуска приложения – это позволяет определять случаи, когда приложение аварийно завершается без сообщений на экране и в логах.

MonkeyRunner позволяет сравнить два скриншота с заданным допуском в процентах:

К сожалению, в API MonkeyImage не предусмотрена функция загрузки из файла. Поэтому для сравнения сохраненных скриншотов придется писать свою функцию, например с помощью Python Imaging Library.

Сброс состояния устройства после тестирования

После тестирования приложения устройство нужно вернуть в первоначальное состояние.

Этого можно достичь несколькими путями:

  • Многократное нажатие кнопки «Назад».
  • Перезагрузка устройства.
  • Перезапуск процесса zygote.

Рассмотрим первый вариант, как наиболее адекватный.

Многократное нажатие кнопки «Назад»

Нажимаем кнопку «Назад» используя MonkeyRunner:

На практике этот вариант оптимален, так как имитирует поведение реального пользователя.

Заключение

В заметке были рассмотрены некоторые способы автоматического тестирования Android приложений, их достоинства и недостатки. Кроме того, рассмотрены инструменты, входящие в Android SDK или распространяющиеся под Open Source лицензией.

Хочется отметить, что автоматическое тестирование не является панацеей и не заменяет другие виды тестирования. Качественный продукт получается при грамотно построенном процессе тестирования, сочетающем различные способы.

Источник

Оцените статью