Monkey測試


一 monkey簡介

1.參考資料

http://blog.csdn.net/jlminghui/article/details/38238443

2.Monkey介紹

顧名思義,Monkey就是猴子,Monkey測試,就像一只猴子,在電腦面前,亂敲鍵盤在測試。猴子什么都不懂,只知道亂敲。Monkey會發送偽隨機的事件流,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。

3.Monkey用來做什么

Monkey 主要用於Android 的壓力測試自動的一個壓力測試小工具, 主要目的就是為了測試app是否會Crash(崩潰)。

4.Monkey程序介紹

(1)Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑是: /system/framework/monkey.jar;
(2)Monkey.jar程序是由一個名為“monkey”的Shell腳本來啟動執行,shell腳本在Android文件系統中的存放路徑是:/system/bin/monkey;
(3)Monkey 命令啟動方式:
a)可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試
b)在PC上adb shell 進入Android系統,通過執行 monkey {+命令參數} 來進行Monkey測試
c)在Android機或者模擬器上直接執行monkey 命令,可以在Android機上安裝Android終端模擬器

二 Monkey命令基本參數介紹

1.使用monkey測試手機所有程序
adb shell monkey 100
執行monkey測試100次
這種操作就是在手機上隨便點,點擊100次。對測試應用沒什么用處,如果你進入到一些大公司比如華為測試手機ROM可能會用到。

使用adb指令,安裝Login.apk

2.查看手機上應用包名
adb shell pm list packages

3.-p <允許的包名列表>
用此參數指定一個或多個包。指定包之后,monkey將只允許系統啟動指定的app。如果不指定包, monkey將允許系統啟動設備中的所有app。
指定一個包:

4.顯示日志詳細程度
用於指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應的參數如下所示:
Level 0 : adb shell monkey -p <軟件包名> -v 100 //缺省值,僅提供啟動提示、測試完成和最終結果等少量信息
Level 1 : adb shell monkey -p <軟件包名> -v -v 100 //提供較為詳細的日志,包括每個發送到Activity的事件信息
Level 2 : adb shell monkey -p <軟件包名> -v -v -v 100 //最詳細的日志,包括了測試中選中/未選中的Activity信息

C:\Users\Administrator>adb shell monkey -p com.example.login -v 100
:Monkey: seed=1541108337471 count=100
:AllowPackage: com.example.login
: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: 25.0%
//   6: 15.0%
//   7: 2.0%
//   8: 2.0%
//   9: 1.0%
//   10: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
:Sending Touch (ACTION_DOWN): 0:(137.0,218.0)
:Sending Touch (ACTION_UP): 0:(173.40945,226.30446)
:Sending Touch (ACTION_DOWN): 0:(180.0,259.0)
:Sending Touch (ACTION_UP): 0:(189.61348,257.59262)
:Sending Trackball (ACTION_MOVE): 0:(3.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,-5.0)
:Sending Touch (ACTION_DOWN): 0:(88.0,281.0)
:Sending Touch (ACTION_UP): 0:(112.34274,320.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,1.0)
:Sending Trackball (ACTION_UP): 0:(0.0,0.0)
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
:Sending Trackball (ACTION_MOVE): 0:(3.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-3.0)
:Sending Touch (ACTION_DOWN): 0:(39.0,248.0)
:Sending Touch (ACTION_UP): 0:(51.867878,247.03575)
:Sending Touch (ACTION_DOWN): 0:(118.0,288.0)
Events injected: 100
:Sending rotation degree=0, persist=false
:Dropped: keys=20 pointers=77 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=510ms (510ms mobile, 0ms wifi, 0ms not connected)

// Monkey finished

C:\Users\Administrator>adb shell monkey -p com.example.login -v -v 100
:Monkey: seed=1541108102892 count=100
:AllowPackage: com.example.login
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity com.example.login.MainActivity (from package com.exam
ple.login)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1541108102892
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: 25.0%
//   6: 15.0%
//   7: 2.0%
//   8: 2.0%
//   9: 1.0%
//   10: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 199    // KEYCODE_BUTTON_12
:Sending Key (ACTION_UP): 199    // KEYCODE_BUTTON_12
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 90    // KEYCODE_MEDIA_FAST_FORWARD
:Sending Key (ACTION_UP): 90    // KEYCODE_MEDIA_FAST_FORWARD
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 139    // KEYCODE_F9
:Sending Key (ACTION_UP): 139    // KEYCODE_F9
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(228.0,109.0)
:Sending Touch (ACTION_UP): 0:(239.7635,108.96301)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 93    // KEYCODE_PAGE_DOWN
:Sending Key (ACTION_UP): 93    // KEYCODE_PAGE_DOWN
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 33    // KEYCODE_E
:Sending Key (ACTION_UP): 33    // KEYCODE_E
Sleeping for 0 milliseconds
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 143    // KEYCODE_NUM_LOCK
:Sending Key (ACTION_UP): 143    // KEYCODE_NUM_LOCK
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 166    // KEYCODE_CHANNEL_UP
:Sending Key (ACTION_UP): 166    // KEYCODE_CHANNEL_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 25    // KEYCODE_VOLUME_DOWN
:Sending Key (ACTION_UP): 25    // KEYCODE_VOLUME_DOWN
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 190    // KEYCODE_BUTTON_3
:Sending Key (ACTION_UP): 190    // KEYCODE_BUTTON_3
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,1.0)
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 187    // KEYCODE_APP_SWITCH
:Sending Key (ACTION_UP): 187    // KEYCODE_APP_SWITCH
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 155    // KEYCODE_NUMPAD_MULTIPLY
:Sending Key (ACTION_UP): 155    // KEYCODE_NUMPAD_MULTIPLY
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(210.0,1.0)
:Sending Touch (ACTION_UP): 0:(206.1193,5.3746395)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(202.0,72.0)
:Sending Touch (ACTION_UP): 0:(203.49069,55.111717)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(213.0,169.0)
:Sending Touch (ACTION_POINTER_DOWN 1): 0:(213.03842,169.64987) 1:(90.0,273.0)
:Sending Touch (ACTION_MOVE): 0:(224.27519,172.04413) 1:(85.0046,253.13188)
:Sending Touch (ACTION_MOVE): 0:(232.99971,179.71663) 1:(79.35529,246.14488)
:Sending Touch (ACTION_MOVE): 0:(240.0,185.72884) 1:(73.46896,229.39772)
:Sending Touch (ACTION_MOVE): 0:(240.0,199.92346) 1:(70.65656,218.28358)
:Sending Touch (ACTION_MOVE): 0:(240.0,203.7676) 1:(70.50711,214.87372)
:Sending Touch (ACTION_MOVE): 0:(240.0,204.10182) 1:(65.11935,199.15561)
:Sending Touch (ACTION_MOVE): 0:(240.0,218.79683) 1:(60.31317,189.60109)
:Sending Touch (ACTION_MOVE): 0:(240.0,220.99147) 1:(56.169495,187.63142)
:Sending Touch (ACTION_MOVE): 0:(240.0,235.9418) 1:(50.057125,180.71246)
:Sending Touch (ACTION_POINTER_UP 1): 0:(240.0,236.40236) 1:(44.15694,173.95424)

:Sending Touch (ACTION_UP): 0:(240.0,255.14737)
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(115.0,305.0)
:Sending Touch (ACTION_UP): 0:(113.861176,304.03662)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 171    // KEYCODE_WINDOW
:Sending Key (ACTION_UP): 171    // KEYCODE_WINDOW
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(1.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-4.0)
Events injected: 100
:Sending rotation degree=0, persist=false
:Dropped: keys=60 pointers=38 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=792ms (792ms mobile, 0ms wifi, 0ms not connected)

// Monkey finished

C:\Users\Administrator>adb shell monkey -p com.example.login -v -v -v 100
:Monkey: seed=1541107230859 count=100
:AllowPackage: com.example.login
: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.calculator2.Calculator (from package
com.android.calculator2)
//   - NOT USING main activity com.android.mms.ui.ConversationList (from package
 com.android.mms)
//   - NOT USING main activity com.android.browser.BrowserActivity (from package
 com.android.browser)
//   - NOT USING main activity com.android.deskclock.DeskClock (from package com
.android.deskclock)
//   - NOT USING main activity com.android.camera.GalleryPicker (from package co
m.android.gallery)
//   - NOT USING main activity com.android.music.MusicBrowserActivity (from pack
age com.android.music)
//   - NOT USING main activity com.android.calendar.AllInOneActivity (from packa
ge com.android.calendar)
//   - NOT USING main activity com.android.settings.Settings (from package com.a
ndroid.settings)
//   - NOT USING main activity com.android.camera.Camera (from package com.andro
id.camera)
//   - NOT USING main activity com.android.contacts.activities.DialtactsActivity
 (from package com.android.contacts)
//   - NOT USING main activity com.android.contacts.activities.PeopleActivity (f
rom package com.android.contacts)
//   - NOT USING main activity com.android.widgetpreview.WidgetPreviewActivity (
from package com.android.widgetpreview)
//   - NOT USING main activity com.android.gesture.builder.GestureBuilderActivit
y (from package com.android.gesture.builder)
//   - NOT USING main activity com.example.android.apis.ApiDemos (from package c
om.example.android.apis)
//   - NOT USING main activity com.android.customlocale2.CustomLocaleActivity (f
rom package com.android.customlocale2)
//   - NOT USING main activity com.android.development.Development (from package
 com.android.development)
//   - NOT USING main activity com.android.quicksearchbox.SearchActivity (from p
ackage com.android.quicksearchbox)
//   - NOT USING main activity com.android.speechrecorder.SpeechRecorderActivity
 (from package com.android.speechrecorder)
//   - NOT USING main activity com.android.providers.downloads.ui.DownloadList (
from package com.android.providers.downloads.ui)
//   - NOT USING main activity android.app.AliasActivity (from package com.andro
id.development_settings)
//   + Using main activity com.example.login.MainActivity (from package com.exam
ple.login)
//   - NOT USING main activity com.example.test.MainActivity (from package com.e
xample.test)
// Selecting main activities from category android.intent.category.MONKEY
//   - NOT USING main activity com.android.launcher2.Launcher (from package com.
android.launcher)
//   - NOT USING main activity com.android.settings.Settings$RunningServicesActi
vity (from package com.android.settings)
//   - NOT USING main activity com.android.settings.Settings$StorageUseActivity
(from package com.android.settings)
// Seeded: 1541107230859
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: 25.0%
//   6: 15.0%
//   7: 2.0%
//   8: 2.0%
//   9: 1.0%
//   10: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.example.login/.MainActivity;en
d
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.example.login/.MainActivity } in package com.exa
mple.login
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 24    // KEYCODE_VOLUME_UP
:Sending Key (ACTION_UP): 24    // KEYCODE_VOLUME_UP
Sleeping for 0 milliseconds
:Sending Flip keyboardOpen=false
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(159.0,217.0)
:Sending Touch (ACTION_UP): 0:(165.70789,214.53561)
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(19.0,106.0)
:Sending Touch (ACTION_POINTER_DOWN 1): 0:(0.0,108.30382) 1:(11.0,171.0)
:Sending Touch (ACTION_MOVE): 0:(0.0,116.11915) 1:(6.463764,177.53587)
:Sending Touch (ACTION_POINTER_UP 1): 0:(0.0,122.11656) 1:(0.0,184.39256)
:Sending Touch (ACTION_UP): 0:(0.0,134.64552)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(30.0,283.0)
:Sending Touch (ACTION_UP): 0:(29.540138,270.772)
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(35.0,315.0)
:Sending Touch (ACTION_MOVE): 0:(41.940323,301.62585)
:Sending Touch (ACTION_MOVE): 0:(46.01829,277.74582)
:Sending Touch (ACTION_UP): 0:(48.474968,266.00723)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 145    // KEYCODE_NUMPAD_1
:Sending Key (ACTION_UP): 145    // KEYCODE_NUMPAD_1
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(1.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(183.0,203.0)
:Sending Touch (ACTION_UP): 0:(194.52084,187.27563)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(100.0,171.0)
:Sending Touch (ACTION_UP): 0:(96.87977,170.16449)
Sleeping for 0 milliseconds
:Sending Flip keyboardOpen=true
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 95    // KEYCODE_SWITCH_CHARSET
:Sending Key (ACTION_UP): 95    // KEYCODE_SWITCH_CHARSET
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(4.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,3.0)
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 206    // KEYCODE_3D_MODE
:Sending Key (ACTION_UP): 206    // KEYCODE_3D_MODE
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 4    // KEYCODE_BACK
:Sending Key (ACTION_UP): 4    // KEYCODE_BACK
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(168.0,253.0)
:Sending Touch (ACTION_POINTER_DOWN 1): 0:(166.42249,231.88263) 1:(212.0,58.0)
:Sending Touch (ACTION_MOVE): 0:(166.0931,228.01944) 1:(195.48389,51.1498)
:Sending Touch (ACTION_MOVE): 0:(155.35042,223.16498) 1:(175.32312,31.635899)
:Sending Touch (ACTION_MOVE): 0:(154.35658,211.59282) 1:(161.17451,21.018143)
:Sending Touch (ACTION_MOVE): 0:(142.34442,188.13126) 1:(154.24657,14.730347)
:Sending Touch (ACTION_POINTER_UP 1): 0:(138.6136,164.46696) 1:(153.50166,3.2237
806)
:Sending Touch (ACTION_UP): 0:(129.04036,156.62956)
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(52.0,215.0)
:Sending Touch (ACTION_UP): 0:(50.890404,218.14482)
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(1.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(2.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)
:Sending Touch (ACTION_DOWN): 0:(136.0,308.0)
:Sending Touch (ACTION_MOVE): 0:(140.34961,310.26785)
:Sending Touch (ACTION_UP): 0:(161.46814,310.94815)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(202.0,241.0)
:Sending Touch (ACTION_MOVE): 0:(200.27258,244.47406)
:Sending Touch (ACTION_MOVE): 0:(198.87253,246.80893)
:Sending Touch (ACTION_UP): 0:(198.36757,252.80966)
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-5.0)
Events injected: 100
:Sending rotation degree=0, persist=false
:Dropped: keys=30 pointers=67 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=909ms (909ms mobile, 0ms wifi, 0ms not connected)

// Monkey finished
Level0-3輸出信息舉例

5.Monkey日志分析
adb shell monkey 100 >E:/log/a.txt
將log信息寫到文檔中
正常情況,如果Monkey測試順利執行完成,在log的最后,會打印出當前執行事件的次數和所花費的時間

隨機數種子
用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。示例:
monkey測試1:adb shell monkey -p <軟件包名> –s 10 100
monkey測試2:adb shell monkey -p <軟件包名> –s 10 100

6.--throttle <毫秒>
用亍指定用戶操作(即事件)間的時延,單位是毫秒;如果不指定這個參數,monkey會盡可能快的生成和發送消息。
示例:adb shell monkey -p com.example.login --throttle 3000 100 #3秒之后開始執行

7.--pct-touch <percent>
調整觸摸事件的百分比。(觸摸事件是指在屏幕中的一個down-up事件,即在屏幕某處按下並抬起的操作)
示例:adb shell monkey --pct-touch 100 -v 10

8.--pct-motion <percent>
調整motion事件百分比。(motion事件是由屏幕上某處一個down事件、一系列偽隨機的移動事件和一個up事件組成)
示例:adb shell monkey --pct-motion 100 -v 10

9.--ignore-crashes
作用:通常應用發生崩潰或異常時Monkey會停止運行。如果設置此項,Monkey會在日志中記錄相關信息並將繼續發送事件給系統,直到事件計數完成。

正常操作,不忽略異常

忽略異常

10.--ignore-timeouts
作用:通常應用程序發生任何超時錯誤(如“Application Not responding”對話框)Monkey將停止運行,設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。

11.Monkey實例
實例1:adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 100 >E:\log\login.txt
用monkey 命令對登錄apk進行性能測試

實例2:adb shell monkey -p com.example.login --pct-touch 30 --pct-motion 30 --pct-trackball 0 --pct-nav 0 --pct-majornav 20  --pct-appswitch 10 --pct-anyevent 10 -s 12867 --ignore-crashes --ignore-timeouts --throttle 100  -v -v 100 >E:\log\login.txt

使用--pct-xxx參數進行操作的限制。比如操作不僅僅需要點擊,還需要滑動、長按,在智能手機硬件按鈕、應用之間的切換等。

12.Monkey異常分析
Monkey測試出現錯誤后,一般的分析步驟:
看Monkey的日志 (注意第一個swith以及異常信息等)
1. 程序無響應的問題: 在日志中搜索 “ANR”
2. 崩潰問題:在日志中搜索“Exception”或者“crash”(如果出現空指針,NullPointerException)肯定是有bug
Monkey 執行中斷, 在log最后也能看到當前執行次數

三 Monkey進階

1.第一個簡單的Monkey測試命令

上圖日志中間部分顯示了操作事件的默認百分比,這些百分比數字對應的操作可參考Monkey測試的源碼.../Monkey/src/com/android/commands/monkey/MonkeySourceRandom.java文件中的操作定義。

2.Monkey測試注意點

2.1.測試前准備好一切測試的前置條件

2.2.慎重使用adb服務
比如當你正在執行Monkey測試時,由於某種原因使用adb命令重啟了adb服務,那么Monkey測試的日志記錄就會被終止,但正在機器上執行的測試行為不會停止。換句話說,你會看到測試在執行,但卻沒有任何記錄了。

2.3.同時記錄Android系統日志
adb logcat還是非常有必要的。

2.4.一定需要記錄Seed值
Seed值是唯一能夠重現(repro)Monkey測試中出現的崩潰問題的方法。當問題被修復后同樣需要它來進行重現並驗證。

2.5.不要使用單一的命令
多寫幾條有不同測試偏重點的Monkey測試命令,在一個項目中同時使用,有助於找到更多的缺陷。

2.6.必須重視Crash
Monkey測試出現的NullPointException,一般都是可以在用戶使用時出現的,何時出現只是時間問題。所以本質上來說,Monkey所有的CRASH都需要在Release前fix掉。

3.Monkey工具再探索

從development/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java源碼中可以很容易找到Monkey測試提供的每個參數,以及是如何實現的,有什么弊端。如果覺得Monkey測試的偽隨機流還不能滿足測試的需求,希望能夠按照特定步驟來執行測試的話,可用以下兩種方法:
(1)更改Monkey自身的源碼。在Linux環境下,下載要測試版本對應的全部源代碼,在終端中定位到源代碼的根目錄,輸入make monkey即可。通過編譯之后可在/out/.../monkey/中獲取Monkey.jar這個包。將編譯好的包通過adb push到要測試的Android系統中的/System/framework下。隨后,或通過Monkey提供的參數啟動,或通過自己寫的參數調用即可。
2.可編寫腳本進行指定的操作。寫一個腳本,將需要Monkey執行的操作放在一個隊列中,從而根據自定義的步驟執行。具體步驟大家可自行谷歌相關信息,或者查看源碼中的核心類:android-x.x.x/development/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM