簡介
Monkey是Android SDK提供的一個命令行工具蒋伦,可以簡單方便的發(fā)送偽隨機的用戶事件流弓摘,對Android APP做壓力(穩(wěn)定性)測試。主要是為了測試app是否存在無響應和崩潰的情況痕届。
monkey命令
adb shell monkey -p com.xiwang.zaixian -s 12345 -v -v -v --throttle 300 --pct-touch 60 --pct-motion 38 --pct -rotation 1--pct -pinchzoom 1 --bugreport 100000
以上參數說明:
基礎參數:-v 韧献、-s 、-p 研叫、--throttle等
調試選項:--ignore-crashes等
事件類型:--pct-touch等
(一)基礎參數
1锤窑、最簡單的monkey命令(adb shell monkey 100)
表示:在設備上,針對整個系統(tǒng)發(fā)送100個偽隨機事件嚷炉。
2渊啰、-v參數
用于指定反饋信息級別(信息級別就是日志的詳細程度)總共分為3級,默認為-v(對應:level0)
-v:只提供啟動提示渤昌、測試完成提示和最終結果等少量信息虽抄。
-v -v:較為詳細的日志,包括每個發(fā)送到activity的時間信息独柑。
-v -v -v:最詳細的日志迈窟,包括測試中選中/未選中的activity信息。
注意:在monkey測試完成時忌栅,最后一定會有一個:monkey finished標識车酣。
3、-p參數
在我們測試時索绪,是針對具體的app進行測試的湖员,所以在使用monkey測試時,我們需要提供具體的app包名給monkey瑞驱,此時就需要用到參數-p娘摔。在-p后跟隨app包名。
在測試時唤反,可以不指定包名凳寺,此時monkey會在測試設備上隨機啟動app進行操作鸭津;如果只需要測試一個app,使用一個-p即可肠缨;如果有多個app同時測試逆趋,可以直接使用-p 包名1 -p 包名2指定具體要測試的app。
4晒奕、-s參數
種子值(seed)闻书,因為monkey是發(fā)送的是偽隨機的事件流,但是如果兩次seed值相同脑慧,那兩次monkey測試所產生的事件序列也相同魄眉。(所以一般在測試時要記錄seed值,以防出現無響應和crash漾橙,不容易驗證杆融。)-s 12345偽隨機事件12345(12345是隨便起的名字,也可以叫456霜运,命名的好處是:如果發(fā)現了崩潰脾歇,開發(fā)解決之后,再以這個seed進行跑淘捡,步驟是和之前一樣的)
注意:-s需要跟在包名后藕各,次數前
5、--throttle參數
設置執(zhí)行操作的延遲時間(毫秒)--是指兩個事件之間的間隔焦除,如果沒有指定此參數激况,會盡可能快的生成和發(fā)送事件。注:實際用戶操作的最快300毫秒左右一個動作事件
(二)調試選項
1膘魄、--ignore-crashes
用于指定當應用程序崩潰時乌逐,Monkey是否停止運行。如果使用此參數创葡,即使應用程序崩潰浙踢,monkey依然會發(fā)送事件,直到事件計數完成灿渴。
2洛波、---ignore-timeouts
用于指定當應用程序發(fā)生ANR(Application No Responding)錯誤時,Monkey是否停止運行骚露。如果使用此參數蹬挤,即使應用程序發(fā)生ANR錯誤,Monkey依然會發(fā)送事件棘幸,直到事件計數完成焰扳。
3、--ignore-security-exceptionss
用于指定當應用程序發(fā)生許可錯誤時(如證書許可,網絡許可等)蓝翰,Monkey是否停止運行光绕。如果使用此參數,即使應用程序發(fā)生許可錯誤畜份,Monkey依然會發(fā)送事件,直到事件計數完成欣尼。
4爆雹、--kill-process-after-error
用于指定當應用程序發(fā)生錯誤時,是否停止其運行愕鼓。如果指定此參數钙态,當應用程序發(fā)生錯誤時,應用程序停止運行并保持在當前狀態(tài)(注意:應用程序僅是靜止在發(fā)生錯誤時的狀態(tài)菇晃,系統(tǒng)并不會結束該應用程序的進程)册倒。
5、--monitor-native-crashes
用于指定是否監(jiān)視并報告應用程序發(fā)生崩潰的本地代碼
6磺送、--hprof
該選項設置后驻子,將會在monkey事件序列前后立刻生成report,大小為大于5MB估灿,存儲在/data/misc
(三)事件類型
monkey在發(fā)送偽隨機事件時崇呵,是有不同的類型的。默認隨機分配比例馅袁,也可以指定其百分比域慷。如果不設置會是--pct-anyevent為100%,也就是純隨機事件汗销;如果配置了其他參數犹褒,但是不夠100%,余下的百分比部分也是--pct-anyevent事件弛针。
具體事件類型分別為:
1:觸摸事件--pct-touch
調整touch觸屏事件的百分比叠骑,觸碰事件就是指在屏幕上的一個單獨位置的一次點擊/抬起的事件。
2:滑屏事件--pct-motion(手勢事件)
(手勢事件是由一個在屏幕某處的按下事件钦奋、一系列的偽隨機移動座云、一個抬起事件組成)即一個滑動操作,但是是直線的付材,不能拐彎)
3:軌跡球--pct-trackball
(軌跡球事件包括一個或多個隨機移動朦拖,有時還伴有點擊。軌跡球現在智能手機上已經沒有了厌衔,就是類似手柄的方向鍵一樣)
4:旋轉(--pct-rotation)
旋轉屏幕
5:二指縮放事件(--pct-pinchzoom)
二指縮放事件是指在屏幕上的兩處同時按下璧帝,并同時移動,最后同時抬起的操作富寿,即智能機上的放大縮小手勢操作睬隶。
6:導航--pct-nav
(導航事件包括上下左右锣夹,如方向輸入設備的輸入)老手機的上下左右鍵,智能機上沒有)
7:主導航--pct-majornav
調整主要導航事件的百分比(如中間鍵苏潜、取消银萍、確定或菜單引發(fā)的圖形接口的動作)
8:系統(tǒng)按鍵--pct-syskeys
調整系統(tǒng)按鍵事件,如:home/back/startcall/endcall以及音量控制鍵等
9:app切換--pct-appswitch
調整啟動activity的百分比恤左,在隨機間隔中贴唇,執(zhí)行一個startActivity()方法調用,作為一種最大化的覆蓋安裝包的所有的activity的方法
10:鍵盤翻轉(--pct-flip)
11:隨機--pct-anyevent
調整其他類型的事件的百分比飞袋,比如按鍵或其他不太常用到的一些事件的百分比
12:bugreport {次數} 事件的次數
還有其他參數設置:需要可以搜索
monkey測試步驟+注意事項
- 連接WiFi戳气,不連接代理,保證使用真實的線上返回
- 去掉SIM卡巧鸭,以免斷開WiFi的時候瓶您,使用過多流量
- 打開cmd,輸入以上命令纲仍,保持cmd窗口不關閉呀袱,如遇到崩潰,cmd上的輸出就會停止巷折,把崩潰保存下來提交給開發(fā),本地如果有崩潰日志保存压鉴,保存出現崩潰的界面,提交給開發(fā)
- 有的手機在跑monkey的時候锻拘,中間會和PC斷開連接油吭,重啟手機或者使用ps命令找到monkey的進程號之后,kill掉該進程號,則能停止monkey
- 關閉鎖屏及屏幕保護
- 需要開啟手機開發(fā)者選項中的允許模擬位置
- 調整手機時區(qū)是中國時區(qū)(有的手機可能跑monkey或者人為使時區(qū)調整成非中國的署拟,因為有的地方開發(fā)代碼沒有做異常處理)
- monkey避免wifi關閉婉宰,使用禁用系統(tǒng)通知欄,但是需要是root手機才行推穷,參考鏈接: http://www.cnblogs.com/bravesnail/p/4819659.html
- 前提:需要先手機先root心包,獲取到root權限,此方法可以隱藏狀態(tài)欄
全屏狀態(tài) adb shell settings put global policy_control immersive.full=*
恢復:adb shell settings put global policy_control null
- 至于音量鍵可以在執(zhí)行adb命令時候--pct-syskeys 0屏蔽掉
例如 adb shell monkey -p XXXX --pct-syskeys 0 1000
一些說明
- 想要monkey運行24小時馒铃,每100毫秒發(fā)送一個事件蟹腾。246060*1000/100=864000(次)
adb shell monkey -p *** -v -v -v --ignore-crashes --ignore-timeoutss --throttle 100 864000 >D:\monkey.log
表示:此次monkey將會運行24小時
存在的問題
monkey無法指定頁面,經常會點到外部的 App 無法回歸原測試 App区宇;或者點擊到注銷和退出娃殖,造成無法繼續(xù)后面的測試;
有人Demons(守護程序)是自主研發(fā)的一套獨立的手機應用監(jiān)聽的守護程序。主要作用是控制對指定頁面進行Monkey測試议谷。炉爆,待調研https://blog.csdn.net/liyu520131414/article/details/69357777
fastbot工具可指定activity白名單進行測試(待具體調研)
參考文檔
Maxim 也是一款自動遍歷工具,由國內的 zhangzhao 同學開發(fā),官方給出的定義是:
An efficient Android Monkey Tester, available for emulators and real devices 基于遍歷規(guī)則的高性能 Android Monkey芬首,適用于真機/模擬器的 APP UI 壓力測試赴捞。
我們來看看這款工具的優(yōu)缺點:
優(yōu)點:
- 基于Monkey二次開發(fā),運行速度非秤羯裕快
- 提供了多種遍歷算法以提高覆蓋度
- 提供了定制化功能赦政,可以實現流程控制
缺點:
- 因為是基于 Monkey,所以不具備跨平臺性艺晴,只能測試 Android昼钻,不能測試 iOS,Web 等封寞;
這是一款很優(yōu)秀的工具,可在一定程度上進行定制仅财,如果只測試 Android 系統(tǒng)的話狈究,可以考慮選用 Maxim 做穩(wěn)定性測試。