參考資料:http://blog.csdn.net/io_field/article/details/52189972
一、Monkey測試原理:Monkey是Android中的一個命令行工具,可以運行在模擬器里或實際設備中。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。Monkey測試是一種為了測試軟件的穩定性、健壯性的快速有效的方法。
二、測試準備
1、首先需要將手機連接到PC,測試連接是否正常,可在cmd里輸入adb devices來進行驗證;
2、因測試多針對一個特定的APP包,所以需要知道需要測試包的包名;可以直接問開發,也可以通過?adb shell pm list packages ?列出所有包名來進行查找
(不確定包是否已安裝,可以用adb shell pm list packages [options] 來進行確認,它的含義是列舉出所有包含的package。 ? ?e.g. adb shell pm list packages com.taobao.taobao)
3、對特定APP包進行測試的命令為adb shell monkey -p
三、Monkey參數
常規類參數
1、 -help
作用:列出簡單的用法
例:adb shell monkey -help ? 也可不寫help
2、-v
作用:命令行上的每一個-v都將增加反饋信息的詳細級別。
Level0(默認),除了啟動、測試完成和最終結果外只提供較少的信息。
Level1,提供了較為詳細的測試信息,如逐個發送到Activity的事件信息。
Level2,提供了更多的設置信息,如測試中選中或未選中的Activity信息。
比較常用的是-v -v -v,即最多詳細信息,一般會保存到指定文件中供開發人員查找bug原因時使用。
例:adb shell monkey -v 10
事件類參數
1、-s
作用:偽隨機數生成器的seed值。如果用相同的seed值再次運行monkey,將生成相同的事件序列。
例:adb shell monkey -s?1483082208904 -v 10
2、--throttle
作用:在事件之間插入固定的時間(毫秒)延遲,你可以使用這個設置來減緩Monkey的運行速度,如果你不指定這個參數,則事件之間將沒有延遲,事件將以最快的速度生成。
注:常用參數,一般設置為300毫秒,原因是實際用戶操作的最快300毫秒左右一個動作事件,所以此處一般設置為300毫秒。
例:adb shell monkey --throttle 300 -v 10
3、--pct-touch
作用:調整觸摸事件的百分比。(觸摸事件是指在屏幕中的一個down-up事件,即在屏幕某處按下并抬起的操作)
注:常用參數,此參數設置要適應當前被測應用程序的操作,比如一個應用80%的操作都是觸摸,那就可以將此參數的百分比設置成相應較高的百分比。
例:adb shell monkey --pct-touch 100 -v 10
4、--pct-motion
作用:調整motion事件百分比。(motion事件是由屏幕上某處一個down事件、一系列偽隨機的移動事件和一個up事件組成)
注:常用參數,需注意的是移動事件是直線滑動
例:adb shell monkey --pct-motion 100 -v 10
5、--pct-trackball
作用:調整滾動球事件百分比。(滾動球事件由一個或多個隨機的移動事件組成,有時會伴隨著點擊事件)
注:不常使用參數,現在手機幾乎沒有滾動球,但滾動球事件中包含曲線滑動事件,在被測程序需要曲線滑動時可以選用此參數。
例:adb shell monkey --pct-trackball 100 -v 10
6、--pct-nav
作用:調整基本的導航事件百分比。(導航事件由方向輸入設備的上下左右按鍵所觸發的事件組成)
注:不常用操作。
例:adb shell monkey --pct-nav 100 -v 10
7、--pct-majornav
作用:調整主要導航事件的百分比。(這些導航事件通常會導致UI界面中的動作事件,如5-way鍵盤的中間鍵,回退按鍵、菜單按鍵)
注:不常用操作。
例:adb shell monkey --pct-majornav 100 -v 10
8、--pct-syskeys
作用:調整系統事件百分比。(這些按鍵通常由系統保留使用,如Home、Back、Start Call、End Call、音量調節)
注:不常用。
例:adb shell monkey --pct-syskeys 100 -v 10
9、--pct-appswitch
作用:調整Activity啟動的百分比。(在隨機的時間間隔中,Monkey將執行一個startActivity()調用,作為最大程度覆蓋被測包中全部Activity的一種方法)
注:不常用。
例:adb shell monkey --pct-appswitch 100 -v 5
10、--pct-anyevent
作用:調整其他事件的百分比。(這包含所有其他事件,如按鍵、其他在設備上不常用的按鈕等)
注:不常用。
例:adb shell monkey --pct-anyevent 100 -v 5
約束類參數
1、-p
作用:如果你指定一個或多個包,Monkey將只允許訪問這些包中的Activity。如果你的應用程序需要訪問這些包(如選擇聯系人)以外的Activity,你需要指定這些包。如果你不指定任何包,Monkey將允許系統啟動所有包的Activity。指定多個包,使用多個-p,一個-p后面接一個包名。
注:常用參數。(在前面測試準備中已有提及)
例:adb shell monkey -p com.Android.browser -v 10
2、-c
作用:如果你指定一個或多個類別,Monkey將只允許系統啟動這些指定類別中列出的Activity。如果你不指定任何類別,Monkey將選擇謝列類別中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多個類別使用多個-c,每個-c指定一個類別。
注:不常用。
3、--dbg-no-events
作用:設置此選項,Monkey將執行初始啟動,進入一個測試Activity,并不會在進一步生成事件。為了得到最佳結果,結合參數-v,一個或多個包的約束,以及一個保持Monkey運行30秒或更長時間的非零值,從而提供了一個可以監視應用程序所調用的包之間轉換的環境。
注:不常用。
4、--hprof
作用:設置此選項,將在Monkey生成事件序列前后生成profilling報告。在data/misc路徑下生成大文件(~5Mb),所以要小心使用。
注:不常用。
5、--ignore-crashes
作用:通常,應用發生崩潰或異常時Monkey會停止運行。如果設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
注:常用。
6、--ignore-timeouts
作用:通常,應用程序發生任何超時錯誤(如“Application Not responding”對話框)Monkey將停止運行,設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
注:常用。
7、--ignore-security-exception?
作用:通常,當程序發生許可錯誤(例如啟動一些需要許可的Activity)導致的異常時,Monkey將停止運行。設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
注:常用。
8、--kill-process-after-error
作用:通常,當Monkey由于一個錯誤而停止時,出錯的應用程序將繼續處于運行狀態。設置此項,將會通知系統停止發生錯誤的進程。注意,正常(成功)的結束,并沒有停止啟動的進程,設備只是在結束事件之后簡單的保持在最后的狀態。
9、--monitor-native-crashes
作用:監視并報告Andorid系統中本地代碼的崩潰事件。如果設置--kill-process-after-error,系統將停止運行。
10、--wait-dbg
作用:停止執行中的Monkey,直到有調試器和它相連接。
補充問題
如何將測試報告記錄在本地:
將命令改為
adb shell monkey –p android.zhibo8 –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 10 >c:\monkeylog.txt
待Monkey運行結束后,會在指定目錄下生成指定文件。
Event percentage分析:
在上述過程中,使用了percent相關命令控制了事件類型,如果我們不指定事件類型。生成的報告中,事件占比大致如下:
// 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%
這里將事件分為了10種類型,分別為:
0:觸摸事件百分比,即參數--pct-touch
1:滑動事件百分比,即參數--pct-motion
2:縮放事件百分比,即參數--pct-pinchzoom
3:軌跡球事件百分比,即參數--pct-trackball
4:屏幕旋轉事件百分比,
5:基本導航事件百分比,即參數--pct-nav
6:主要導航事件百分比,即參數--pct-majornav
7:系統事件百分比,即參數--pct-syskeys
8:Activity啟動事件百分比,即參數--pct-appswitch
9:鍵盤翻轉事件百分比,即參數--pct-flip
10:其他事件百分比,即參數--pct-anyevent
更為具體的類型信息,可以查看查看Monkey源碼中的MonkeySourceRandom.java文件。
參考文檔
http://www.cnblogs.com/TankXiao/p/4815134.html
https://www.douban.com/note/257030241/