Порекомендуйте полезный инструмент для тестирования производительности приложений — Monkey!
Порекомендуйте полезный инструмент для тестирования производительности приложений — Monkey!

1. Что такое Обезьяна?

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

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

Более простое понимание теста «Обезьяна»: вы можете думать об инструменте «Обезьяна» как об обезьяне, которая в случайном порядке нажимает, касается, перекатывается и прыгает в приложении.

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

2. Создание тестовой среды для обезьян

(1). Загрузите пакет команд adb на стороне ПК и настройте переменные среды, а также путь к каталогу adb. После настройки среды используйте команду проверки:

Язык кода:javascript
копировать
adb  version 

Убедитесь, что если об ошибках не сообщается, конфигурация прошла успешно.

(2) После настройки переменных среды jdk используйте команду проверки:

Язык кода:javascript
копировать
java -version

Убедитесь, что если об ошибках не сообщается, конфигурация прошла успешно.

(3) На телефоне включен режим разработчика и статус отладки по USB.

(4) Установите для экрана блокировки телефона значение «никогда».

3. Декомпозиция выполнения команд обезьяны

Прежде всего, мы знаем, что программа Monkey поставляется с системой Android и написана на языке Java. Путь хранения в файловой системе Android: /system/framework/monkey.jar.

Программа Monkey.jar, которую мы видели, запускается и выполняется скриптом Shell с именем «monkey».

Путь хранения этого сценария Shell в файловой системе Android: /system/bin/monkey;

Как показано на скриншоте ниже:

Язык кода:javascript
копировать
# 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 + параметры на ПК.

Например:

Язык кода:javascript
копировать
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, следующие:

Язык кода:javascript
копировать
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-карту телефона или симулятора.

Например:

Язык кода:javascript
копировать
adb push  e:\monkey.script  /sdcard/

Затем выполните скрипт:

Язык кода:javascript
копировать
adb shell monkey -v -f /sdcard/monkey.script

Команды, поддерживаемые скриптом Monkey

Команды скрипта должны быть строчными буквами.

Команда сценария заканчивается символом возврата каретки.

5. Знакомство с общими рабочими командами обезьяны.

Как показано на скриншоте ниже:

Язык кода:javascript
копировать
-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. Получите пакет для тестирования с мобильного телефона.

Язык кода:javascript
копировать
Способ 1. С помощью команды logcat.,Конкретный метод работы заключается в следующем:

существуют Выполнить команду на ПК: адб shell "logcat | grep START" , открываем мобильник и нужно протестировать приложение и найти последний ActivityManagerсередина

Первая половина cmp соответствует содержимому $logcat | grep START #После выполнения этой команды ↑ окно существующего cmd расширит содержимое аналогичного журнала,

Если вы не нашли соответствующее имя пакета,Вы можете выйти и снова открыть тестируемое приложение.,Найдите последний ActivityManager


Способ 2. Сохраните пакет существующего apk на своем мобильном телефоне середина и введите adb. shell После команды ---мобильный телефон изdata/папка data --lsПроверятьвсеимя пакета Найдите APK-зиму, которую хотите протестировать. пакета

Этот метод требует root-прав, иначе он не будет работать. Поэтому при тестировании я все же рекомендую первый вариант


Способ третий: пройти airtest Инструменты также доступны

7. Анализ логов обезьяны

(1). Место проблемы.

Общие ключевые слова для анализа результатов испытаний:

Программа не отвечает, проблема ANR: Найдите в журналах «ANR».

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

существовать Monkey в, если вы столкнетесь ANR также остановит выполнение. Если вы хотите игнорировать ANR, пусть он продолжает выполняться при срабатывании, вы можете использовать —ignore-timeouts параметр, это также приведет к сбою -s.

Пример заявления:

Язык кода:javascript
копировать
adb shell monkey —ignore-timeouts <event-count>
Сбои: Найдите в журналах слово «CRASH».

Обычно,Если существуют обезьяньи казни на сцене,Произошла авария,Немедленно остановит следующее выполнение. Но иногда,Когда мы существуем, выполняем Monkeyиз,дасуществоватьбез вмешательства человекаиз,Например, если вы хотите, чтобы он работал ночью,Подождите ситуации.

Затем остановите выполнение, если произойдет сбой.,Очевидно, не да, нам нужно из. существуют Обезьянасередина,может пройти —ignore-crashes игнорировать неожиданные сбои.

Если сбой игнорируется с помощью этого параметра,Когда происходит сбой в существовании,продолжу уточнять,Это показывает, что да снова начал выполнять Monkey.,И в то же время,Начальное значение, установленное с помощью -s, не вступит в силу.

Пример заявления:

Язык кода:javascript
копировать
adb shell monkey —ignore-crashes <event-count>
Другие вопросы: Найдите в журналах «Исключение».
(2). Воспроизведите проблему.

После возникновения ошибки в тесте Monkey общие этапы проверки ошибок следующие:

  • Узнайте, где ошибка в Monkey
  • Просмотрите некоторые действия по событию до возникновения ошибки в Monkey и выполните действие вручную.
  • Если вышеуказанные шаги по-прежнему не удается найти, вы можете использовать ранее выполненную команду обезьяны, чтобы выполнить ее еще раз. Обратите внимание, что начальное значение должно быть тем же.
  • Во время выполнения обезьянки на мобильном телефоне видны некоторые операции, поэтому можно попробовать воспроизвести проблему и этим дурацким методом.
(3) Предварительная оценка результатов испытаний.

Когда обезьяна выполняется без добавления параметра --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 миллисекунд).

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose