前不久我轉(zhuǎn)到一個本地化項(xiàng)目做安卓測試,還只有一個安卓測試那種。這要是測得不好就有點(diǎn)尷尬了,這么覺得的我于是想著雖然那種很洋氣的自動化我還不會,但是至少跑個monkey還是沒問題的!剛好今天比較閑于是就開始擠時間準(zhǔn)備開始學(xué)學(xué)怎么跑monkey了!
【本次僅記錄如何使用monkey各常用參數(shù)及對其的理解,腳本及報(bào)告分析放到下一篇?!?/i>
Monkey,顧名思義就是猴子,引申出來即是猴子瞎點(diǎn)能發(fā)現(xiàn)一些平時進(jìn)行正常操作發(fā)現(xiàn)不了的問題。【純屬個人理解。_(:зゝ∠)_】
關(guān)于如何連上手機(jī)開啟調(diào)試就略過不提,當(dāng)連上需調(diào)試的手機(jī)后進(jìn)入cmd的操作界面,使用adb shell進(jìn)入shell端, 然后monkey+參數(shù)。即adb shell monkey+參數(shù)。
在命令最后加上的一個整數(shù)即為想要產(chǎn)生的隨機(jī)事件數(shù)量。
Monkey的參數(shù)大致分為四類:General,Events,Constraints,Debugging。
一、General參數(shù)即是常規(guī)參數(shù),一般指-v與--help。
按照我自己學(xué)習(xí)Linux的習(xí)慣就來先搞懂命令的縮寫是什么意思。
1、-v即level,打印出的log的詳細(xì)程度。詳細(xì)程度一共有三級0/1/2,詳細(xì)如下。
Level0(默認(rèn))-v,除了啟動、測試完成和最終結(jié)果外只提供較少的信息。
Level1 -v -v,提供了較為詳細(xì)的測試信息,如逐個發(fā)送到Activity的事件信息。
Level2 -v -v -v,提供了更多的設(shè)置信息,如測試中選中或未選中的Activity信息。
1_例子:adb shell monkey -v -v -v 1000
2、--help,關(guān)于help命令就不必多說了。
此外不知道大家有沒有跟我一樣的困惑:有的教程里寫的是-help,而有的是--help,這兩個命令有區(qū)別嗎?
查詢后得出的結(jié)論是--后一般接命令完整單詞,-后一般接命令簡寫。比如--help與-h其實(shí)執(zhí)行的是同一命令,但是有的參數(shù)只能使用完整單詞比如后面將提到的--throttle。
【如有問題請?jiān)谠u論里給我提出,謝謝。】
二、Events參數(shù)即為操縱每個事件的參數(shù),比如-s,--throttle等。
1、-s參數(shù)為seed,種子。種瓜得瓜種豆得豆,即我們可以根據(jù)出現(xiàn)錯誤時的seed值運(yùn)行出相同的隨機(jī)事件序列。【這個參數(shù)我其實(shí)沒太明白如何使用,就是比如我想復(fù)現(xiàn)seed=12312時的事件序列,然后后面需要選擇執(zhí)行多少次呢?希望有人解答?!?/i>
2、--throttle 壓制,節(jié)流閥即控制,我們可以通過這個參數(shù)操作每個事件的間隔時間來模擬用戶的真實(shí)操作速度,比如一般取值為300ms。
2_例子:adb shell monkey -s 152342 --throttle 300 -v 1000
3、除了以上兩個參數(shù)外還有一系列以--pct開頭的控制每種事件百分比的參數(shù),當(dāng)測試不同類型APP時可以針對對應(yīng)的事件百分比做調(diào)整。詳細(xì)內(nèi)容如下。
--pct-touch 指定觸摸事件的百分比
--pct-motion? (滑動事件)
--pct-trackball? (軌跡球事件)
--pct-nav? (導(dǎo)航事件 up/down/left/right)
--pct-majornav? (主要導(dǎo)航事件 back key 、 menu key)
--pct-syskeys? (系統(tǒng)按鍵事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
--pct-appswitch? (activity之間的切換)
--pct-anyevent (任意事件)
3_例子:adb shell monkey --pct-motion 30 --pct-touch 20 -v 1000(注意--pct數(shù)值后不用加百分號%)
三、Constraints約束參數(shù),即對運(yùn)行的隨機(jī)事件范圍等進(jìn)行約束的參數(shù),如-p。
1、-p package包,使用這個參數(shù)可以針對指定的包產(chǎn)生隨機(jī)事件。并且可以指定多個包,一個包名對應(yīng)一個-p參數(shù)。
1_例子:adb shell monkey -p xx.xxx.xxx -p zz.zzz.zzz -v 1000
2、-c category類別,這個參數(shù)只允許系統(tǒng)啟動這些類別中某個類別列出的Activity。使用這個參數(shù)需要知道應(yīng)用的activity名稱。如不手動指定,monkey只會啟動Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY的活動。【這個因?yàn)槲覜]看到代碼所以沒有怎么嘗試,感到遺憾,之后會好好看看這個參數(shù)。】
2_例子:adb shell monkey -p xx.xxx.xxx -c android.intent.category.LAUNCH -v 1000
四、Debugging調(diào)試參數(shù),即用于調(diào)試的參數(shù)命令,如--hprof。
1、--dbg-no-events 使用此參數(shù)時monkey會啟動待測應(yīng)用,但不發(fā)送任何消息,建議與-v,-p,-throttle一起使用。
2、--hprof 這個參數(shù)生成的profiling報(bào)告可以由HPROF查看工具會列出類、類的實(shí)例和實(shí)例的引用樹,以此來幫助你跟蹤內(nèi)存的使用情況,找出內(nèi)存泄漏的地方。HPROF最初是由J2SE支持的一種二進(jìn)制堆轉(zhuǎn)儲格式。
相對于靜態(tài)代碼分析,Profiling 是通過收集程序運(yùn)行時的信息來研究程序行為的動態(tài)分析方法。其目的在于定位程序需要被優(yōu)化的部分,從而提高程序的運(yùn)行速度或是內(nèi)存使用效率。
使用此參數(shù)時monkey會在發(fā)送事件前后生成性能報(bào)告(即內(nèi)存的快照文件),一般在設(shè)備的/data/misc目錄下生成一個hprof文件。【這個命令我今天還沒試過,等明天試試看,看看打印出的報(bào)告。】
3、--kill-process-after-error 一般情況下,當(dāng)monkey因?yàn)槟硞€錯誤指定運(yùn)行時,出問題的應(yīng)用會留在系統(tǒng)上繼續(xù)執(zhí)行,這個選項(xiàng)通知系統(tǒng)當(dāng)錯誤發(fā)生時殺掉進(jìn)程。
注意:當(dāng)monkey正常執(zhí)行完畢后,它不會關(guān)閉所啟動的應(yīng)用,設(shè)備依然停留在最后接受到消息的狀態(tài)。
4、--monitor-native-crashes 監(jiān)視由Android C/C++代碼部分(cpu計(jì)算部分)引起的崩潰,此時如果設(shè)置了“--kill-process-after-error”,整個系統(tǒng)會關(guān)機(jī)。【這個命令我今天還沒試過,等試了看看能不能結(jié)合日志分析下原因。】
5、--wait-dbg 即我們啟動monkey后,只有連上被測設(shè)備且打開調(diào)試時才繼續(xù)進(jìn)行monkey測試。
1-5_例子:adb shell monkey -p xx.xx.xx--dbg-no-events --hprof --kill-process-after-error --wait-dbg -v 1000
6、除了以上參數(shù)還有以ignore開頭的一系列參數(shù),可以便于在問題發(fā)生后繼續(xù)進(jìn)行monkey測試直到指定個數(shù)的消息全部發(fā)送完畢,而不會直接中斷停止。
--ignore-crashes 忽略待測應(yīng)用崩潰或發(fā)生異常的情況
--ignore-timeouts 忽略待測應(yīng)用停止響應(yīng)(如彈出“應(yīng)用無響應(yīng)”對話框)的情況
--ignore-security-exceptions 忽略待測應(yīng)用碰到權(quán)限方面的錯誤的情況
6_例子:adb shell monkey -p xx.xx.xx --hprof --kill-process-after-error --wait-dbg --ignore-crashes --ignore-security-exceptions -v 1000
其中一些未嘗試的參數(shù)我接下來會再試試,等嘗試了繼續(xù)更新或在更新下一篇關(guān)于腳本&報(bào)告分析的時候加在其中。
參考:
http://www.cnblogs.com/yajing-zh/p/4340795.html
http://www.cnblogs.com/wanqieddy/p/4312814.html
Submitted by 梅湖