Android穩定性測試利器Monkey使用詳解

1.簡介

Monkey是Android系統自帶的一款穩定性測試小工具,簡單易用

2.環境搭建

(1)下載Android SDK
(2)將Android SDK目錄下的platform-tools和tools目錄配置到系統環境變量Path中
(3)打開cmd窗口,輸入adb命令,查看環境是否配置成功,如下圖所示,則環境配置成功

image.png

3.Monkey啟動

(1)最簡單的例子:命令行中輸入 adb shell monkey 1000后,你會發現手機(或者虛擬機)自動運行起來了,命令行也會輸出相關的日志。

image.png

(2)標準的Monkey命令:monkey [options] <count>
其中options表示Monkey執行可配置的參數,是可選項,如果不指定options,Monkey將以無反饋模式啟動,并把事件任意發送到安裝在目標環境中的全部包,count表Monkey執行的事件數,必須設置
(3)options的類型及其使用
下面將Monkey的Options操作分為四類:常規類,事件類,約束類和調試類。

常規類命令 使用 詳解
-h adb shell monkey -h 顯示monkey參數幫助信息
-v adb shell monkey -v -v -v<event-count> 打印出日志信息,每個-v將增加反饋信息的級別,-v越多日志信息越詳細:0級,除啟動提示、測試完成和最終結果提供較少信息。1級,提供較詳細調試信息,比如逐個發送到Activity的事件。2級,提供更詳細安裝信息,如測試中被選中或未被選中的Activity
事件類命令 使用 詳解
-f adb shell monkey -f<測試腳本名><event-count> 表示要使用Monkey運行指定的腳本
-s adb shell monkey -s<seed><event-count> 指定隨機數生成器seed值,如果用相同的seed值再次運行moneky,將重復執行剛才的隨機操作
--throttle adb shell monkey --throttle<時間間隔> 表示每執行一個指令間隔的時間,單位ms,注意是-“--”開頭
--pct-touch adb shell monkey --pct-touch<percent> 表示觸摸事件百分比
--pct-motion adb shell monkey --pct-motion<percent> 表示動作事件百分比
--pct-trackball adb shell monkey --pct-trackball<percent> 表示軌跡球事件百分比
--pct-nav adb shell monkey --pct-nav<percent> 表示基本導航事件百分比
--pct-majornav adb shell monkey --pct-majornav<percent> 表示主要導航事件百分比
--pct-syskeys adb shell monkey --pct-syskeys<percent> 表示系統按鍵事件百分比
--pct-appswitch adb shell monkey --pct-appswitch<percent> 表示應用啟動事件百分比
約束類命令 使用 詳解
-p adb shell monkey -p<一個或者多個包名><event-count> 指定測試一個或者多個包
-c adb shell monkey -c<一個或者多個類別><event-count> 指定測試一個或者多個類別(即<main-category>參數)
調試類命令 使用 詳解
--dbg-no-events adb shell monkey --dbg-no-events<event-count> 監視應用程序所調用的包之間的轉換
--hprof adb shell monkey --hprof <event-count> 在事件序列前后立即生成profiling report,在data/misc中生成5MB大小左右的文件
--ignore-crashes adb shell monkey --ignore-crashes<event-count> 設置后,當應用程序崩潰或者發生異常的時候,Monkey將繼續運行直到計數完成,而不會停止運行
--ignore-timeouts adb shell monkey --ignore-timeouts<event-count> 設置后,當應用程序發生任何超時錯誤(比如ANR),Monkey將繼續運行直到計數完成,而不會停止運行
--ignore-security-exceptions adb shell monkey --ignore-security-exceptions<event-count> 設置后,當應用程序發生任何相關權限錯誤的時候,Monkey將繼續運行直到計數完成,而不會停止運行
--monitor-native-crashes adb shell monkey--monitor-native-crashes<event-count> 設置后,monkey會監視并報告Android系統的native code的崩潰事件

(4)Moneky腳本的編寫

事件 使用 詳解
點擊事件 DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags) 其實這么多參數,只需要關注action 、 x 、y 三個參數即可。action :事件是按下還是抬起,0 表示按下,1 表示抬起。x、y:表示當前事件觸發的X軸和Y軸的坐標
輸入字符串事件 DispatchString(String text) 輸入一個不加引號的字符串
啟動應用 LaunchActivity ( pkg_name , act_name ) 用于打開任意應用的一個頁面,但是前提條件是打開的Activity 需要屬性 android:exported 被設定為true,才可以通過 LaunchActivity 打開
等待事件 UserWait(long sleeptime) 操作需要等待的事件,單位為毫秒
按下鍵值 DispatchPress(int keycode) 用于模擬敲擊鍵盤的事件
長按鍵值 LongPress(int keycode) 用于模擬敲擊鍵盤的事件

(5)準確地獲取控件坐標
方法一:
因為Monkey是基于坐標來操作控件的,所以必須準確地獲取控件坐標才能進行正確測試。這里就需要getevent。在命令行上輸入adb shell getevent后,然后點擊手機界面,會獲得所點擊的位置的十六進制坐標。

image.png

比如上圖,我點擊點一個文本框后輸入的一系列數據(看起來好亂和復雜),每一行的三個數據分別代表type,code,value(具體的含義自己百度一下,這里就不多解釋),然后其實我們只需要關注的是code為0035和0036這兩行的數據,分別代表觸屏時的絕對坐標X和Y,然后將它們轉為十進制的坐標就可以了,就這樣我們得到了控件的x和y坐標。

方法二:我推薦另外一種更簡單的方式,來獲取當前你看見的,在待測試設備上的控件的坐標點的定位方式。那就是利用 Android 設備的開發者選項。設置 → 開發者選項 → 指針位置 ,將這個屬性開啟之后,當手指在屏幕上滑動的時候,就可以在頂部看到當前觸摸點的 X、Y 軸的坐標,這就是我們需要的。

Paste_Image.png

(6)Monkey日志分析

  • 正常情況: 如果Monkey測試順利執行完成, 在log的最后, 會打印出當前執行事件的次數和所花費的時間; // Monkey finished 代表執行完成\
  • 異常情況:Monkey 測試出現錯誤后,一般的分析步驟:
    1.程序無響應的問題: 在日志中搜索 “ANR”
    2.崩潰問題:在日志中搜索 “Exception” (如果出現空指針, NullPointerException) 肯定是有bug

4.Monkey簡單實戰

下面我們寫一個簡單的Monkey腳本進行測試:就是兩個Activity頁面,第一個頁面輸入EditText,然后第二個頁面顯示第一個頁面的信息。(相信這部分代碼對各位大佬來說很簡單,就不粘貼出來了)

image.png
image.png

思路:

(1)選中文本框1
captureDispatchPointer(10,10,0,308,215,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,308,215,1,1,-1,1,1,0,0)
(2)往文本框1中輸入內容
captureDispatchString(111)
captureDispatchPress(66)
(3)選中文本框2
captureDispatchPointer(10,10,0,197,295,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,197,295,1,1,-1,1,1,0,0)
(4)往文本框2中輸入內容
captureDispatchString(222)
captureDispatchPress(66)
(5)點擊提交按鈕
UserWait(500)
captureDispatchPointer(10,10,0,264,403,1,1,-1,1,1,0,0);
captureDispatchPointer(10,10,1,264,403,1,1,-1,1,1,0,0);
(6)全部代碼

Paste_Image.png

(7)運行腳本,比如下面指定執行腳本10次,輸出相關日志信息

Paste_Image.png

5.Monkey總結

優點:功能強大, 主要用于壓力和穩定性測試
缺點:本身不提供截屏功能,本身無法完成錄制、回放的功能(不過都可以借用其他的開源工具來實現Monkey的截屏和錄制等功能)
不支持條件判斷,不支持讀取待測界面的信息來執行驗證操作

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容