關於Monkey的一切都在這里


關於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>

monkey-event.png

上面的命令表示向設備輸入100個隨機事件,如果正確輸出,可以在設備上看到各種點擊效果一閃而過。

但是這種隨機的輸入其實也是沒什么作用的,通常我們會需要制定在某一個App內做隨機事件。那么,可以再增加-p參數,完整命令如下:

Adb shell monkey -p com.mipay.wallet -v <event-count>

更多其他高級的命令,可以通過adb shell monkey -h進行查看。

monkey_help.png

三、Monkey的高級用法

1、設置事件間隔

上面給出的例子,基本上100次點擊會在瞬間被完成,肉眼可能可以感受到被點擊,但是無法明顯的感覺到有那么多次。所以設定每次事件的間隔時常,是有必要的。為Monkey設定事件的間隔,使用--throttle參數。

adb shell monkey —throttle <milliseconds>

2、復現隨機點擊的事件

Monkey雖然是隨機點擊的,但是我們主要是用它來做壓力測試。所以如果在碰到崩潰的時候,可以通過一種方式,重復之前的隨機事件,再來一次,看看崩潰的問題。Monkey也提供了這樣的參數 -s

adb shell monkey -s <seed> <event-count>

monkey_m_seed.png

可以看到,在每次執行完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中,可以看出指定事件的百分比。

monkey_pct.png

例如這里輸入觸摸事件為百分百,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

公眾號二維碼.jpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM