Android Monkey test

Android Monkey Test
Monkey測試是Android自動化測試的一種手段,Monkey測試本身非常簡單,就是模擬用戶的按鍵輸入,觸摸屏輸入,手勢輸入等,看設備多長時間會出異常。
當Monkey程序在模擬器或設備運行的時候,如果用戶出發了比如點擊,觸摸,手勢或一些系統級別的事件的時候,它就會產生隨機脈衝,所以可以用Monkey用隨機重複的方法去負荷測試你開發的軟件.
最簡單的方法就是用用下面的命令來使用Monkey,這個命令將會啓動你的軟件並且觸發500個事件.
$ adb shell monkey -v -p your.package.name 500
更多的關於命令Monkey的命令的信息,可以查看UI/Application 
Exerciser Monkey documentation page.
com.android.stk
com.android.htmlviewer
com.android.globalsearch
com.android.gpstest
com.android.googlesearch
wnc.w88.engineermode
com.android.calculator2
com.android.inputmethod.latin
com.svox.pico
com.android.soundrecorder
com.android.packageinstaller
android.tts
com.android.spare_parts
com.android.globaltime
com.android.sdksetup
com.quicinc.bluetooth
com.android.email
com.qualcomm.qx.neocore
com.android.development
com.android.term
com.android.server.vpn
com.android.contacts
com.android.camera
wnc.w88.factorymode
com.android.providers.applicati
com.android.providers.settings
com.android.voicedialer
com.android.phone
com.android.providers.contacts
com.android.launcher
com.android.mms
com.android.providers.telephony
com.android.providers.userdicti
com.android.providers.media
com.android.providers.calendar
com.android.calendar
com.android.providers.drm
com.android.providers.downloads
com.android.alarmclock
com.android.settings
com.android.qualcomm
com.android.browser
com.android.music
Monkey是一個命令行工具,可以運行在模擬器裏或實際設備中。它向系統發送僞隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試。Monkey包括許多選項,它們大致分爲四大類:
? 基本配置選項,如設置嘗試的事件數量。
? 運行約束選項,如設置只對單獨的一個包進行測試。
? 事件類型和頻率。
? 調試選項。
在Monkey運行的時候,它生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理:
? 如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。
? 如果應用程序崩潰或接收到任何失控異常,Monkey將停止並報錯。
? 如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止並報錯。
按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。 
Monkey基本用法 :
可以通過開發機器上的命令行或腳本來啓動Monkey。由於Monkey運行在模擬器/設備環境中,所以必須用其環境中的shell來進行啓動。可以通過在每條命令前加上adb shell來達到目的,也可以進入Shell後直接輸入Monkey命令。基本語法如下:
$ adb shell monkey [options] 
如果不指定options,Monkey將以無反饋模式啓動,並把事件任意發送到安裝在目標環境中的全部包。下面是一個更爲典型的命令行示例,它啓動指定的應用程序,並向其發送500個僞隨機事件:
$ adb shell monkey -p your.package.name -v 500 
命令選項參考:
下表中列出了Monkey命令行可用的全部選項。
類別 
選項 
說明 

常規 
--help 
列出簡單的用法。 

-v 
命令行的每一個 -v 將增加反饋信息的級別。 Level 0( 缺省值 ) 除啓動提示、測試完成和最終結果之外,提供較少信息。 Level 1 提供較爲詳細的測試信息,如逐個發送到 ActivITy 的事件。 Level 2 提供更加詳細的設置信息,如測試中被選中的或未被選中的 Activity 。 

事件 

-s <seed> 
僞隨機數生成器的 seed 值。如果用相同的 seed 值再次運行 Monkey ,它將生成相同的事件序列。 

--throttle <milliseconds> 
在事件之間插入固定延遲。通過這個選項可以減緩 Monkey 的執行速度。如果不指定該選項, Monkey 將不會被延遲,事件將儘可能快地被產成。
--pct-touch <percent>
調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)。
--pct-motion <percent>
調整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的僞隨機事件和一個up事件組成)。
--pct-trackball <percent>
調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)。
--pct-nav <percent>
調整“基本”導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成)。
--pct-majornav <percent>
調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)
--pct-syskeys <percent>
調整“系統”按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵)。
--pct-appswitch <percent>
調整啓動Activity的百分比。在隨機間隔裏,Monkey將執行一個startActivity()調用,作爲最大程度覆蓋包中全部Activity的一種方法。
--pct-anyevent <percent>
調整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設備按鈕、等等。

約束限制
-p <allowed-package-name>
如果用此參數指定了一個或幾個包,Monkey將只允許系統啓動這些包裏的Activity。如果你的應用程序還需要訪問其它包裏的Activity(如選擇取一個聯繫人),那些包也需要在此同時指定。如果不指定任何包,Monkey將允許系統啓動全部包裏的Activity。要指定多個包,需要使用多個 -p選項,每個-p選項只能用於一個包。
-c <main-category>
如果用此參數指定了一個或幾個類別,Monkey將只允許系統啓動被這些類別中的某個類別列出的Activity。如果不指定任何類別,Monkey將選擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c選項,每個-c選 項只能用於一個類別。
調試
--dbg-no-events
設置此選項,Monkey將執行初始啓動,進入到一個測試Activity,然後不會再進一步生成事件。爲了得到最佳結果,把它與-v、一個或幾個包約束、以及一個保持Monkey運行30秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程序所調用的包之間的轉換。
--hprof
設置此選項,將在Monkey事件序列之前和之後立即生成profiling報告。這將會在data/misc中生成大文件(~5Mb),所以要小心使用它。
--ignore-crashes
通常,當應用程序崩潰或發生任何失控異常時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
--ignore-timeouts
通常,當應用程序發生任何超時錯誤(如“Application Not Responding”對話框)時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
--ignore-security-exceptions
通常,當應用程序發生許可錯誤(如啓動一個需要某些許可的Activity)時,Monkey將停止運行。如果設置了此選項,Monkey將繼續向系統發送事件,直到計數完成。
--kill-process-after-error
通常,當Monkey由於一個錯誤而停止時,出錯的應用程序將繼續處於運行狀態。當設置了此選項時,將會通知系統停止發生錯誤的進程。注意,正常的(成功的)結束,並沒有停止啓動的進程,設備只是在結束事件之後,簡單地保持在最後的狀態。
--monitor-native-crashes
監視並報告Android系統中本地代碼的崩潰事件。如果設置了--kill-process-after-error,系統將停止運行。
--wait-dbg
停止執行中的Monkey,直到有調試器和它相連接。
monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions] [--monitor-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]
[--wait-dbg] [--dbg-no-events] [-f scriptfile]
[--port port]
[-s SEED] [-v [-v] ...] [--throttle MILLISEC]
COUNT
講了這麼多,好像很枯燥,很難懂,即使看完了選項也不知道如何使用。
首先我們應該明白我們不可能使用monkey來制定做一樣測試,重複做很多次,因爲monkey是僞隨機的,就是說雖然有一定規律可循,但是並不是我們就可以指定動作,但是我們可以通過添加命令選項來將操作限制在一定的範圍內。
monkey -v -p com.android.camera --throttle 5000 --pct-anyevent 100 500
這條命令的解釋是:
-v顯示默認程度的信息;
-p com.android.camera是指定測試的程序,// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.camera/.Camera } in package com.android.camera這是開始測試的camera的內容;
--throttle 5000 設定延時;
--pct-anyevent 100設定啓動activity的百分比爲100%。如果沒有指定,我們可以看到在開始執行的時候8個事件(上面的選項中有介紹)的百分比如下:
# monkey -v -p com.android.camera --throttle 5000 500
monkey -v -p com.android.camera --throttle 5000 500
:Monkey: seed=0 count=500
:AllowPackage: com.android.camera
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 15.0%
// 3: 25.0%
// 4: 15.0%
// 5: 2.0%
// 6: 2.0%
// 7: 1.0%
// 8: 15.0%
指定事件之後
# monkey -v -p com.android.camera --throttle 5000 --pct-anyevent 100 500
monkey -v -p com.android.camera --throttle 5000 --pct-anyevent 100 500
:Monkey: seed=0 count=500
:AllowPackage: com.android.camera
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 0.0%
// 1: 0.0%
// 2: 0.0%
// 3: 0.0%
// 4: 0.0%
// 5: 0.0%
// 6: 0.0%
// 7: 0.0%
// 8: 100.0%
最後count就是事件數設定爲500

接下來看一個實例
Monkey的用法是$ adb shell monkey -p your.package.name -v 500 ,首先,我們要找到應用程序在Emulator中所對應的包名,我一開始是一個個目錄找得,前7步完成了這項工作,最終發現應用程序包都在data/data下,你可以在shell中cd data/data,然後ls查看當前Emulator中的所有應用程序包。
假如我們想對SDK中的APIDemos做壓力測試,
1.在Eclipse中新建工程,將: /android-sdk-windows/ platforms/android-2.0/samples/ ApiDemos添加到工程中點擊運行,此時,他的APK應該加載到了Emulator上
2.在命令行輸入adb shell
3.輸入ls查看當前文件夾下的目錄,執行結果如下
C:/Documents and Settings/Administrator>adb shell
# ls
ls
sqlite_stmt_journals
config
cache
sdcard
d
etc
system
sys
sbin
proc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
4.應用程序包都在data下,我們輸入cd data進入data文件夾,如下
# cd data
cd data
5.輸入ls查看文件夾下的內容,如下所示:
# ls
ls
misc
local
data
app-private
app
property
anr
backup
dontpanic
dalvik-cache
system
lost+found
6.還有個data,所有的應用程序就在這個data下了,進入這個data,然後輸入ls如下:
# cd data
cd data
# ls
ls
com.android.mms
com.android.providers.applications
com.android.globalsearch
com.android.calculator2
com.android.spare_parts
com.android.gesture.builder
com.android.music
com.android.sdksetup
com.android.packageinstaller
com.android.fallback
com.android.providers.settings
com.android.providers.drm
com.android.development
com.android.providers.telephony
com.android.inputmethod.pinyin
com.android.htmlviewer
com.android.settings
com.android.netspeed
com.android.providers.userdictionary
com.android.browser
com.android.contacts
com.android.alarmclock
com.android.camera
com.android.providers.contacts
jp.co.omronsoft.openwnn
com.android.launcher
com.android.phone
com.android.soundrecorder
com.google.android.providers.enhancedgooglesearch
com.svox.pico
com.android.customlocale
com.android.term
com.android.providers.downloads
com.android.providers.media
com.android.email
android.tts
com.android.inputmethod.latin
com.android.server.vpn
com.example.android.apis
7.最後一個就是我們剛纔加載的APIDemo的應用程序包
8.可以直接輸入monkey -p com.example.android.apis -v 50,結果如下,也可以退出shell,在命令行輸入,adb shell monkey -p com.example.android.apis -v 500 ,運行過程中,Emulator中的應用程序在不斷地切換畫面,可以看一下,呵呵:) 
# monkey -p com.example.android.apis -v 50
monkey -p com.example.android.apis -v 50
:Monkey: seed=0 count=50
:AllowPackage: com.example.android.apis
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 15.0%
// 3: 25.0%
// 4: 15.0%
// 5: 2.0%
// 6: 2.0%
// 7: 1.0%
// 8: 15.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10000000;component=com.example.android.apis/.ApiDemos
;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.android.apis/.ApiDemos } in package com.
example.android.apis
:Sending Pointer ACTION_MOVE x=-4.0 y=2.0
:Sending Pointer ACTION_UP x=0.0 y=0.0
// Allowing start of Intent { cmp=com.example.android.apis/.ApiDemos } in pa
ckage com.example.android.apis
:Sending Pointer ACTION_DOWN x=207.0 y=282.0
:Sending Pointer ACTION_UP x=189.0 y=289.0
// Allowing start of Intent { cmp=com.example.android.apis/.app.Intents } in
package com.example.android.apis
:Sending Pointer ACTION_DOWN x=95.0 y=259.0
:Sending Pointer ACTION_UP x=95.0 y=259.0
:Sending Pointer ACTION_DOWN x=295.0 y=223.0
:Sending Pointer ACTION_UP x=290.0 y=213.0
:Sending Pointer ACTION_MOVE x=-5.0 y=3.0
:Dropped: keys=0 pointers=0 trackballs=0 flips=0
## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connecte
d)
// Monkey finished

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章