https://www.cnblogs.com/yangzixuan/p/10962823.html
一、 Monkey測試工具簡介
是Android \ SDK 中附帶的一個工具 Monkey測試的原理:利用socket通訊(Android客戶端和服務器以TCP/UDP方式)的方式來模擬用戶的按鍵輸入、觸摸屏輸入、手勢輸入等 Monkey測試的目的:該工具可進行壓力測試,更多的是一種隨機測試和穩定性測試;開發人員可以結合Monkey打印的日誌和系統打印的日誌來分析測試的結果
二、 Monkey的特徵
1、 測試的對象僅爲應用程序包,有一定的侷限性。
2、 Monkey測試使用的事件流數據流是隨機的,不能進行自定義。
3、 可對MonkeyTest的對象、事件數量、類型、頻率等進行設置
三、 關於Monkey測試的停止條件
Monkey Test執行過程中在下列三種情況下會自動停止:
1、如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。
2、如果應用程序崩潰或接收到任何失控異常,Monkey將停止並報錯。
3、如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止並報錯。
四、Monkey的命令
Monkey可分四大類:常用選項、事件選項、約束選項、調試選項
1、常用選項 -help : 打印幫助信息 monkey命令的簡單幫助:adb shell monkey -help -v :用於指定反饋信息級別(信息級別就是日誌的詳細程度),總共分3個級別 日誌級別 Level 0 示例:adb shell monkey -p com.htc.Weather -v 100 日誌級別 Level 1 示例:adb shell monkey -p com.htc.Weather -v -v 100 日誌級別 Level 2 示例:adb shell monkey -p com.htc.Weather -v -v -v 100
2、事件選項 -s : 用於指定僞隨機數生成器的seed(種子)值,如果seed相同,則兩次monkey測試所產生的事件序列也相同 示例:adb shell monkey -p com.htc.Weather -s 10 100 --throttle:每個事件結束後的間隔時間——降低系統的壓力(如不指定,系統會盡快的發送事件序列) 如:--throttle 100 --pct-touch:指定觸摸事件的百分比,如:--pct-touch 5% , 相關的還有以下option: --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、約束選項-c: activity必須至少包含一個指定的category,才能被啓動,否則啓動不了 -p: 用於約束限制,用此參數指定一個或多個包 如:指定一個包:adb shell monkey -p com.example.sellclientapp 100 指定多個包:adb shell monkey -p com.htc.Weather -p com.htc.pdfreader 100 說明:com.example.sellclientapp爲包名,100是事件計數(即讓monkey程序模擬100次隨機用戶事件) 要查看設備中所有的包,在CMD窗口中執行以下命令:
4、調試選項 --dbg-no-events:初始化啓動的activity,但是不產生任何事件。 --hprof:指定該項後在事件序列發送前後會立即生成分析報告 —— 一般建議指定該項。 --ignore-crashes:忽略崩潰 --ignore-timeouts:忽略超時 --ignore-security-exceptions:忽略安全異常 --kill-process-after-error:發生錯誤後直接殺掉進程 --monitor-native-crashes:跟蹤本地方法的崩潰問題 --wait-dbg:直到連接了調試器才執行monkey測試
五、Monkey測試實例
1、前提條件:啓動一個 Android 的模擬器 打開DOS窗口,在命令行使用adb devices查看設備是否連接?
2、查看模擬器data/data文件夾的應用程序包,此目錄下的應用程序包,我們都可以使用monkey進行測試,如下所示
3、可以選擇一個應用程序包作爲測試對象,如我們選擇com.android.camera 相機應用作爲測試對象
4、使用monkey 命令執行測試 monkey -p com.android.camera -v 50 其中-p 表示對象包,-v 表示反饋信息的級別,50 表示事件數量。
5、在運行中,輸入運行代碼: monkey --pct-nav 100 -v 500 -p com.android.alarmclock 其中–pct-nav 100 表示全部產生基本按鍵事件,-p 表示對象包,-v 表示反饋信息的級別,500 表示事件數量,執行部分結果,注意 pct-nav 前面是兩個“-”,如下圖所
C:\Documents and Settings\9158.feng>adb shell monkey -p com.a.a -s 500 --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 50000 >C:\log.txt 指令的含義:測試的應用程序爲com.a.a,事件間的延時爲500毫秒,三個 -v 表示輸出的MonkeyLog的級別爲最高,即輸出最詳盡的Monkey Log,測試的事件次數爲50000次 ,Log保存在C盤的log.txt
代碼解析:
例如:adb shell monkey -p com.xy.android.junit -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\java_monkey_log.txt 說明:monkey作用的包:com.xy.android.junit 產生時間序列的種子值:500 忽略程序崩潰 、 忽略超時 、 監視本地程序崩潰、詳細信息級別爲2 , 產生 10000個事件 所產生的日誌保存在:E:\monkey_log\java_monkey_log.txt
注:測試產生了日誌,最重要的是要學會分析日誌 在log中搜索4種關鍵字加以分析: 1、crash 閃退 2、exception 異常 3、force closed 強制退出 4、anr(application no response) 程序無響應
六,使用心得
Monkey直接翻譯就是猴子的意識,他的作用和原理也如同猴子一樣,有一個猴子在電腦前隨便的點擊滑動我們的安卓應用程序,直到他出現錯誤展示出來,這樣的測試對於程序的健壯性有一個很好的模擬測試,也對程序員的工作量大大減少,他的操作也十分方便,對於我們以後的應用程序類的測試,操作按鈕以及屏幕的交互可謂是十分重要的,也是直接影響到用戶的第一使用體驗從而影響了軟件帶個使用者的整體使用效果,所以monkey軟件測試軟件是一個很好的模擬測試軟件的工具。