Устаревший инструмент monkeyrunner
предоставляет API для написания программ, которые управляют устройством Android или эмулятором из-за пределов кода Android.
Инструмент monkeyrunner
в первую очередь предназначен для тестирования приложений и устройств на функциональном уровне/уровне платформы, а также для запуска наборов модульных тестов, но вы можете использовать его и для других целей. С помощью monkeyrunner
вы можете написать программу на Python, которая устанавливает приложение Android или тестовый пакет, запускает его, отправляет на него нажатия клавиш, делает снимки экрана его пользовательского интерфейса и сохраняет снимки экрана на рабочей станции.
Внимание: API monkeyrunner
не поддерживается. Вместо этого мы рекомендуем использовать инструмент App Crawler или платформу тестирования UI Automator .
Инструмент monkeyrunner
не связан с UI/Application Tester Monkey , также известным как инструмент monkey
. Инструмент monkey
запускается в оболочке adb
непосредственно на устройстве или эмуляторе и генерирует псевдослучайные потоки пользовательских и системных событий. Для сравнения, инструмент monkeyrunner
управляет устройствами и эмуляторами с рабочей станции, отправляя определенные команды и события из API.
Инструмент monkeyrunner
предоставляет следующие функции для тестирования Android:
- Управление несколькими устройствами . API
monkeyrunner
может применять один или несколько наборов тестов на нескольких устройствах или эмуляторах. Вы можете физически подключить все устройства или запустить все эмуляторы (или оба) сразу, подключиться к каждому по очереди программно, а затем запустить один или несколько тестов. Вы также можете запустить конфигурацию эмулятора программно, запустить один или несколько тестов, а затем закрыть эмулятор. - Функциональное тестирование :
monkeyrunner
может запускать автоматическое комплексное тестирование приложения Android. Вы вводите входные значения с помощью нажатий клавиш или событий касания и просматриваете результаты в виде снимков экрана. - Регрессионное тестирование :
monkeyrunner
может проверить стабильность приложения, запустив его и сравнив выходные снимки экрана с набором заведомо правильных снимков экрана. - Расширяемая автоматизация : поскольку
monkeyrunner
представляет собой набор инструментов API, вы можете разработать систему модулей и программ на основе Python для управления устройствами Android. Помимо использования самого APImonkeyrunner
, вы можете использовать стандартнуюos
Python и модулиsubprocess
для вызова инструментов Android, таких как Android Debug Bridge .Вы также можете добавить свои собственные классы в API
monkeyrunner
. Более подробно это описано в разделе «Расширение Monkeyrunner с помощью плагинов» .
Инструмент monkeyrunner
использует Jython , реализацию Python, использующую язык программирования Java. Jython позволяет API-интерфейсу monkeyrunner
легко взаимодействовать с платформой Android. С Jython вы можете использовать синтаксис Python для доступа к константам, классам и методам API.
Простая программа «Monkeyrunner»
Вот простая программа monkeyrunner
, которая подключается к устройству и создает объект MonkeyDevice
. Используя объект MonkeyDevice
, программа устанавливает пакет приложения Android, запускает одно из своих действий и отправляет этому действию ключевые события. Затем программа делает снимок экрана результата, создавая объект MonkeyImage
. Из этого объекта программа записывает PNG-файл, содержащий скриншот.
# Imports the monkeyrunner modules used by this program. from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device, returning a MonkeyDevice object. device = MonkeyRunner.waitForConnection() # Installs the Android package. Notice that this method returns a boolean, so you can test # whether the installation worked. device.installPackage('myproject/bin/MyApplication.apk') # Sets a variable with the package's internal name. package = 'com.example.android.myapplication' # Sets a variable with the name of an Activity in the package. activity = 'com.example.android.myapplication.MainActivity' # Sets the name of the component to start. runComponent = package + '/' + activity # Runs the component. device.startActivity(component=runComponent) # Presses the Menu button. device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot. result = device.takeSnapshot() # Writes the screenshot to a file. result.writeToFile('myproject/shot1.png','png')
API обезьяньего бегуна
API monkeyrunner
содержится в трех модулях пакета com.android.monkeyrunner
:
-
MonkeyRunner
: класс служебных методов для программmonkeyrunner
. Этот класс предоставляет метод подключенияmonkeyrunner
к устройству или эмулятору. Он также предоставляет методы для создания пользовательских интерфейсов для программыmonkeyrunner
и для отображения встроенной справки. -
MonkeyDevice
: представляет устройство или эмулятор. Этот класс предоставляет методы для установки и удаления пакетов, запуска действия и отправки событий клавиатуры или касания в приложение. Вы также используете этот класс для запуска тестовых пакетов. -
MonkeyImage
: представляет собой снимок экрана. Этот класс предоставляет методы для захвата экранов, преобразования растровых изображений в различные форматы, сравнения двух объектовMonkeyImage
и записи изображения в файл.
В программе Python вы получаете доступ к каждому классу как к модулю Python. Инструмент monkeyrunner
не импортирует эти модули автоматически. Чтобы импортировать модуль, используйте оператор Python from
:
from com.android.monkeyrunner import <module>
Где <module>
— имя класса, который вы хотите импортировать. Вы можете импортировать более одного модуля в одном операторе from
, разделяя имена модулей запятыми.
Беги обезьяна-бегун
Вы можете запускать программы monkeyrunner
либо из файла, либо вводя операторы monkeyrunner
в интерактивном сеансе. Вы делаете и то, и другое, вызывая команду monkeyrunner
, которая находится в подкаталоге tools/
вашего каталога SDK. Если вы укажете имя файла в качестве аргумента, команда monkeyrunner
запустит содержимое файла как программу Python; в противном случае он запускает интерактивный сеанс.
Ниже приведен синтаксис команды monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
В таблице 1 поясняются флаги и аргументы monkeyrunner
.
Аргумент | Описание |
---|---|
-plugin <plugin_jar> | (Необязательно) Указывает файл JAR, содержащий плагин для monkeyrunner . Чтобы узнать больше о плагинах monkeyrunner , см. раздел «Расширение Monkeyrunner с помощью плагинов» . Чтобы указать более одного файла, включите аргумент несколько раз. |
<program_filename> | Если вы укажете этот аргумент, команда monkeyrunner запустит содержимое файла как программу Python. В противном случае команда запускает интерактивный сеанс. |
<program_options> | (Необязательно) Флаги и аргументы программы в <program_file> |
встроенная справка Monkeyrunner
Вы можете создать ссылку API для monkeyrunner
, выполнив:
monkeyrunner help.py <format> <outfile>
Аргументы:
-
<format>
— это либоtext
для вывода в виде обычного текста, либоhtml
для вывода в формате HTML. -
<outfile>
— это имя выходного файла с указанием пути.
Расширьте Monkeyrunner с помощью плагинов
Вы можете расширить API monkeyrunner
с помощью классов, написанных вами на Java, и встроить их в один или несколько файлов JAR. Вы можете использовать эту функцию, чтобы расширить API monkeyrunner
своими собственными классами или расширить существующие классы. Вы также можете использовать эту функцию для инициализации среды monkeyrunner
.
Чтобы предоставить плагин для monkeyrunner
, вызовите команду monkeyrunner
с аргументом -plugin <plugin_jar>
, описанным в таблице 1 .
В коде вашего плагина вы можете импортировать и расширить основные классы monkeyrunner
MonkeyDevice
, MonkeyImage
и MonkeyRunner
в com.android.monkeyrunner
(см. раздел об API monkeyrunner
).
Обратите внимание, что плагины не предоставляют вам доступ к Android SDK. Вы не можете импортировать такие пакеты, как com.android.app
. Это связано с тем, что monkeyrunner
взаимодействует с устройством или эмулятором ниже уровня API-интерфейсов платформы.
Класс запуска плагина
В файле JAR плагина может быть указан класс, экземпляр которого создается до начала обработки сценария. Чтобы указать этот класс, добавьте ключ MonkeyRunnerStartupRunner
в манифест файла JAR. В качестве значения используйте имя класса, который будет запускаться при запуске. В следующем фрагменте показано, как это сделать в сценарии сборки ant
:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Чтобы получить доступ к среде выполнения инструмента monkeyrunner
, класс запуска может реализовать com.google.common.base.Predicate<PythonInterpreter>
. Например, этот класс устанавливает некоторые переменные в пространстве имен по умолчанию:
Котлин
package com.android.example import com.google.common.base.Predicate import org.python.util.PythonInterpreter class Main: Predicate<PythonInterpreter> { override fun apply(anInterpreter: PythonInterpreter): Boolean { /* * Examples of creating and initializing variables in the monkeyrunner environment's * namespace. During execution, the monkeyrunner program can refer to the variables * "newtest" and "use_emulator" * */ anInterpreter.set("newtest", "enabled") anInterpreter.set("use_emulator", 1) return true } }
Ява
package com.android.example; import com.google.common.base.Predicate; import org.python.util.PythonInterpreter; public class Main implements Predicate<PythonInterpreter> { @Override public boolean apply(PythonInterpreter anInterpreter) { /* * Examples of creating and initializing variables in the monkeyrunner environment's * namespace. During execution, the monkeyrunner program can refer to the variables "newtest" * and "use_emulator" * */ anInterpreter.set("newtest", "enabled"); anInterpreter.set("use_emulator", 1); return true; } }