1. 程式人生 > >monkey 命令詳解

monkey 命令詳解

運行 ror 好的 包名 mar 將在 pro 返回 約束

monkey命令詳解

技術分享圖片

技術分享圖片

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

例:adb shell monkey 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個文件進行分析整理,以便提交開發人員處理。

(1)檢查測試是否完成

通過info.txt文件,可以查看Monkey是否執行成功。如下圖

技術分享圖片

(2)結果分析整理

我們目前執行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

monkey 命令詳解