monkey是android 系統自帶的一個命令行工具,可以向被測應用程序發送偽隨機的用戶事件流(如按鍵、觸屏、滑動等操作),實現對應用程序進行測試的目的。
monkey測試也叫猴子測試,是指測試時可以像好奇的猴子一樣,不停的對應用程序進行隨機操作,以便驗證應用程序的穩定性和健壯性。因此,monkey測試是軟件穩定性,健壯性的測試工具
下面是monkey提供的一些參數:

參數:
事件相關參數表:
-s <seed> 這個參數是偽隨機數生成器的種子值,如果用相同的隨機種子值再次運行相同的monkey命令時,前、后兩次執行的操作事件序列相同,也就是相同的操作。
--throttle <milliseconds> 這個參數是設定在兩個事件之間插入一個固定延時,它可以減緩Monkey的執行速度。如果您不指定選項,Monkey將不會被延遲,事件將盡可能快地生產和發送消息。
--pct-touch <percent> 這個參數是設定觸屏事件生產的百分比,觸屏事件是一個有手指按下、抬起事件的操作。
--pct-motion <percent> 這個參數是設定滑動事件生成的百分比,滑動事件是一個先在某一個位置手指按下,滑動一段距離后再抬起手勢的操作。
--pct-trackball <percent> 這個參數是設定軌跡球事件生成的百分比,軌跡球事件是包含一系列隨機移動和單擊事件的操作。
--pct-nav <percent> 這個參數是設置基本的導航事件的百分比,基本導航事件的模擬方向性設置輸入向上、向下、向左、向右的操作。
--pct-majornav <percent> 這個參數是設定主要導航事件的百分比,主要導航事件通常是導致UI產生回饋事件,如:單擊BACK鍵,單擊MENU鍵。
--pct-syskeys <percent> 這個參數是設定系統按鍵事件的百分比,系統按鍵是指這些按鍵通常被保留,由系統使用,如HOME,BACK,撥號,掛斷及音量控制鍵。
--pct-appswitch <percent> 這個參數是設定啟動活動事件的百分比,在隨機的一定間隔后,Monkey就會執行一個startActivity()函數盡可能多的覆蓋包中全部活動。
--pct-anyevent <percent> 這個參數是設定其他類型事件的百分比,如普通的按鍵消息,不常用的設備按鈕事件等。
約束條件:
-p <運行的包名列表> 這個參數是設定一個或幾個包名,monkey將只允許系統啟動這些包里的活動,如果您的應用程序還需要訪問其他包里的活動,如選擇一個聯系人,那也需要在此同時指定聯系人所在應用的包名。
要指定多個包時,需要使用多個“-p”選項,每個“-p”選項只能用於一個包。
-c <意圖的分類> 這個參數是指定意圖的分類,這樣monkey只會啟動可以處理這些種類的意圖的活動。如果沒有設置這個選項,monkey則只會啟動帶有Intent.CATGORY_LAUNCHER 和Intent.CATEGORY_MONKEY。
與“-p”參數類似,要指定多個類別,需要使用多個“-c”選項,每個“-c”選項只能用於一個類別。
調試選項:
--dbg-no-events 若指定了該參數,monkey將會執行初始啟動,進入到一個測試Activity,不會再進一步生產事件。為了得到最佳結果,把它與“-v”,“-p”和“--throttle”等參數一起使用,並讓monkey運行30秒或更長時間,
從而可以讓我們觀測到應用程序所調用的包與包之間的切換過程。
--hprof 若指定了該參數,monkey會在發送事件序列的前、后,生成性能分析報告。通常會在“data/misc”目錄下生成一個5MB左右大小文件。
--ignore-crashes 通常情況下,monkey會在待測應用程序崩潰或發生任何異常后停止運行。若指定了該參數,則monkey將會在產生異常后,繼續向系統發送事件,直到指定的事件消息全部完成為止。
--ignore-timeouts 通常情況下,當應用程序發生任何超時錯誤(如“Application Not Responding” 對話框)時,monkey將停止運行,若指定了該參數,則monkey將會在產生錯誤消息后,繼續向系統發送事件,直到指定的事件
消息全部完成為止。
--igone-security-exceptions 通常情況下,monkey會在被測應用程序發生權限方面的錯誤時停止運行。若指定了該參數,則monkey將繼續向系統發送事件,直到指定的事件消息全部完成為止。
--kill-process-after-error 通常情況下,當monkey由於一個錯誤而停止時,出錯的應用程序就繼續處於運行狀態。當設置了此選項時,它將會通知系統停止發生錯誤的進程(注意:當monkey正常執行完畢后,它不會關閉所啟動的應用,設備依然保留
其最后接收到的消息狀態,所以建議大家在執行命令以后為保持應用的初始狀態,需手動或者腳本程序已經打開的應用進行關閉)。
--monitor-native-crashes 監視由android C/C++ 代碼部分引起的崩潰,若同時指定了 --kill-process-after-error 參數,則整個系統將會關機。
--wait-dbg 啟動monkey后,先中斷其運行,等待調式器和它相連接。
示例講解:
-s 指定隨機種子大小
命令:adb shell monkey -p com.xxx.xxx -v 100
-s的參數值為100,表明monkey對應用程序com.xxx.xxx一共發送100個隨機操作事件。第一次執行和第二次執行該命令時,操作的事件順序是一樣的,因為-s的參數都是100,產生的隨機事件序列的順序也是一樣。
-p 指定運行的應用程序
命令:adb shell monkey -p com.xxx.xxx -p com.android.calendar 200
有兩個-p參數,說明monkey同時啟動兩個應用程序,並對這兩個應用程序同時進行200個隨機操作事件。
-throttle 指定各個隨機事件之間的延時時間,單位:毫秒
命令:adb shell monkey -p com.xxx.xxx --throttle 3000 100
--throttle 參數值為3000毫秒,也就是每個事件操作的時間間隔為3秒,3秒后進入下一個事件操作。
--pct-touch <percent> 用於設定觸屏事件生成的百分比
命令:adb shell monkey --pct-touch 50 -p com.xxx.xxx --throttle 3000 100
--pct-touch 50 表示設定觸屏事件的占比為50%。
--pct-motion <percent> 用於設定滑動事件生成的百分比
命令:adb shell monkey --pct-motion 50 -p com.xxx.xxx --throttle 3000 100
--pct-motion 50 表示設定滑動事件的占比為50%
--pct-trackball <percent> 用於設定軌跡球事件的百分比
命令:adb shell monkey --pct-trackball 50 -p com.xxx.xxx --throttle 3000 100
-pct-trackball 50 表示設定軌跡球事件的占比是50%
--pct-nav <percent> 用於設定設備向上、向下、向左、向右事件的百分比
命令:adb shell monkey --pct-nav 60 -p com.xxx.xxx 100
--pct-nav 50 表示設置控制設備操作向上、向下、向左、向右的比例占比是60%。
--pct-majornav <percent> 用於控制設備主要導航事件,如單擊BACK鍵,單擊MENU鍵的百分比
命令:adb shell monkey --pct-majonav 70 -p com.xxx.xxx 200
--pct-majornav 70 表示設置控制設備主要導航事件,打擊BACK鍵,單擊MENU鍵的占比是70%。
--pct-syskeys <percent> 用於控制設備系統按鍵事件,如home、back、撥號、掛斷及音量事件生成的百分比
命令:adb shell monkey --pct-syskeys 50 -p com.xxx.xxx 100
-pct-syskeys 50 表示設置控制系統按鍵事件的占比為50%。
--pct-appswitch <percent> 用於設置啟動活動事件的百分比
命令:adb shell monkey --pct-appswitch 60 -p com.xxx.xxx 500
表示設置主要覆蓋包中60%的活動
--pct-anyevent <percent> 用於設置其他類型事件的百分比
命令:adb shell monkey --pct-anyevent 50 -p com.xxx.xxx 500
表示其中普通的按鍵消息、不常用的設備按鈕事件等占50%
--hprof 用於記錄monkey在執行前、后的性能數據
命令:adb shell monkey --hprof -p com.xxx.xxx 5000
表示在monkey發送事件序列的前、后,生成性能分析報告。通常會“/data/misc”目錄下生成一個5MB大小左右的文件。
--ignore-crashes 用於設置monkey運行時,待測程序崩潰或發生異常后,是否需要繼續執行
命令:adb shell monkey --ignore-crashes -p com.xxx.xxx 5000
表示在monkey執行事件操作過程中,如果發生了程序崩潰或異常,依然繼續執行剩余的操作
--ignore-timeout 用於設置monkey運行時,待測程序出現超時,是否需要繼續執行
命令:adb shell monkey --ignore-timeout -p com.xxx.xxx 5000
表示在monkey執行事件操作過程中,如果出現超時(Application Not Responding),monkey依然執行剩余的操作
--ignore-security-exceptions 用於設置monkey運行時,出現一些訪問權限問題,是否需要繼續執行
命令:adb shell monkey --ignore-security-exceptions -p com.xxx.xxx 5000
表示在monkey運行時,出現證書許可證錯誤或網絡許可錯誤等情況,monkey依然繼續執行剩余的操作
