本文主要介紹Monkey的相關命令,具體Monkey的操作,詳見本系列的第一篇文章
1、包名指定:
可以指定一個,可以指定多個,也可以不指定,隨機去操作
不指定包名:adb shell monkey ? -v 500 ?>F:/monkeylog2018.txt,隨機500個事件執行,沒有具體的包,在手機上隨機操作各種app或系統功能,下圖日志里,using了各種app的activity,相當于是對整機進行測試
指定一個包名的命令:adb shell monkey -p com.aaa.aaaaaaaa ?-v 500 >F:/monkeylog2018.txt,直接對aaa這個app進行500次隨機事件并寫入txt
指定多個包名的命令:adb shell monkey -p com.aaa.aaaaaaaa ?-p com.bbb.bbbbb -v 500 >F:/monkeylog2018.txt ?兩次指定兩個包名,合計執行500次隨機事件,寫入日志文檔。在log里可以看到using兩個activity
2、日志級別:
分為Level0-Level2三個級別,0僅提供啟動提示、測試完成和最終結果等少量信息,1提供較為詳細的日志,包括每個發送到Activity的事件信息,2最詳細的日志,包括了測試中選中/未選中的Activity信息。用-v表示,想用幾級就指定幾個-v
Level0:adb shell monkey ? -v 500 ?>F:/monkeylog2018.txt
Level1:adb shell monkey ? -v ?-v ?500 ?>F:/monkeylog2018.txt
Level2:adb shell monkey ? -v ?-v ?-v ?500 ?>F:/monkeylog2018.txt
上圖也是level2級別的日志效果,會詳細顯示哪些包被using了,哪些被拒絕using了,如果是0級別的,則看不到這些信息
3、SEED值:
用于指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的,用-s參數。
Monkey測試1:adb shell monkey -p com.htc.Weather –s 10 100
Monkey測試2:adb shell monkey -p com.htc.Weather –s 10 100
-s 10 前后兩條命令相同,那么其隨機的內容也是相同的,這樣可以在對比測試的時候用到
4、時延控制:
用于指定用戶操作間的時延,單位是毫秒,用--throttle參數,注意是兩個減號
adb shell monkey -p com.huawei.Weather –throttle 3000 100,此命令是隨機100次事件,但是每次需要延遲3秒做下一個動作,這樣可以給app留有響應時間,連網時間,加載時間,否則事件發送太快,來不及響應就要執行下一個事件,會導致結果不準確,類似LR里面的思考時間
上面的命令執行后,在日志里會看到這樣的記錄:Sleeping for 3000 milliseconds,同時在手機界面上也會有直觀的感應,各種點擊操作都會有3秒的延時
5、忽略執行:
--ignore-crashes:
忽略崩潰:用于指定當應用程序崩潰時(Force & Close錯誤),Monkey是否停止運行。如果使用此參數,即使應用程序崩潰,Monkey依然會發送事件,直到事件計數完成。
示例1:adb shell monkey -p com.huawei.Weather --ignore-crashes 1000 ? ? 測試過程中即使Weather程序崩潰,Monkey依然會繼續發送事件直到事件數目達到1000為止;
示例2:adb shell monkey -p com.huawei.Weather 1000 ? ? ?測試過程中,如果Weather程序崩潰,Monkey將會停止運行。
--ignore-timeouts:
忽略超時:用于指定當應用程序發生ANR(Application No Responding)錯誤時,Monkey是否停止運行。如果使用此參數,即使應用程序發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。adb shell monkey -p com.huawei.Weather --ignore-timeouts 1000
--ignore-security-exceptions:
忽略安全異常:用于指定當應用程序發生許可錯誤時(如證書許可,網絡許可等),Monkey是否停止運行。如果使用此參數,即使應用程序發生許可錯誤,Monkey依然會發送事件,直到事件計數完成。adb shell monkey -p com.huawei.Weather --ignore-security-exceptions 1000
--kill-process-after-error:
發生錯誤后直接殺掉進程:用于指定當應用程序發生錯誤時,是否停止其運行。如果指定此參數,當應用程序發生錯誤時,應用程序停止運行并保持在當前狀態(注意:應用程序僅是靜止在發生錯誤時的狀態,系統并不會結束該應用程序的進程)。adb shell monkey -p com.huawei.Weather?--kill-process-after-error?1000
--monitor-native-crashes:
跟蹤本地方法崩潰問題:用于指定是否監視并報告應用程序發生崩潰的本地代碼,adb shell monkey -p com.huawei.Weather?--kill-process-after-error ?--monitor-native-crashes 1000
6、指定事件百分比:
用于指定每種類別事件的數目百分比(在Monkey事件序列中,該類事件數目占總事件數目的百分比),雖然事件是隨機的,但是你可以指定其中某種動作的比例,根據app的特點而進行設置,某些app滑動多,某些app點擊多,這樣可以更貼近app應用場景的設置隨機事件進行測試
--pct-{+事件類別} {+事件類別百分比}:
--pct-touch {+百分比}:觸摸事件:adb shell monkey -p com.huawei.Weather --pct-touch 10 1000
--pct-motion {+百分比}:動作事件:adb shell monkey -p com.huawei.Weather --pct-motion10 1000
--pct-trackball {+百分比}:軌跡事件:adb shell monkey -p com.huawei.Weather --pct-trackball?10 1000
--pct-nav {+百分比}:基本導航:adb shell monkey -p com.huawei.Weather --pct-nav?10 1000
--pct-majornav {+百分比}:主要導航:adb shell monkey -p com.huawei.Weather --pct-majornav?10 1000
--pct-syskeys {+百分比}:系統按鍵:adb shell monkey -p com.huawei.Weather --pct-syskeys?10 1000
--pct-appswitch {+百分比}:啟動activity(日志里見過這個switch吧):adb shell monkey -p com.huawei.Weather --pct-appswitch? 10 1000
--pct-anyevent {+百分比}:其他事件:
指定單個類型事件的百分比:
adb shell monkey -p com.huawei.Weather --pct -anyevent 20 ?1000
指定多個類型事件的百分比:
adb shell monkey -p com.huawei.Weather --pct-anyevent 30 ?--pct-appswitch 30 ? 1000
注意:各事件類型的百分比總數不能超過100%
總結:
本文中所舉的栗子都是單個參數的命令,實際使用過程中,大部分是組合命令,比如指定包,日志級別,忽略報錯等參與組合放在一條命令里執行的
adb shell monkey -p com.aaa.aaaaa -v -v -v --throttle 500 --pct-anyevent 100 5000 >F:/monkeylog.txt
adb shell monkey -p com.aaa.aaaaa -s 23? --throttle 2000 --ignore-crashes --ignore-timeouts -v -v -v 100000 >F:/monkeylog.txt