1. Что такое Обезьяна?
Monkey — это инструмент командной строки в Android, который можно запускать в эмуляторе или на реальном устройстве.
Он отправляет псевдослучайный поток пользовательских событий (например, ввод с клавиатуры, ввод с помощью сенсорного экрана, ввод с помощью жестов и т. д.) в систему для реализации стресс-тестирования разрабатываемого приложения.
Более простое понимание теста «Обезьяна»: вы можете думать об инструменте «Обезьяна» как об обезьяне, которая в случайном порядке нажимает, касается, перекатывается и прыгает в приложении.
Этот инструмент может имитировать действия пользователя, такие как прикосновение к экрану, перемещение трекбола, нажатие кнопок и т. д., чтобы провести стресс-тестирование программного обеспечения на симуляторе или мобильном устройстве, чтобы определить стабильность и надежность программного обеспечения.
2. Создание тестовой среды для обезьян
(1). Загрузите пакет команд adb на стороне ПК и настройте переменные среды, а также путь к каталогу adb. После настройки среды используйте команду проверки:
adb version
Убедитесь, что если об ошибках не сообщается, конфигурация прошла успешно.
(2) После настройки переменных среды jdk используйте команду проверки:
java -version
Убедитесь, что если об ошибках не сообщается, конфигурация прошла успешно.
(3) На телефоне включен режим разработчика и статус отладки по USB.
(4) Установите для экрана блокировки телефона значение «никогда».
3. Декомпозиция выполнения команд обезьяны
Прежде всего, мы знаем, что программа Monkey поставляется с системой Android и написана на языке Java. Путь хранения в файловой системе Android: /system/framework/monkey.jar.
Программа Monkey.jar, которую мы видели, запускается и выполняется скриптом Shell с именем «monkey».
Путь хранения этого сценария Shell в файловой системе Android: /system/bin/monkey;
Как показано на скриншоте ниже:
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#Приведенное выше примечание к описанию этого скрипта представляет собой относительно простой скрипт, используемый для запуска устройства с помощью скрипта Monkey.
base=/system
#Объявляем базовую переменную , экспорт используется для установки переменной среды, имя переменной — CLASSPATH, то есть устанавливает переменную среды #monkeyизCLASSPATH так, чтобы она указывала на Monkey.jar
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
#trapda Встроенная команда оболочки, используемая существующим скриптом середина для указания способа обработки сигналов. здесь из trap "" HUP Указывает, что сигнал SIGHUP игнорируется и сценарий не может завершить работу даже при отключении сети.
exec app_process $base/bin com.android.commands.monkey.Monkey $*
Последняя строка представляет собой выполнение изда:
В общем: укажите вход обезьяны через app_process и передайте все файлы, чтобы запустить указанную выше настройку CLASSPATH изmonkey.jar.
Указав запись izmonkey в приведенном выше изapp_process, мы можем знать, что наша функция записи maindaсуществоватьcom.android.commands.Monkeyэтот класс находится внутри
Exec можно понимать как исполнение
app_process: app_process запускает Java-процесс на Android.
$* : перейти к скрипту или функции из всех параметров
4. Как выполнить команду обезьяны
Есть четыре способа запустить Monkey:
(1). Оболочка adb + параметры на ПК.
Например:
adb shell monkey -p com.autochina.p2p -v 100 > e:\p2p.log
Вышеописанный метод чаще используется
(2). Войдите в оболочку adb на ПК, чтобы войти в Android-устройство телефона, а затем выберите параметр Monkey +.
(3) Установите симулятор на мобильное устройство и выполните параметры Monkey+ на мобильном телефоне.
(Имитатор мобильного телефона можно найти для терминала Android через поиск Baidu или мобильный помощник 360, и его можно установить. Вы можете ввести параметры mousey + в командной строке симулятора)
(4). Режим сценария.
Инструмент тестирования обезьян Android предоставляет параметр -f scriptfile для указания тестового сценария. В исходном коде MonkeySourceScript.java есть небольшой комментарий, в котором приведен пример длиной менее 10 строк:
Функции, предоставляемые в Monkey, следующие:
15、DispatchPointer(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)
16、DispatchTrackball(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)
17、DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)
18、DispatchFlip(boolean keyboardOpen)
19、DispatchPress(int keyCode)
20、LaunchActivity(String pkg_name, String cl_name)
21、UserWait(long sleeptime)
22、LongPress(int keyCode)
Сначала напишите необходимые тестовые события локально, назовите их Monkey.script (нет требований к формату файла) и поместите файл на SD-карту телефона или симулятора.
Например:
adb push e:\monkey.script /sdcard/
Затем выполните скрипт:
adb shell monkey -v -f /sdcard/monkey.script
Команды, поддерживаемые скриптом Monkey
Команды скрипта должны быть строчными буквами.
Команда сценария заканчивается символом возврата каретки.
5. Знакомство с общими рабочими командами обезьяны.
Как показано на скриншоте ниже:
-p имя пакета:обозначениеприложение。Например:adb shell monkey -p имя пакета общее количество событий
-v: уровень печати журнала. Чем больше -v, тем более подробной будет информация журнала. Поддерживается максимум 3 журнала. Например:адб shell monkey -p имя пакета -v -v -v общее количество событий
-s: генератор псевдослучайных чисел из seed Значение, с точки зрения непрофессионала, — это просто знак, за которым следует число, например: выполнить adb shell monkey -s 1 -p имя пакета общее количество событий,это я отметил -s 1. После завершения командной операции я обнаружил ошибку в журнале. Я хочу повторно выполнить эту операцию. Затем можно продолжить выполнение этой команды, которая часто используется при устранении неполадок.
-f: за которым следует имя тестового сценария, например:adb shell monkey -f имя сценария общее количество событий
--throttle: переводит значение замедления, за которым следует время в мс, указывая фиксированную задержку между событиями. Если этот пункт не подключен, обезьяна не будет задерживать, например: adb. shell monkey --throttle 500 -p имя пакета общее количество событий
--pct-категория событий 11 элементов управления процентом событий (есть события изда9, нет событий --pct-pinchzoom, --pct-rotation), определяемых Android SDK
11 типов событий, перечисленных в порядке из
--pct-touch {+Процент}: 0
В переводе «прикосновение», «событие касания» обычно относится к событию «вниз-вверх», щелчку, происходящему в определенном месте.
Пример: адб shell monkey -p com.htc.Weather --pct-touch 10 1000
--pct-motion {+Процент}: 1
Действие перевода, событие действия обычно относится к взятию из определенной позиции (т. е. событию вниз), а затем появлению после серии псевдослучайных событий (т. е. событию вверх).
Пример: адб shell monkey -p com.htc.Weather --pct-motion 20 1000
--pct-pinchzoom {+Процент}: 2
Перевести масштабирование двумя пальцами, увеличение и уменьшение масштаба событий жестов на смартфонах
--pct-trackball {+Процент}: 3
Чтобы преобразовать траекторию, события траектории состоят из серии случайных движений, а также случайных событий щелчков, следующих за существующим движением.
Пример: адб shell monkey -p com.htc.Weather --pct-trackball 30 1000
--pct-rotation {+Процент}: 4
Поворот экрана перевода, события горизонтального экрана и вертикального экрана
Пример: адб shell monkey -p com.htc.Weather --pct-rotation 40 1000
--pct-nav {+Процент}: 5
Перевести базовую навигацию, основные навигационные события в основном поступают от устройств ввода направления: вверх, вниз, влево, вправо.
Пример: адб shell monkey -p com.htc.Weather --pct-nav 40 1000
--pct-majornav {+Процент}: 6
Перевести основную навигацию. Основное событие навигации обычно относится к некоторым действиям, запускающим графический интерфейс, например клавишам клавиатуры, клавише возврата, клавише меню и т. д.
Пример: адб shell monkey -p com.htc.Weather --pct-majornav 50 1000
--pct-syskeys {+Процент}: 7
Перевести системные клавиши. События системных клавиш обычно относятся к клавишам, зарезервированным только для использования системой, например клавиша ДОМОЙ, клавиша НАЗАД, клавиша набора номера, клавиша отбоя, клавиша регулировки громкости и т. д.
Пример: адб shell monkey -p com.htc.Weather --pct-syskeys 60 1000
--pct-appswitch {+Процент}: 8
Запуск приложения перевода, событие запуска приложения (активность запускает), то есть откройте приложение и откройте все приложения в пакете в максимальной степени, вызвав метод startActivity().
Пример: адб shell monkey -p com.htc.Weather --pct-appswitch 70 1000
--pct-flip {+процент}: 9
Переворот перевода, процент движения клавиатуры, например, при нажатии на поле ввода клавиатура всплывает, при нажатии на область за пределами поля ввода клавиатура убирается.
--pct-anyevent {+Процент}: 10
Переведите другие типы событий. Другие типы событий относятся ко всем остальным событиям, не описанным выше, таким как нажатие клавиш, необычные кнопки и т. д.
Пример: адб shell monkey -p com.htc.Weather
Процентный контроль и использование
Прежде всего, обратите внимание на одну вещь: этоEvent Порядок существования процентов может быть разным для разных версий SDK версии середина. Если в существованииmonkeyparameterсередина не указан параметр события, эти действия назначаются случайным образом, а сумма назначенных процентов для 11 действий составляет 100%. Каждое событие из процентов контролируется путем добавления опций команды.
Например, после добавления процента событий добавьте процент событий --pct-touch к 100:
Команда: адб shell monkey -v -p имя пакета --pct-touch 100 100
--ignore-crashes: трансляция игнорирует сбои. Когда приложение выходит из строя или возникает неконтролируемое исключение, обезьяна будет продолжать работу до тех пор, пока не будет завершен подсчет. Если этот параметр не установлен, Monkey остановится при возникновении вышеуказанного сбоя или исключения.
--ignore-timeouts: трансляция игнорирует тайм-ауты, когда в приложении возникает какая-либо ошибка тайм-аута (например, ANR, т. е. приложения). Not Отвечая), обезьяна будет продолжать до тех пор, пока счет не будет завершен. Если это не установлено, обезьяна запуск будет остановлен при достижении такого тайм-аута.
6. Получите пакет для тестирования с мобильного телефона.
Способ 1. С помощью команды logcat.,Конкретный метод работы заключается в следующем:
существуют Выполнить команду на ПК: адб shell "logcat | grep START" , открываем мобильник и нужно протестировать приложение и найти последний ActivityManagerсередина
Первая половина cmp соответствует содержимому $logcat | grep START #После выполнения этой команды ↑ окно существующего cmd расширит содержимое аналогичного журнала,
Если вы не нашли соответствующее имя пакета,Вы можете выйти и снова открыть тестируемое приложение.,Найдите последний ActivityManager
Способ 2. Сохраните пакет существующего apk на своем мобильном телефоне середина и введите adb. shell После команды ---мобильный телефон изdata/папка data --lsПроверятьвсеимя пакета Найдите APK-зиму, которую хотите протестировать. пакета
Этот метод требует root-прав, иначе он не будет работать. Поэтому при тестировании я все же рекомендую первый вариант
Способ третий: пройти airtest Инструменты также доступны
7. Анализ логов обезьяны
Общие ключевые слова для анализа результатов испытаний:
ANR — это ошибка Android, о которой сообщается, когда страница не может реагировать на события. Обычно возникновение такой ситуации означает, что в потоке пользовательского интерфейса в настоящий момент выполняются трудоемкие операции, вызывающие зависание пользовательского интерфейса.
существовать Monkey в, если вы столкнетесь ANR также остановит выполнение. Если вы хотите игнорировать ANR, пусть он продолжает выполняться при срабатывании, вы можете использовать —ignore-timeouts параметр, это также приведет к сбою -s.
Пример заявления:
adb shell monkey —ignore-timeouts <event-count>
Обычно,Если существуют обезьяньи казни на сцене,Произошла авария,Немедленно остановит следующее выполнение. Но иногда,Когда мы существуем, выполняем Monkeyиз,дасуществоватьбез вмешательства человекаиз,Например, если вы хотите, чтобы он работал ночью,Подождите ситуации.
Затем остановите выполнение, если произойдет сбой.,Очевидно, не да, нам нужно из. существуют Обезьянасередина,может пройти —ignore-crashes игнорировать неожиданные сбои.
Если сбой игнорируется с помощью этого параметра,Когда происходит сбой в существовании,продолжу уточнять,Это показывает, что да снова начал выполнять Monkey.,И в то же время,Начальное значение, установленное с помощью -s, не вступит в силу.
Пример заявления:
adb shell monkey —ignore-crashes <event-count>
После возникновения ошибки в тесте Monkey общие этапы проверки ошибок следующие:
Когда обезьяна выполняется без добавления параметра --ignore-crashes --ignore-crashes, сначала просмотрите значение Events Injected: в журнале и проверьте текущее количество выполнений, чтобы узнать, есть ли ошибка.
Программа не отвечает из-за проблемы: журнал середина ищет «ANR»
Проблема со сбоем: журнал существования середина поиска “Exception” ,существовать Кстати, вот упоминание ВнизобщийизJavaаномальный:
Класс арифметического исключения: ArithmeticExecption
Класс исключения нулевого указателя: NullPointerException
Исключение приведения типа: ClassCastException
Исключение отрицательного нижнего индекса массива: NegativeArrayException
Исключение индекса массива за пределами: ArrayIndexOutOfBoundsException
Исключение, нарушающее принципы безопасности: SecurityException.
Исключение конца файла: EOFException
Исключение «Файл не найден»: FileNotFoundException
Исключение строки для номера: NumberFormatException
Исключение базы данных операции: SQLException
Исключение ввода и вывода: IOException
Ошибка незаконного доступа: IllegalAccessError.
Ошибка нехватки памяти: OutOfMemoryError
Ошибка переполнения стека: StackOverflowError
При стресс-тестировании/надежности прикладных приложений: один APK это в основном сокращает время задержки между событиями при тестировании на обезьянах.
Убедитесь, что быстрый ответ на событие процесса середина и программа да могут работать нормально. Установите значение --throttleiz на 500 или меньше.
(Как правило, самое быстрое время подъема и опускания за один раз составляет около 300 миллисекунд. Это время не является абсолютным. Обычно используется задержка в 500 миллисекунд).