一、認識monkey
Monkey 就是SDK中附帶的一個工具。Monkey是Android中的一個命令行工具,可以運行在模擬器里或實際設備中;
它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試;
Monkey測試是一種為了測試軟件的穩定性、健壯性的快速有效的方法。
Monkey特點:
1、測試的對象僅為應用程序包,有一定的局限性。
2、Monky測試使用的事件數據流是隨機的,不能進行自定義。
3、可對MonkeyTest的對象,事件數量,類型,頻率等進行設置。
二、Monkey的基本用法
1.查看幫助
adb shell monkey 或者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]
[--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]
COUNT
2.參數 -p ,比如:
adb shell monkey -p 包名 -v 500
-p參數后面寫上需要測試的包名,則可輕松跑通一條實例
3.參數: -v
adb shell monkey -p 包名 -v 500
-v 是描述日志級別,用於跑monkey輸出日志
日志級別共有三級,Level0:-v 、Level1:-v -v、Level2:-v -v -v
4.參數: -s,用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
Monkey 1:adb shell monkey -p 包名 -s 10 100
Monkey 2:adb shell monkey -p 包名 –s 10 100
兩次測試的效果是相同的,因為模擬的用戶操作序列(每次操作按照一定的先后順序所組成的一系列操作,即一個序列)是一樣的。
5.參數: --throttle<毫秒>,操作事件間的時延,單位是毫秒;
adb shell monkey -p cn.emoney.acg --throttle 5000 100
6.忽略報錯參數,一般來說,不設置參數的話,monkey遇到報錯就會停止,所以加上一些忽略參數,monkey遇到報錯時可繼續運行。
--ignore-crashes(應用程序崩潰或異常時(crash、exception),繼續發送事件信息)
adb shell monkey -p 包名 --ignore-crashes 1000
--ignore-timeouts(在應用程序超時(ANR)的時候,繼續發送事件)
adb shell monkey -p 包名 --ignore-timeouts 1000
–ignore-security-exceptions(在應用程序發生許可證錯誤的時候(認證或證書異常),繼續發送事件)
adb shell monkey -p 包名 –ignore-security-exceptions 1000
–ignore-native-carshes(忽略本地代碼導致的崩潰)
adb shell monkey -p 包名 –ignore-native-carshes 1000
7.–pct調整事件的百分比,具體如下:
–pct-touch 觸摸事件百分比,就是log中down-up事件,發生在屏幕的某一個單一的位置,比如:adb shell monkey -p com.xxxx.xxxx–pct-touch 30 -v 500
–pct-motion 動作事件的百分比
–pct-trackball 軌跡事件的百分比,拖動屏幕
–pct-nav 基本導航事件的百分比,如上下左右鍵
–pct-majornav 主要導航事件的百分比,如中間鍵,取消、確定或菜單引發的圖形接口的動作
–pct-syskeys 系統按鍵事件,如Home、Back、StartCall、Endcall及音量控制鍵等
–pct-appswitch 啟動Activity的百分比,在隨機間隔中,執行一個startActivity()方法調用
–pct-flip 點擊事件的百分比
8.輸出monkey日志
跑monkey的時候或者想抓程序log導出時,有時會提示:cannot create D:monkeytest.txt: read-only file system
后來發現跟使用使用習慣不一樣,一會是先進入adb shell 再用命令,一會是直接命令進入。
進入adb shell后再用命令就會失敗~正確方法:退出shell或者執行命令時先不要進shell
adb shell monkey -p com.xxxx.xxxx --ignore-crashes --ignore-timeouts -s 10 -v -v -v 50000 >e:\log.txt
Monkey測試出現錯誤后,一般的查錯步驟為以下幾步:
①、找到是monkey里面的哪個地方出錯
②、查看Monkey里面出錯前的一些事件動作,並手動執行該動作
③、若以上步驟還不能找出,可以使用之前執行的monkey命令再執行一遍,注意seed值要一樣--復現
一般的測試結果分析:
①、 ANR問題:在日志中搜索“ANR”
②、崩潰問題:在日志中搜索“Exception” Force Close
9.Monkey測試中的黑名單和白名單
在測試中,因為手機中的一些其他操作可能影響測試結果(例如下拉通知欄),我們可以進行設置一個類似黑名單的東西去屏蔽它,具體命令如下:
adb shell monkey --pkg-blacklist-file /data/ blacklist.txt -v -v--throttle 200 1000000
具體的實現方式是,首先在電腦上建立一個blacklist.txt文件,在這個文件中將要屏蔽的包名一一寫進去,然后將這個文件push到手機的data目錄下: adb push blacklist.txt /data/,這樣就會屏蔽掉這幾個包,不去執行它。
和黑名單類似,我們也可以建立一個類似於白名單一樣的文件whitelist.txt,只去執行在白名單列表中的包名,詳細步驟和黑名單一樣。具體命令如下:
adb shell monkey --pkg-whitelist-file /data/whitelist.txt -v -v --throttle 500 100000
10.停止monkey
跑monkey的過程中,如果想停止monkey時,可以刪除pid
adb shell
# ps | grep monkey
#kill pid