1. 程式人生 > >App穩定性測試Monkey

App穩定性測試Monkey

  

 

1.$ adb shell monkey <event-count>                <event-count>是隨機發送事件數

   例:adb shell monkeyn 1000   傳送1000個隨機事件

2.$ adb shell monkey [options] <event-count>    [options]是monkey可傳入的引數

   Monkey的option主要分為:常規類、事件類、約束類和除錯類4種

    2.1 常規類命令:

    adb shell monkey -v <event-count>

    -v:打印出日誌資訊,每個-v將增加反饋資訊的級別。-v越多日誌資訊越詳情,最多支援3個-v

 

    

    2.2 事件類命令:

    $ adb shell monkey -f <scriptfile> <event-count>

    -f:後接測試指令碼名,表示要使用monkey執行指定的monkey指令碼,

    如:$ adb shell monkey -f /mnt/sdcard/test01 3

    注:這裡的3是指迴圈次數,不是事件數

    如果希望重複執行之前的隨機操作,需要加-s命令,可指定隨機數生成器seed值

    $ adb shell monkey -s <seed> <event-count>

    -s:後接隨機數生成器的seed值,如果使用相同的seed值再次執行monkey,將生成相同的事件序列(也就是說,重複執行剛才的隨機操作)

    如: $ adb shell monkey -s 100 1000

    $ adb shell monkey --throttle <milliseconds> 

    --throttle:後面接時間,單位為ms,表示事件之間的固定延遲(即執行每一個指令間隔的時間),如果不接該項,monkey將不會延遲

    $ adb shell monkey --pct-touch <percent>

    --pct-touch:後面接觸控事件百分比,觸控事件泛指發生在某一位置的一個down-up事件,點選

    $ adb shell monkey --pct-montion <percent>

    --pct-motion:後面接動作事件百分比,動作事件泛指從某一位置接下(即down事件)後經過一系列偽隨機事件後彈出(即up事件)

   $ adb shell monkey --pct-trackball <percent>

   --pct-trackball:後面接軌跡事件百分比,軌跡事件包括一系列的隨機移動,以及偶爾跟隨在移動後面的點選事件

   $ adb shell monkey --pct-nav <percent>

   --pct-nav:後面接基本導航事件百分比,基本導航事件主要來自方向輸入裝置的上、下、左、右事件

   $ adb shell monkey --pct-majornav <percent>

   --pct-marjornav:後面接主要導航事件百分比,主要導航事件通常指引發圖形介面的一些動作,如鍵盤中間按鍵、返回按鍵、選單按鍵等

  $ adb shell monkey --pct-syskeys <percent>

   --pct-syskeys:後面接系統按鍵事件百分比,系統按鍵事件通常指僅供系統使用的保留按鍵,如HOME鍵、BACK鍵、撥號鍵、結束通話鍵、音量鍵等

  $ adb shell monkey --pct-appswtich <percent>

   --pct-appswitch:後面接應用啟動事件百分比,應用啟動事件(activity launches)即開啟應用,通過呼叫startActivity()方法最大限度地開啟該package下的所有應用

  $ adb shell monkey --pct-anyevent <percent>

  --pct-anyevent:後面接其他型別事件百分比,其他型別事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

  

   2.3約束類命令

   約束類命令可以讓隨機事件執行的範圍限制在某幾個包或類中。

   $ adb shell monkey -p <allowed-package-name>  <event-count>

   -p:後面接一個或多個包名,如果不指定任何包,monkey將允許系統啟動全部包裡的Activity。每個-p對應一個包,指定多個包時每個包名前都需要加上-p

   如:$ adb shell monkey -p com.agent.tao  1000       執行com.agent.tao 包裡的Activity併發送1000個隨機事件

   $ adb shell monkey -c <main-category>  <event-count>

   -c:後面接一個或多個類別名,monkey將只允許系統啟動這些類別中某個類別列出的Activity,如果不指定任何類別,monkey將選擇Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_monkey裡的Activity

   每個-c對應一個類別,指定多個類別時每個類別名前面都需要加上-c

   如:$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000

   執行Inter.CATEGORY_LAUNCHER類別的Activity併發送1000個隨機事件

   2.4除錯類命令

   通過除錯類命令可以對monkey進行簡單的除錯,這樣可以快速定位monkey執行中的問題

   $ adb shell monkey --dbg-no-events  <event-count>

   --dbg-no-events:設定此項後,monkey將進行初始啟動,進入到某個測試Activity中不會進一步生成事件,可以監視應用程式所呼叫的包之間的轉換,為了更好的跟蹤,一般該項

   會與-v(日誌)、-p<allowed-package-name> (包約束) 和 --throttle<milliseconds> (延遲)等聯合使用

   $ adb shell monkey --hprof  <event-count>

   --hprof:設定此項後,將在monkey事件序列前後立即生成profilfing report,將在data/misc中生成5MB左右大小的檔案

   $ adb shell monkey --ignore-crashes  <event-count>

   --ignore-crashes:設定此項後,當應用程式崩潰或發生失控異常時,monkey將繼續執行直到計數完成。如果不設定此項,monkey遇到上述崩潰或異常將停止執行。

   $ adb shell monkey --ignore-timeouts  <event-count>

   --ignore-timeouts:設定此項後,當應用程式發生任何超時錯誤(如ANR,即Application Not Responding)時,monkey將繼續執行直到計數完成。如果不設定此項,monkey

   遇到此類超時將停止執行

   $ adb shell monkey --kill-process-after-error  <event-count>

   --kill-process-after-error:設定此項後,當monkey因為應用程式發生錯誤而停止時,將會通知系統停止發生錯誤的程序。如果不設定此項,monkey停止時發生錯誤的應用程度將

   繼續處於執行狀態。

   $ adb shell monkey --ignore-security-exceptions <event-count>

   --ignore-security-exceptions:設定此項後,當應用程式發生任何許可權錯誤(如啟動一個需要某些許可權的Activity)時,monkey將繼續執行直到計數完成。如果不設定此項,

  monkey遇到此類許可權錯誤將停止執行。

   $ adb shell monkey --monitor-native-crashes  <event-count>

   --monitor-native-crashes:設定此項後,monkey執行時native code的崩潰事件將被監視並報告。如果不設定此選項,將不會監視此類事件。

   $ adb shell monkey --wait-dbg  <event-count>

   --wait-dbg:在設定此項後,將暫停執行中的monkey,直到有偵錯程式與它連線。

結果檢查與分析

測試結束後,需要將手機連線PC,拷貝以下檔案:

  • info.txt:此檔案在手機上的SDCARD中,主要記錄了MONKEY測試時傳送的各種事件,如觸控事件的位置等等。
  • error.txt:此檔案在手機上的SDCARD中,主要記錄了MONKEY測試時產生的一些ANR、強制關閉等異常。
  • LOG檔案:此檔案在手機上的LOG資料夾中中,主要主要記錄程式對MONKEY測試時的響應情況。

我們需要對這3個檔案進行分析整理,以便提交開發人員處理。

檢查測試是否完成

通過info.txt檔案,可以檢視Monkey是否執行成功。如下圖

結果分析整理

我們目前執行Monkey測試的目的是為了檢查是否有記憶體洩露,而這類問題主要是通過Log檔案來體現的。

Error檔案也記錄了部分異常,考慮到這部分檔案格式已經很規範,因此不需要再次整理。

Log檔案記錄了所有資訊,因此我們需要進行初步分析整理後再提交研發,以減少研發工作量。

Monkey測試後在Mobilelog檔案中會產生多個main_log檔案,裡面含有詳細的log執行記錄。通過main_log檔案,我們可以檢視可能存在記憶體洩露程式碼所在具體位置。是否該行程式碼存在洩露需要開發人員進一步驗證。我們只提供可能存在程式碼洩露的資訊。

含有mian_log的檔案都需要進行檢視。搜尋關鍵字“leak”,在搜尋結果中,檢視與Ideafreiend相關的程式碼。如下圖:

 

注:com.lenovo.ideafriend:Ideafriend包名;CursorLeakDetecter: 遊標洩露檢查器

 

1. 程式無響應的問題: 在日誌中搜索 “ANR”
2. 崩潰問題:在日誌中搜索 “Exception”   (如果出現空指標, NullPointerException)  肯定是有bug