使用 Monkey+python 做一個簡單的自動化測試

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 目錄下,完成安裝

使用 Monkey+python 做一個簡單的自動化測試

2、jdk環境已配好(沒配好自己配吧,自己配不好請移駕https://www.baidu.com/s?ie=utf-8&wd=jdk%E7%8E%AF%E5%A2%83%E6%90%AD%E9%85%8D)

使用 Monkey+python 做一個簡單的自動化測試

為什麼要配置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放裡面就好了,比如


使用 Monkey+python 做一個簡單的自動化測試

請看我的目錄

使用 Monkey+python 做一個簡單的自動化測試

裡面的bugreport_book文件是最後生成的,他從哪裡來的呢?

這個時候就該講一哈我們偉大的插件ChkBugReportChkBugRepor t是一個開源工具,它可以把你得到的bugreprot.t解析成適合閱讀的 html 文件。導出的html文件包含了根據 bugreport.txt 數據得出的圖表和分析結論。

使用 Monkey+python 做一個簡單的自動化測試

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文件,添加內容為

使用 Monkey+python 做一個簡單的自動化測試

然後創建runmonkey.py文件,主要函數為

1. 引用.config,不然你寫它幹啥用

使用 Monkey+python 做一個簡單的自動化測試


不支持該協議取消重新上傳


2. 安裝安裝包


使用 Monkey+python 做一個簡單的自動化測試


3.執行monkey命令


使用 Monkey+python 做一個簡單的自動化測試

4. 創建bugreport.txt報告,並生成html文件


使用 Monkey+python 做一個簡單的自動化測試

5. 完成


使用 Monkey+python 做一個簡單的自動化測試



分享到:


相關文章: