Android Monkey 壓力測試(一)

   Monkey 是Android SDK提供的一個命令行工具, 可以簡單,方便地運行在任何版本的Android模擬器和實體設備上。 Monkey會發送僞隨機的用戶事件流,如:模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作,適合對app做壓力測試,檢測程序多久的時間會發生異常,所有的事件都是隨機產生的,不帶任何人的主觀性。

目錄

一、環境搭建

二、Monkey簡介

三、Monkey 架構

四、Monkey 參數大全

 五、Monkey 實例

六、Monkey 日誌分析

七、殺monkey進程

八、必須重視Crash


一、環境搭建

  1. 安裝 Android SDK 並配置環境變量

  2. 手機通過usb連接電腦,自動安裝usb驅動,連接成功

  3. 驗證adb命令能否運行

  pc端進入cmd命令行---進入C:\tmg目錄下--運行adb shell,出現$符號證明adb命令運行成功,進入shell模式

    https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTUwNjAxMTYyNDI4MDgw?x-oss-process=image/format,png

  4. 手機設置

      手機屏幕超時設置爲從不關閉,防止手機進入鎖屏狀態。

       如:進入設置-顯示--屏幕待機--設置爲從不關閉

二、Monkey簡介

(1) Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑       是: /system/framework/monkey.jar;   
(2) Monkey.jar程序是由一個名爲“monkey”的Shell腳本來啓動執行,shell腳本在Android文件系統中 的存放路徑  是:/system/bin/monkey;  
(3)Monkey 命令啓動方式:    
          a)可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試 (常用的一種方法)

          b)在PC上adb shell 進入Android系統,通過執行 monkey {+命令參數} 來進行Monkey 測試          

          c )  在Android機或者模擬器上直接執行monkey 命令,可以在Android機上安裝Android終端模擬器

三、Monkey 架構

Monkey 運行在設備或模擬器上面,可以脫離PC運行(普遍做法是將monkey作爲一個像待測應用發送 隨機按鍵消息的測試工具。驗證待測應用在這些隨機性的輸入面前是否會閃退或者崩潰) 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvMjYzMTE5LzIwMTYwNS8yNjMxMTktMjAxNjA1MDUyMjM5NDQ0ODItMTUxNjM4OTI2Ni5wbmc?x-oss-process=image/format,png

四、Monkey 參數大全

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvMjYzMTE5LzIwMTYwNS8yNjMxMTktMjAxNjA1MDUyMzAxMjMxNTQtMTA3MTQ4MDgzNy5wbmc?x-oss-process=image/format,png ​ 

基本參數:

-p <允許的包名列表>         

用此參數指定一個或多個包。指定包之後,monkey將只允許系統啓動指定的app。如果丌指定包, monkey將允許系統啓動設備中的所有app。  

指定一個包:adb shell monkey -p com.shjt.map 100   

指定多個包:adb shell monkey -p fishjoy.control.menu  –p com.shjt.map  100  

-v        

用亍指定反饋信息級別(信息級別就是日誌的詳細程度),總共分3個級別,分別對應的參數如下 表所示: 

Level 0  :  adb shell monkey -p com.shjt.map -v 100               // 缺省值,僅提供啓動提示、測試完成和最終結果等少量信息   

Level 1  :  adb shell monkey -p com.shjt.map -v  -v 100          // 提供較爲詳細的日誌,包括每個發送到Activity的事件信息

Level 2  :  adb shell monkey -p com.shjt.map -v  -v  -v 100     // 最詳細的日誌,包括了測試中選中/未選中的Activity信息

-s(隨機數種子)            

用亍指定僞隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。  示例:

monkey測試1:adb shell monkey -p com.shjt.map –s 10 100                

monkey測試2:adb shell monkey -p com.shjt.map –s 10 100  


--throttle <毫秒>            

用亍指定用戶操作(即事件)間的時延,單位是毫秒;如果丌指定這個參數,monkey會盡可能快的 生成和發送消息。 示

例:adb shell monkey -p com.shjt.map --throttle 3000 100   

--ignore-crashes --ignore-timeouts

--ignore-crashes --ignore-timeouts 這裏是在monkey測試的過程中遇到carash或者timeout的情況時忽略掉,一般不設置時,出現carash或者timeout時,Monkey測試會終止。這裏是防止Monkey測試終止。

 五、Monkey 實例

adb shell monkey -p 包名 -v 運行次數

例一:adb shell monkey –p com.huanxi.video –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >c:\monkey.txt

例二: monkey  -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &

    2>&1 固定的寫法,這個也很重要,代表的意思是中間忽略的東東的日誌一併輸入到指定的文件中。

    最後單獨的一個"&" 是一旦Monkey測試開始了,之後可以拔掉數據線,不會影響Monkey測試。

六、Monkey 日誌分析

1.正常情況,  如果Monkey測試順利執行完成, 在log的最後, 會打印出當前執行事件的次數和所花費的時間; // Monkey finished 代表執行完成

2.異常情況

     Monkey 測試出現錯誤後,一般的分析步驟
     看Monkey的日誌 (注意第一個swith以及異常信息等)
       1. 程序無響應的問題: 在日誌中搜索 “ANR”
       2. 崩潰問題:在日誌中搜索 “Exception”   (如果出現空指針, NullPointerException)  肯定是有bug

Monkey 執行中斷, 在log最後也能看到當前執行次數

3. 重現bug:monkey日誌搜索關鍵詞ANR exception,將之前的事件重新操作,尤其是seed值要一模一樣,如monkey -p 包名 -v seed 0 500

在log的最開始都會顯示Monkey執行的seed值、執行次數和測試的包名。

首先我們需要查看Monkey測試中是否出現了ANR或者異常,無響應問題(ANR問題):在日誌中搜索“ANR ”(此處有空格), 崩潰問題:在日誌中搜索“Exception”,快速定位到關鍵事件信息 。然後查看Monkey裏面出錯前的一些事件動作,並手動執行該動作,找出重現步驟,給開發。

4.分析

無響應問題搜索”ANR”
奔潰問題搜索”CRASH”
內存泄漏問題搜索”GC”,並進一步分析
異常問題搜索”Exception”,如出現NullpointerException,則出現空指針,需要重視
有這類的情況再進行具體分析

https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTUwNjAzMTAwNjAxOTUw?x-oss-process=image/format,png

七、殺monkey進程

  如果想中斷運行中的monkey CTRL+C

  adb shell ps | grep monkey  返回進程號

  adb shell kill [剛纔查到的進程號]

八、必須重視Crash

   雖然Monkey測試有部分缺陷,我們無法準確地得知重現步驟, Monkey測試所出現的NullPointException,  都是可以在用戶使用時出現的, 何時出現只是時間問題理論上來說,  Monkey所有的Crash 都需要在發佈前修復掉

九、獲取包名

adb shell pm list package -f #顯示所有apk包名包括系統

adb shell dumpsys window w | findstr \/ | findstr name= #會顯示正打開的程序

Monkey 深入參考:
詳細教程一
詳細教程二

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章