adb shell monkey進行壓力測試


一、Monkey壓力測試的原理

  1. adb shell monkey的運行機制

       實際上是執行手機中/system/bin/monkey這個腳本;

   2. Monkey事件注入機制

         Monkey注入系統事件是通過 framework 層的 hidenApi (如:activemanager,inputmanager,windowmanager) 獲取系統服務。

         Monkey中有11種事件,這些事件在MonkeyEventSource中對事件之間的比例進行設置。Monkey事件根據類型比例生成事件隊列,循環查找事件。

         a.觸摸事件(inputmanager):包括屏幕以及物理鍵的觸摸,滑動,點擊事件。

         b.Activity事件(activemanager):是指我們調用Android系統組件的事件。

         c.Window事件(windowmanager):是指操作Window的事件,例如轉屏。

    3.Monkey核心類

         a. Monkey.java, 程序的入口,根據參數選擇合適的MonkeyEventSource,並適時觸發MonkeyEvent;

         b. MonkeyEventSource.java, MonkeyEvent的工廠,是一個接口;

         c. MonkeyEvent.java,各種事件的具體實現。

 

二、查找手機上的安裝包包名

1.adb shell pm list package    查看手機上所有的安裝包

2.adb shell pm list package -3    查看第三方安裝包

 

3.adb shell pm list packages -s     查看系統的包

4.adb shell pm list packages -e “要搜索的內容”     查看啟動包中搜索的包

 5.adb shell dumpsys window | findstr mCurrentFocus   獲取當前打開的APP包名(前面的為包名,斜杠后面的是當前啟動的acivity)

 

 

 

三、Monkey 命令 基本參數的介紹

        注意:所有的參數都需要放在monkey和設置的次數之間,參數的順序可以調整;若帶了-p ,-p必須放在monkey之后,參數必須在-p和count之間:

        adb shell monkey -p 包名 --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v –s 1540475754297 100

 

1.-p ,此命令用於指定包,若不指定則在整個系統中執行

           a.指定一個包執行10次:adb shell monkey -p 包名 10    ,如下出現事件執行次數和所耗時間,則算是執行成功;

                 

             b.指定多個包執行10次:adb shell monkey -p 包名  –p 包名  10,

             

 

2.-v ,用於反饋日志的詳細程度級別

           Level 0  :  adb shell monkey -p 包名 -v 10               // 默認級別,僅提供啟動、測試完成和最終結果等少量信息   

           Level 1  :  adb shell monkey -p 包名 -v  -v 10          // 提供較為詳細的日志,包括每個發送到Activity的事件信息

           Level 2  :  adb shell monkey -p 包名 -v  -v  -v 10     // 提供最詳細的日志,包括了測試中選中/未選中的Activity信息

 

3.-s ,用於指定偽隨機數生成器的seed值  

          命令:adb shell monkey -p 包名 –s seed值 執行次數

          如果seed值相同,則兩次Monkey測試所產生的事件序列也相同的,示例:

            測試1:adb shell monkey -p com.kugou.android –s 1540475754297 100                

            測試2:adb shell monkey -p com.kugou.android –s 1540475754297 100  

4.--throttle ,用於指定用戶事件的操作間隔時延,單位是毫秒

            如果不指定這個參數,monkey會盡可能快的生成和發送消息

            命令:adb shell monkey -p 包名 --throttle 3000 100 

 

5.--ignore-timeouts ,忽略超時錯誤

6.--ignore-crashes ,忽略crash

7.--ignore-security-exceptions  忽略許可錯誤

8.--monitor-native-crashes,用於指定是否監視並報告應用程序發生崩潰的本地代碼

9.--pct-touch ,觸摸事件

        命令:adb shell monkey -p 包名 -v -v -v --pct-touch 100 20   //執行20次100%都為觸摸事件

        這里觸摸事件為100%,則沒有其他事件

        

 10.指定日志存放目錄:

      a、存放在電腦上(如下指定為D目錄下命名為AAlog.txt,為了方便查找,然后就去電腦上該目錄下查找,當設置路徑后,日志將不會在命令行窗口上顯示出來)

         adb shell monkey -p 包名 -v -v -v 200>D:AAlog.txt

          

         b、存放在手機上(可以斷開電腦)

           1、進入Android系統

                adb shell

           2、執行Monkey命令
                 monkey -p com.kugou.android --pct-touch 25 -v -v 200 1>/mnt/sdcard/monkey.txt 2>/mnt/sdcard/error.txt &
         

                0 :標准輸入

                1 :標准輸出

                2 :標准錯誤輸出
                &:后台運行
                >: 重定向,會覆蓋原來文件里的內容
             >>: 重定向,追加到原來文件末尾

 

四、日志分析

1、查找出差步驟:

         a、找到monkey里哪個地方出錯

                 查看Monkey執行的是哪一個Activity,在switch后面找,兩個swtich之間如果出現了崩潰或其他異常,可以在該Activity中查找問題的所在。

                 

            b、查看Monkey里面出錯前的一些事件動作,手動執行該動作

                Sleeping for XX milliseconds這是執行Monkey測試時,throttle設定的間隔時間,每出現一次,就代表一個事件,

                Sending XX 就是代表一個操作,如下圖的兩個操作 應該就是一個點擊事件。

               

             c、若以上步驟還不能找出,則可以使用之前一樣的seek再執行monkey命令一遍,便於復現

2、測試結果分析:

           a、程序無響應,ANR問題:在日志中搜索“ANR”

           b、崩潰問題:在日志中搜索“CRASH”

           c、其他問題:在日志中搜索”Exception”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM