monkey 是什麼
monkey 是一款通過命令列來對我們APP進行測試的工具,可以執行在模擬器裡或真機上。它向系統傳送偽隨機的使用者事件流,實現對正應用程式進行壓力測試。
偽隨機是個什麼?是因為該隨機事件可進行復現(定位可能出現的問題)。我們每次執行一組隨機事件,系統都會給一個隨機的ID,稱之為seed。若我們想將該組隨機事件再次執行一遍,則使用-s+seed+count即可。
那麼monkey的使用場景是哪些呢?
monkey 測試是 Android 平臺自動化測試的一種手段,通過 monkey 程式模擬使用者觸控式螢幕幕、滑動 Trackball、按鍵等操作來對裝置上的程式進行壓力測試,檢測程式多久會發生異常。(當然也可以做自動化測試)開發人員結合 monkey 列印的日誌 和系統列印的日誌,修改測試中出現的問題 。
那什麼時候進行壓力測試呢?等產品穩定,沒有太多的bug 的時候,一般會用 monkey 去測試待測應用的穩定性,健壯性(是否會發生閃退,崩潰,無響應)和整機測試
1、確保電腦已安裝adb直接下載adb 安裝包,把相關檔案放到 c:/windows/system32 目錄和 c:/windows/system 目錄下,完成安裝
2、jdk環境已配好(沒配好自己配吧,自己配不好請移駕https://www.baidu.com/s?ie=utf-8&wd=jdk%E7%8E%AF%E5%A2%83%E6%90%AD%E9%85%8D)
為什麼要配置jdk
1) Monkey程式由Android系統自帶,使用Java語言寫成,在Android檔案系統中的存放路徑是:/system/framework/monkey.jar;
2) Monkey.jar程式是由一個名為“monkey”的Shell指令碼來啟動執行,shell指令碼在Android檔案系統中的存放路徑是:/system/bin/monkey;這樣就可以通過在CMD視窗中執行:adb shell monkey {+命令引數}來進行Monkey測試了。
3、(安裝模擬器/真機)手機已經開啟開發者模式以及USB除錯狀態
4、 把手機鎖屏設定為從不
重要的命令引數都有什麼
1)引數: -p
引數-p用於約束限制,用此引數指定一個或多個包(Package,即App)。指定包之後,monkey將只允許系統啟動指定的APP。如果不指定包,monkey將允許系統啟動裝置中的所有APP。
指定一個包:
adb shell monkey -p com.kaiyuan.developmentbusiness 100
說明:com.kaiyuan.developmentbusiness 為包名,100是事件計數(即讓monkey程式模擬 100 次隨機使用者事件)。
指定多個包:
adb shell monkey -p com.qywlandroid –p com.kaiyuan.developmentbusiness 100
不指定包:
adb shell monkey 100
說明:monkey 隨機啟動APP併發送100個隨機事件。
2) 引數: -v 日誌詳細程度
用於指定反饋資訊級別(資訊級別就是日誌的詳細程度),總共分3個級別,分別對應的引數如下表所示:
日誌級別 Level0
adb shellmonkey -p com.kaiyuan.developmentbusiness –v 100
說明預設值,僅提供啟動提示,測試完成和最終結果等少量資訊
日誌級別 Level 1
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v 100 說明提供較為詳細的日誌,包括每個傳送到Activity的事件資訊
日誌級別 Level 2
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v –v 100 說明最詳細的日誌,包括了測試中選中/未選中的Activity資訊
3)引數:-s
用於指定偽隨機數生成器的 seed 值,如果 seed 相同,則兩次 monkey 測試所產生的事件序列也相同的。
monkey 測試1:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
monkey 測試2:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
兩次測試的效果是相同的,因為模擬的使用者操作序列(每次操作按照一定的先後順序所組成的一系列操作,即一個序列)是一樣的。操作序列雖然是隨機生成的,但是隻要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以這個操作序列偽隨機的;
4) 引數:--throttle <毫秒>
用於指定使用者操作(即事件)間的時延,單位是毫秒;
adb shell monkey -p com.qywlandroid –throttle 3000 100
5) 引數: --ignore-crashes
用於指定當應用程式崩潰時(Force& Close錯誤),monkey是否停止執行。如果使用此引數,即使應用程式崩潰,Monkey依然會發送事件,直到事件計數完成。
adb shellmonkey -p com.qywlandroid --ignore-crashes 1000
測試過程中即使Weather程式崩潰,Monkey依然會繼續傳送事件直到事件數目達到1000為止;
adb shellmonkey -p com.qywlandroid 1000
測試過程中,如果Weather程式崩潰,Monkey將會停止執行。
我這裡用的pycharmIDE,寫完之後直接建個 .bat放裡面就好了,比如
請看我的目錄
裡面的bugreport_book檔案是最後生成的,他從哪裡來的呢?
這個時候就該講一哈我們偉大的外掛ChkBugReportChkBugRepor t是一個開源工具,它可以把你得到的bugreprot.t解析成適合閱讀的 html 檔案。匯出的html檔案包含了根據 bugreport.txt 資料得出的圖表和分析結論。
1、如果這個執行緒死鎖,在報告的Errors將會出現。
2、***.logs 這部分是對system、main和kernel日誌的分析,在這裡你可以看到每個程序記憶體使用圖、那個程式產生的log最多、Activity的啟動耗時、資料庫操作耗時統計、物件被鎖定- - 時間、AIDL呼叫時間、Activity和Service的生命週期及其在記憶體中使用頻率等等
3、Processes 操作app過程中產生的系統事件日誌、記憶體使用資訊等等
4、Battery statistics 電池使用統計
5、CPU Frequency statistics CPU頻率統計
6、Raw data 一些原始資料
https://github.com/Chan-pipi/Chan-pipi
首先新增.config檔案,新增內容為
然後建立runmonkey.py檔案,主要函式為
1. 引用.config,不然你寫它幹啥用
不支援該協議取消重新上傳
2. 安裝安裝包
3.執行monkey命令
4. 建立bugreport.txt報告,並生成html檔案
5. 完成