Android自動化測試基礎知識——Monkey

目錄

 

Monkey測試

1. monkey 有兩種啓動方式:

2 . monkey 的命令及其使用

2.1 monkey 的常規類命令

2.2 monkey 的事件類命令

2.3 monkey 的約束類命令

2.4 monkey 調試類命令

2.5 官方隱藏類參數

3. monkey 腳本編寫

3.2 monkey 腳本編寫

4.1 monkey 日誌的保存方法

4.2 monkey 日誌內容解析

4.3 monkey server 的使用----隱藏api

4.4Money 腳本生成工具


Monkey測試

1. monkey 有兩種啓動方式:

第一種方式:shell 端啓動

  1. 進入 adb shell
  2. 運行 "/system/bin" 路徑下的 monkey腳本
$ adb shell
# cd /system/bin
# monkey

第二種方式:直接 pc 啓動

直接通過以下的命令運行:

$ adb shell monkey [options] <event-count>

2 . monkey 的命令及其使用

monkey 的 option 操作都是根據具體的需求設定的,主要分爲五類,分別爲:

 常規類、事件類、約束類、調試類和官方隱藏類參數

2.1 monkey 的常規類命令

  1. -h: 顯示 monkey 參數幫助信息 usage
  2. -v: 打印出日誌信息,每個 -v 將增加反饋信息的級別。命令格式爲:
$ adb shell monkey -v <event-count>

-v 越多日誌信息月詳細,不過目前最多支持 3 個 -v,即:
* 0級: 除啓動提示、測試完成和最終結果外提供較少信息
* 1級: 提供較詳細測試信息,如逐個發送 Activity 的事件
* 2級: 提供更詳細安裝信息,如測試中被選中或爲被選中的 Activity

2.2 monkey 的事件類命令

  • -f: 後接測試腳本名,表示要使用 monkey 運行指定的 monkey 腳本,命令示例:
$ adb shell monkey -f <scriptfile>  <event-count>
$ abd shell monkey -f /mnt/sdcard/test 10
  • -s: 後接隨機數生成器的 seed 值。如果使用相同的seed 值再次運行 monkey,將生成相同的事件序列,也就是說重複執行剛纔的隨機操作。

命令格式爲:

$ adb shell monkey -s <seed> <event-count>
  • --throttle: 後接時間,單位爲 ms(<milliseconds>),表示事件之間的固定延遲(即執行每一個指令間隔的時間),如果不接該選項,monkey 將不會延遲。

命令格式:

$ adb shell monkey --throttle <milliseconds>
  • --ptc-motion: 後接動作事件百分比。動作事件不單單指手勢操作,它泛指從某一個位置按下(即Down事件)後經過一系列僞隨機事件後彈起(即Up事件)。
  • --ptc-trackball: 後接軌跡球事件百分比。軌跡球事件包括一系列的隨機移動,以及偶爾跟隨在移動後面的點擊事件。
  • --ptc-nav: 後接基本導航事件百分比。 基本導航事件主要指來自方向輸入設備的上、下、左、右事件。
  • --ptc-majornav: 後接主要導航事件百分比。主要導航事件通常指引發圖形界面的一些動作,如 5-way 鍵盤中間按鍵、返回按鍵、菜單按鍵等。
  • --ptc-syskeys: 後接系統按鍵事件百分比。系統按鍵事件通常指僅供系統使用的保留按鍵,比如 home鍵,back鍵,撥號鍵等。
  • --ptc-appswitch: 後接應用啓動事件百分比。醫用啓動事件俗稱 打開應用,通過調用startActivity() 方法最大限度地開啓該 package 下的所有應用。
  • --ptc-anyevent: 後接其他類型事件百分比。除了上述提到的事件外全部都屬於其他事件。

2.3 monkey 的約束類命令

  • -p: 後接一個或多個包名(<allowed-package-name>),如果應用需要訪問其他包裏面的 Activity,那相關的包也需要在此同時指定。如果不指定任何包,monkey將允許系統啓動全部包裏的 Activity。 每一個 -p 對應一個包,指定多個包時每個包名前都需要加上 -p,如:
$ adb shell monkey -p <allowed-package-name> <event-count>
   
$ adb shell monkey -p com.csmijo.test 1000
  • --c: 後接一個或多個類別名(即 <main-category> 參數),monkey 將只允許系統啓動這些類別中某個類別列出的 Activity。如果不指定任何類別,monkey 將選擇Intent.CATEGORY_LAUNCH 和Intent.CATEGORY_monkey裏的 Activity。

2.4 monkey 調試類命令

  • --dbg-no-events: 在設置此選項後,monkey 將進入初始啓動,進入到某個測試 Activity 中不會進一步生成事件。命令格式:
$ adb shell monkey --dbg-no-events <event-count>
  •  -hprof: 在設置此項後,將在monkey事件序列前後立即生成 profiling report。 該選項將在 data/misc 中生成 5MB 大小的文件,慎用!
  • --ignore-crashes: 在設置此項後,當應用程序崩潰或者發生失控異常時, monkey 將繼續運行直到計數完成。如果不設置此選項,monkey 遇到上述崩潰或者異常將停止運行。
  • --ignore-timeouts: 在設置此選項後,當應用程序發生任何超時錯誤(如ANR)時,monkey 將繼續運行直到計數結束。如果不設置此選項,monkey 遇到此類超時對話框將停止運行。
  • --ignore-security-exceptions: 在設置此選項後,當應用程序發生任何權限錯誤(如啓動一個需要某些權限的 Activity)時,monkey 將繼續運行直到計數完成。如果不設置此選項,monkey 遇到此類權限錯誤將停止運行
  • --kill-process-after-error: 在設置此選項後,當monkey 因爲應用程序發生錯誤停止時,將會通知系統體質發生錯誤的進程。如果不設置此項,在monkey 停止時發生錯誤的應用程序將繼續處於運行狀態。
  • --monitor-nativie-crashes: 在設置此選項後,monkey 運行時 native code 的崩潰事件將被監視被報告。如果不設置則不會監視。
  • --wait-dbg: 在設置此選項後,將暫停執行中的 monkey,知道有調試器與它連接

2.5 官方隱藏類參數

  • --pkg-blacklist-file: 限制 monkey 不測試指定黑名單文檔中記錄的包(package)。如果沒有使用這個參數,monkey 會測試系統內所有的的包。如果使用了這個參數,可通過在黑名單文檔中記錄所有不需要測試的包名稱,來相紙 monkey 的執行範圍。 黑名單文檔中每一行只能放一個包名
  • --pkg-whitelist-file: 限制monkey 只測試指定的白名單文檔中記錄的包。如果沒有使用這個參數,monkey 會測試系統內所有的包。如果使用了這個參數,可通過在白名單文檔內記錄所有要測試的包,來限制monkey 的執行範圍。白名單文檔中每一行只能放一個包名。

    注意:如果要測試的包與其他的包有關聯,則必須一起指定這些包來執行這項參數。

3. monkey 腳本編寫

軌跡球事件

DispatchTrackball(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)

只需要關注: action、x、y 即可

  • ACTION_DOWN = 0
  • ACTION_UP = 1
  • ACTION_MULTIPLE = 2

輸入字符串事件

DispatchString(String text)

點擊事件

DispatchPointer(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)

只需要關注: action、x、y 即可

啓動應用

LaunchActivity(String pkg_name,String cl_name)

等待事件

UserWait(long sleeptime)

時間的單位爲:毫秒(millisecond)

按下鍵值

DispatchPress(int keyCode)

長按鍵值

LongPress(int keyCode)

發送鍵值

DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)

開關軟鍵盤

DispatchFlip(boolean keyboardOpen)

3.2 monkey 腳本編寫

type= raw events
count= 10
speed= 1.0
start data >>
captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
captureDispatchFlip(true)
...

4.1 monkey 日誌的保存方法

保存在 pc 中,命令如下

$ adb shell monkey [options] <event-count> > d:\monkeylog.txt

adb shell monkey -p com.bbk.recorder -v 10000 >d:\xxx.txt

保存在手機中,命令如下:

$ adb shell
# monkey [options] <event-count> /mnt/sdcard/monkeylog.txt

標準流與錯誤流分開保存,命令如下:

# monkey [options] <event-count> 1>/mnt/sdcard/monkeylog.txt 2>/mnt/sdcard/monkeyErrorlog.txt

4.2 monkey 日誌內容解析

  1. 搜索關鍵字"ANR" 查找 ANR 相關信息
  2. 搜索關鍵字"CRASH" 查找 Crash 相關信息

4.3 monkey server 的使用----隱藏api

啓動Money Server
adb shell monkey --port 1080 & 
連接Monkey Server   
adb forward tcp:1080 tcp:1080
telent 127.0.0.1 1080

4.4Money 腳本生成工具

 

 

 

 

 

 

 

 

 

 

 

 

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