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