關於Monkey的一切都在這里
版權聲明:
本賬號發布文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。
允許有條件轉載,轉載請附帶底部二維碼。
一、什么是Monkey
Monkey是Android自身提供的,可以通過adb shell模擬用戶行為,發送一些偽隨機用戶事件到目標設備上。
Monkey和它的直接意思一樣,可以像一個猴子一樣,瘋狂的輸入各種隨機事件到設備上,像是一個猴子在瘋狂的點擊設備。
既然Monkey有這樣的功能,我們就可以利用它來對Android App做壓力測試,可以在規定的范圍內,任意隨機觸發各種事件,來驗證App的抗壓性和穩定性。這些隨機事件包括:點擊屏幕、滑動屏幕、各種無力按鍵等。
二、簡單的使用Monkey
Monkey主要是借助adb命令來讓PC與Android設備連接,adb是一種Android調試工具,在PC上配置好環境即可使用。
Monkey使用起來非常的簡單,基本命令如下:
adb shell monkey <event-count>
這樣直接在Terminal中輸入,就會像設備上發送指定的事件數的事件。但是在Terminal中不會有任何輸出,如果需要有輸出,可以加上-v
參數。-v
表示輸出的Log級別,-v
最低,-v -v -v
最高。
adb shell monkey -v <event-count>
上面的命令表示向設備輸入100個隨機事件,如果正確輸出,可以在設備上看到各種點擊效果一閃而過。
但是這種隨機的輸入其實也是沒什么作用的,通常我們會需要制定在某一個App內做隨機事件。那么,可以再增加-p
參數,完整命令如下:
Adb shell monkey -p com.mipay.wallet -v <event-count>
更多其他高級的命令,可以通過adb shell monkey -h
進行查看。
三、Monkey的高級用法
1、設置事件間隔
上面給出的例子,基本上100次點擊會在瞬間被完成,肉眼可能可以感受到被點擊,但是無法明顯的感覺到有那么多次。所以設定每次事件的間隔時常,是有必要的。為Monkey設定事件的間隔,使用--throttle
參數。
adb shell monkey —throttle <milliseconds>
2、復現隨機點擊的事件
Monkey雖然是隨機點擊的,但是我們主要是用它來做壓力測試。所以如果在碰到崩潰的時候,可以通過一種方式,重復之前的隨機事件,再來一次,看看崩潰的問題。Monkey也提供了這樣的參數 -s
。
adb shell monkey -s <seed> <event-count>
可以看到,在每次執行完Monkey之后,從輸出里可以看到當前的seed值,只要通過-s
參數指定相同的seed,就可以重復剛才的操作。
例如如果需要重復上面的操作,就需要在Terminal中輸入:
adb shell monkey -s 1487572980979 -v 1000
3、忽略崩潰
正常來說,如果在Monkey執行的階段,出現了崩潰,會立即停止接下去的執行。但是有時候,我們在執行Monkey的時候,是在無人員干涉的情況下,例如想要它執行一夜,等等情況。那么如果出現崩潰就停止執行,明顯不是我們需要的。在Monkey中,可以通過—ignore-crashes
來忽略掉異常崩潰。
adb shell monkey —ignore-crashes <event-count>
如果用此參數忽略了崩潰,在發生崩潰的時候,會繼續指定,表現是又從新開始執行Monkey了,而同時,用-s
設定的seed值將不會生效。
4、忽略ANR
ANR是Android的一個錯誤,在頁面無法響應事件的時候會報出來。一般遇到這樣的情況,表示當前有耗時操作在UI線程指定,導致卡UI了。
在Monkey中,如果遇上ANR,同樣會停止繼續執行。如果想要忽略ANR,讓其觸發的時候依然執行下去,可以使用—ignore-timeouts
參數。
adb shell monkey —ignore-timeouts <event-count>
同樣它也會導致-s
失效。
四、指定Monkey事件
在Monkey中,雖然輸入的事件是隨機產生的,但是可以指定輸入事件類型的百分比,讓其控制在我們需要的范圍內。
在Monkey中,可以設定的事件類型有:
--pct-touch <percent>
:指定觸摸事件的百分比。--pct-motion <percent>
:指定滑動事件的百分比。--pct-trackball <percent>
:指定軌跡球事件的百分比。--pct-nav <percent>
:指定導航事件中,up、down、left、right等事件的百分比。--pct-majornav <percent>
:指定導航事件中,back、menu等事件的百分比。--pct-syskeys <percent>
:指定系統按鍵的百分比,包括HOME、Back、音量等。--pct-appswitch <percent>
:指定Activity之間切換的比例。--pct-anyevent <percent>
:指定任意事件的百分比。
默認情況下,如果不設置,會是--pct-anyevent
為百分之百,也就是純隨機事件。如果通過其他的參數配置了之后,如果相加的百分比不為百分百,余下的百分比部分也會生成隨機事件。
從Monkey的輸出Log中,可以看出指定事件的百分比。
例如這里輸入觸摸事件為百分百,Event percentages的0表示的就是觸摸事件,為100%。
五、舉個栗子
到這里基本上就介紹為Monkey中一些主要的參數含義了,更多的可以通過-h查看幫助文檔。
基本上配置事件百分比,有一些事件已經隨着Android發展被消失掉了,例如軌跡球,在現在主流的設備上,已經基本上看不見軌跡球的影子了。
那么就本文介紹的一些命令,簡單配置一個可以直接使用的例子:
adb shell monkey -p com.miui.cal —throttle 100 —-ignore-crashes —-ignore-timeouts --pct-touch 50 --pct-majornav 10 --pct-syskeys 20 --pct-appswitch 20 -v 1000 > ./monket_log.txt