Monkey
этоAndroid
Инструмент для автоматизации тестирования платформы.,В основном используется для проверки стабильности;Monkey
Может имитировать серию пользовательских операций,Например, прикосновение к экрану, скольжение, нажатие кнопок и т. д.,Стресс-тест этих операций,Сколько времени потребуется, чтобы программа обнаружения стала ненормальной?Monkey
даAndroid
Система поставляется с,использоватьjava
написано;Monkey
Путь хранения:/system/framework/monkey.jar
monkey.jar
запускатьиспользоватьshell
Скрипт,иshell
Скриптмагазинизпутьсуществовать: /system/bin/monkey
# Способ 1 (выполнить прямо из командной строки на ПК):
adb shell monkey {параметр}
# Способ 2 (ввод исполнения устройства):
Введите устройство: adb shell
monkey {параметр}
monkey
изпараметр:adb shell monkey -help
C:\Users\Administrator>adb shell monkey -help
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
COUNT
socket
коммуникацияизспособ имитации действий пользователя,Такие как ввод ключа, ввод сенсорного экрана、Ввод жестами и т. д.;1、
runMonkeyCyles()
Получить события,после того, как мероприятие закончилось,ПозвонивgetNextEvent()
Метод получения следующего события; 2、из очереди событий Получить события,Необходимо настроить очередь событийMonkeyEventQueue
,Очередь состоит изMonkeyEvent
составляют; 3、MonkeyEvent
проходитьcommand
Шаблоны проектирования будут конкретнымиизсобытие(нравиться:MonkeyActivityEvent
、MonkeyKeyEvent
、MonkeyMotionEvent
)проходитьinjectEvent()
Методы внедряются в систему один за другим.。
-p
параметр Вот и все;monkey
разрешить системузапускатьобозначениеизapp
;qq
,Андроид 6.0QQ:Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
APP
и симуляторизCPU
Архитектура другая,我этот里修改了Вниз模拟器изCPU
СтруктураARM
из,Создано ранееиздаX86
Архитектураиз;apk
:adb install QQv5.apk /data/local/tmp
F:\monkey_test>adb install ls /data/local/tmp
Performing Push Install
adb.exe: need APK file on command line
F:\monkey_test>adb install QQv5.apk /data/local/tmp
Performing Push Install
QQv5.apk: 1 file pushed, 0 skipped. 11.8 MB/s (22506899 bytes in 1.817s)
pkg: /data/local/tmp/QQv5.apk
ver: /data/local/tmp
Success
com.tencent.mobileqqi
:adb shell ls /data/data
com.android.smoketest
com.android.smoketest.tests
com.android.soundrecorder
com.android.statementservice
com.android.systemui
com.android.vpndialogs
com.android.wallpaper.livepicker
com.android.webview
com.android.widgetpreview
com.example.android.apis
com.example.android.livecubes
com.example.android.softkeyboard
com.svox.pico
com.tencent.mobileqqi
jp.co.omronsoft.openwnn
monkey
запускатьcom.tencent.mobileqqi
и сделать2считать:adb shell monkey -p com.tencent.mobileqqi 2
mokey
случайныйзапускатькто-тоapk
и отправитьNслучайные события,использовать:adb shell monkey -p имя пакета N
-v
параметр,Уровень журнала обратной связи;уровень | параметр | иллюстрировать |
---|---|---|
|
| Запуск, завершение теста, информация об окончательном результате |
|
| Подробный журнал,каждый |
|
| Самый подробный лог |
Level0
Информация журнала:F:\monkey_test>adb shell monkey -p com.tencent.mobileqqi -v 2
:Monkey: seed=1701146443923 count=2
:AllowPackage: com.tencent.mobileqqi
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity } in package com.tencent.mobileqqi
:Sending Touch (ACTION_DOWN): 0:(191.0,846.0)
Level1
Информация журнала:F:\monkey_test>adb shell monkey -p com.tencent.mobileqqi -v -v 2
:Monkey: seed=1701146536977 count=2
:AllowPackage: com.tencent.mobileqqi
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// + Using main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqqi)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1701146536977
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity } in package com.tencent.mobileqqi
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 23 // KEYCODE_DPAD_CENTER
// Allowing start of Intent { cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.LoginActivity } in package com.tencent.mobileqqi
// activityResuming(com.tencent.mobileqqi)
Events injected: 2
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=1915ms (0ms mobile, 0ms wifi, 1915ms not connected)
// Monkey finished
Level2
Информация журнала:F:\monkey_test>adb shell monkey -p com.tencent.mobileqqi -v -v -v 2
:Monkey: seed=1701146594293 count=2
:AllowPackage: com.tencent.mobileqqi
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
// - NOT USING main activity com.android.dialer.DialtactsActivity (from package com.android.dialer)
// - NOT USING main activity com.android.settings.Settings (from package com.android.settings)
// - NOT USING main activity com.android.browser.BrowserActivity (from package com.android.browser)
// - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
// - NOT USING main activity com.android.deskclock.DeskClock (from package com.android.deskclock)
// - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
// - NOT USING main activity com.android.camera.GalleryPicker (from package com.android.gallery)
// - NOT USING main activity com.android.camera.Camera (from package com.android.camera)
// - NOT USING main activity com.android.music.MusicBrowserActivity (from package com.android.music)
// - NOT USING main activity com.android.messaging.ui.conversationlist.ConversationListActivity (from package com.android.messaging)
// - NOT USING main activity com.example.android.apis.ApiDemos (from package com.example.android.apis)
// - NOT USING main activity com.android.gesture.builder.GestureBuilderActivity (from package com.android.gesture.builder)
// - NOT USING main activity com.android.widgetpreview.WidgetPreviewActivity (from package com.android.widgetpreview)
// - NOT USING main activity com.android.backuptester.MainActivity (from package com.android.backuptester)
// - NOT USING main activity com.android.calculator2.Calculator (from package com.android.calculator2)
// - NOT USING main activity com.android.customlocale2.CustomLocaleActivity (from package com.android.customlocale2)
// - NOT USING main activity com.android.development.Development (from package com.android.development)
// - NOT USING main activity android.app.AliasActivity (from package com.android.development_settings)
// - NOT USING main activity com.android.providers.downloads.ui.DownloadList (from package com.android.providers.downloads.ui)
// - NOT USING main activity com.android.quicksearchbox.SearchActivity (from package com.android.quicksearchbox)
// + Using main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqqi)
// Selecting main activities from category android.intent.category.MONKEY
// - NOT USING main activity com.android.launcher3.Launcher (from package com.android.launcher3)
// - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)
// - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)
// Seeded: 1701146594293
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: -0.0%
// 6: 25.0%
// 7: 15.0%
// 8: 2.0%
// 9: 2.0%
// 10: 1.0%
// 11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity } in package com.tencent.mobileqqi
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
// Allowing start of Intent { cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.LoginActivity } in package com.tencent.mobileqqi
// activityResuming(com.tencent.mobileqqi)
Events injected: 2
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=5630ms (0ms mobile, 0ms wifi, 5630ms not connected)
// Monkey finished
adb shell monkey -p com.tencent.mobileqqi -v -v -v 2 > ./monkey_qq.log
ANR
вопрос:Поиск в журналахANR
Вот и все;Exception
;monkey
После выполнения,Отображение количества и времени выполнения событий в конце журнала.,И сmonkey finished
Заканчивать,Указывает, что выполнение завершено;
--ignore-crashes
параметр Может Игнорировать неожиданные сбои,такmonkey
Все события будут выполнены;adb shell monkey -p com.tencent.mobileqqi -v > --ignore-crashes 2
--ignore-timeouts
Игнорируемый тайм-аут программы,monkey
Не из-за тайм-аутаи Хватит бежать;adb shell monkey -p com.tencent.mobileqqi -v > --ignore-timeouts 2
--ignore-security-exceptions
Может Игнорировать ошибки обстоятельстваия, такие как сертификаты, сетевые лицензии и т.п.;adb shell monkey -p com.tencent.mobileqqi -v > --ignore-security-exceptions 2
pct
开头控制событие百分比изпараметр,Нацеленность на непонятноеиз Тип теста Может Процент корректировки;
параметр | иллюстрировать |
---|---|
| событие клика |
| линейное скользящее событие |
| Событие скольжения кривой |
| Панель навигации( |
| События навигации (вверх, вниз, влево, вправо) |
| События навигации (возврат, подтверждение, меню) |
|
|
| События, применимые к симулятору |
| Необычные события, такие как нажатия клавиш |
| Многоточечное масштабирование жестами |
| разрешающие события |
adb shell monkey --pct-motion 40 -p com.tencent.mobileqqi 2
--throttle
Может表示两个событие之间из Задерживать,единицаms
;adb shell monkey --throttle 1000 -p com.tencent.mobileqqi 2
test01: adb shell monkey -p com.tencent.mobileqqi -s 50 2
test02: adb shell monkey -p com.tencent.mobileqqi -s 50 2
--kill-process-after-error
Ошибка выполнения завершенияизпроцесс。--monitor-native-crashes
мониторкодизкрахсобытие。--wait-dbg
Остановка выполненияизmonkey
,пока не будет подключен отладчик.adb shell monkey -p com.tencent.mobileqqi --throttle 2000 --pct-touch 20 --pct-motion 30 -v -v -v -s 50 --ignore-crashes --ignore-timeouts --ignore-security-exceptions 3 > ./test.log
:Monkey: seed=50 count=3
:AllowPackage: com.tencent.mobileqqi
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
// - NOT USING main activity com.android.dialer.DialtactsActivity (from package com.android.dialer)
// - NOT USING main activity com.android.settings.Settings (from package com.android.settings)
// - NOT USING main activity com.android.browser.BrowserActivity (from package com.android.browser)
// - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
// - NOT USING main activity com.android.deskclock.DeskClock (from package com.android.deskclock)
// - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
// - NOT USING main activity com.android.camera.GalleryPicker (from package com.android.gallery)
// - NOT USING main activity com.android.camera.Camera (from package com.android.camera)
// - NOT USING main activity com.android.music.MusicBrowserActivity (from package com.android.music)
// - NOT USING main activity com.android.messaging.ui.conversationlist.ConversationListActivity (from package com.android.messaging)
// - NOT USING main activity com.example.android.apis.ApiDemos (from package com.example.android.apis)
// - NOT USING main activity com.android.gesture.builder.GestureBuilderActivity (from package com.android.gesture.builder)
// - NOT USING main activity com.android.widgetpreview.WidgetPreviewActivity (from package com.android.widgetpreview)
// - NOT USING main activity com.android.backuptester.MainActivity (from package com.android.backuptester)
// - NOT USING main activity com.android.calculator2.Calculator (from package com.android.calculator2)
// - NOT USING main activity com.android.customlocale2.CustomLocaleActivity (from package com.android.customlocale2)
// - NOT USING main activity com.android.development.Development (from package com.android.development)
// - NOT USING main activity android.app.AliasActivity (from package com.android.development_settings)
// - NOT USING main activity com.android.providers.downloads.ui.DownloadList (from package com.android.providers.downloads.ui)
// - NOT USING main activity com.android.quicksearchbox.SearchActivity (from package com.android.quicksearchbox)
// + Using main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqqi)
// Selecting main activities from category android.intent.category.MONKEY
// - NOT USING main activity com.android.launcher3.Launcher (from package com.android.launcher3)
// - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)
// - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)
// Seeded: 50
// Event percentages:
// 0: 20.0%
// 1: 30.0%
// 2: 1.3333334%
// 3: 10.0%
// 4: -0.0%
// 5: -0.0%
// 6: 16.666668%
// 7: 10.0%
// 8: 1.3333334%
// 9: 1.3333334%
// 10: 0.6666667%
// 11: 8.666667%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mobileqqi/com.tencent.mobileqq.activity.SplashActivity } in package com.tencent.mobileqqi
Sleeping for 2000 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-4.0)
Events injected: 3
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=2732ms (0ms mobile, 0ms wifi, 2732ms not connected)
// Monkey finished
ЯсуществоватьучаствоватьНа третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будет проводиться конкурс сочинений. Соберите команду, чтобы выиграть приз!