描述
Monkey主要是用來做穩定性或是壓力測試,它可以執行在實體裝置或是模擬器上,藉由產生一系列的隨機事件(e.g., touch, click, gestures)來測試應用程序。
基本語法
adb shell monkey [options] <event-count>
[options] 為參數,<event-count>為事件數。
常用範例介紹
1.啟動monkey
直接執行 monkey, 發送event count 數量的事件:
adb shell monkey <event count>
2.停止monkey
2-1.搜尋 monkey 的 pid
adb shell ps | grep 'monkey'
2-2.kill monkey by pid
adb shell kill <Step 1.找到的 pid>
Note:ctrl + c無法停止 monkey
3.執行在 com.package.name 上, 發送 event count 數量的事件
adb shell monkey -p com.package.name <event count>
4.執行在 com.package.name 上, 發送 event count 數量的事件,顯示最詳細的訊息
adb shell monkey -v-v-v -p com.package.name <event count>
5.執行在 com.package.name 上, 發送 event count 數量的事件,每個事件等待1秒, 顯示最詳細的訊息,事件隨機分配。
adb shell monkey -v-v-v -p com.package.name --throttle 1000 <event count>
6.執行在 com.package.name 上, 發送 event count 數量的事件,每個事件等待1秒,調整 touch 事件為50%,剩餘百分比隨機分配,顯示最詳細的訊息
adb shell monkey -v-v-v -p com.package.name --pct-touch 50 --throttle 1000 <event count>
7.執行在 com.package.name 上, 發送 event count 數量的事件,每個事件等待1秒,調整 touch 事件 50%,motion事件 25%,剩餘百分比隨機分配,顯示最詳細的訊息
adb shell monkey -v-v-v -p com.package.name --pct-touch 50 --pct-motion 25 --throttle 1000 <event count>
monkey 參數[options]介紹:
參數總共分4大類,為一般(General)類,事件(Events)類,限制(Constraints)類,除錯(Debugging)類。
一般類
-h : 幫助訊息
adb shell monkey -h usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...] [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...] [--ignore-crashes] [--ignore-timeouts] [--ignore-security-exceptions] [--monitor-native-crashes] [--ignore-native-crashes] [--kill-process-after-error] [--hprof] [--pct-touch PERCENT] [--pct-motion PERCENT] [--pct-trackball PERCENT] [--pct-syskeys PERCENT] [--pct-nav PERCENT] [--pct-majornav PERCENT] [--pct-appswitch PERCENT] [--pct-flip PERCENT] [--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT] [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE] [--pkg-whitelist-file PACKAGE_WHITELIST_FILE] [--wait-dbg] [--dbg-no-events] [--setup scriptfile] [-f scriptfile [-f scriptfile] ...] [--port port] [-s SEED] [-v [-v] ...] [--throttle MILLISEC] [--randomize-throttle] [--profile-wait MILLISEC] [--device-sleep-time MILLISEC] [--randomize-script] [--script-log] [--bugreport] [--periodic-bugreport] COUNT
-v:顯示log訊息
越多 -v,顯示的訊息越多,最多可以有3個 -v
adb shell monkey -v-v-v 10 :Monkey: seed=0 count=10 :IncludeCategory: android.intent.category.LAUNCHER :IncludeCategory: android.intent.category.MONKEY // Event percentages: // 0: 15.0% // 1: 10.0% // 2: 2.0% // 3: 15.0% // 4: -0.0% // 5: 25.0% // 6: 15.0% // 7: 2.0% // 8: 2.0% // 9: 1.0% // 10: 13.0% :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.google.android.street/.Street;end // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.google.android.street/.Street } in package com.google.android.street :Sending Flip keyboardOpen=false :Sending Touch (ACTION_DOWN): 0:(313.0,367.0) :Sending Touch (ACTION_UP): 0:(313.19876,367.49512) Events injected: 10 :Sending rotation degree=0, persist=false :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0 ## Network stats: elapsed time=247ms (0ms mobile, 247ms wifi, 0ms not connected) // Monkey finished
第2行 seed=0代表事件使用的隨機數,如果指定相同的隨機數,將會產生相同的事件。
count=10代表事件數量
第3~4行 :IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
代表 monkey 會去執行指定category的類別,預設是LAUNCHER or MONKEY
當在指令中使用 -c 參數時會顯示在這裡,若找不到指定的category會顯示以下訊息。
// Warning: no activities found for category android.intent.category.test ** No activities found to run, monkey aborted.
第5~16行:事件比例,對照如下
// Event percentages: // 0: 15.0% (--pct-touch ) // 1: 10.0% (--pct-motion) // 2: 2.0% (--pct-pinchzoom) // 3: 15.0% (--pct-trackball) // 4: -0.0% (--pct-rotation) // 5: 25.0% (--pct-nav) // 6: 15.0% (--pct-majornav) // 7: 2.0% (--pct-syskeys) // 8: 2.0% (--pct-appswitch) // 9: 1.0% (--pct-flip) // 10: 13.0%(--pct-anyevent)
第17~22行:monkey 切換訊息。其中包括 action,category,component的訊息。action 和category 請參考 android developer 參考。而 component 即為啟動的 package全名和 activity名稱。
第23行之後包含相關的測試訊息觸碰座標,旋轉螢幕等等。
事件類
-s:隨機數,指定相同的隨機數會有相同的事件產生。
–throttle:每個事件之間延遲的時間,以mill second 來計算,預設沒有延遲。
–pct-touch:觸碰事件,觸碰事件為按下–放開事件。
–pct-motion:運動事件,運動事件為按下事件加上一連串的隨機事件最後加上放開事件。
–pct-trackball:軌跡球事件,軌跡球事件為一個或多個亂數動作。
–pct-nav:基本導航事件,基本導航事件為裝置的上,下,左,右輸入。
–pct-majornav:主要導航事件,主要導航事件為引發圖形介面的動作(e.g.,返回鍵,或選單鍵)。
–pct-syskeys:系統事件,系統按鍵事件為home鍵,返回鍵,撥號鍵,音量鍵等等。
–pct-appswitch:activity啟動事件, activity啟動事件為影響monkey 最大化的平均切換同一個package內的所有activity 的機率。
–pct-anyevent:其他事件,包含以上沒有提到事件。
//執行在 com.example.mypackage 上, 發送 100 數量的事件,調整 touch 事件為10%,motion事件20%,軌跡球事件為 15%,剩餘百分比隨機分配,顯示最詳細的訊息 adb shell monkey -v-v-v -p com.example.mypackage -s 999 --pct-touch 10 --pct-motion 20 --pct-trackball 15 100
限制類
-p:指定 monkey 運作的 package,可以有一個到多個 package,monkey會啟動在該package內的activity,如果 app 需要存取其他的 package(e.g., 聯絡人)。也必須在此指定。預設是隨機啟動該裝置中任何一個package。
//執行在 com.example.mypackage 上, 發送 100 數量的事件,事件隨機分配,顯示最詳細的訊息 adb shell monkey -v-v-v -p com.example.mypackage 100
-c: 指定 monkey 運作的 category,通常可用來指定 monkey 啟動的 activity,category 在AndroidManifest.xml 中設定(e.g.,預設為啟動Intent.CATEGORY_LAUNCHER or Intent.CATEGORY_MONKEY。
//執行在 com.example.mypackage 上, 限制 category 為 LAUNCHER 以及 MONKEY,發送 100 數量的事件,事件隨機分配,顯示最詳細的訊息 adb shell monkey -v-v-v -p com.example.mypackage -c android.intent.category.LAUNCHER -c android.intent.category.MONKEY 100
AndroidManifest.xml example
... <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.mypackage.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ...
第14行即為 category 指定的方式,因此 monkey 將會執行在com.example.mypakcage.MainActivity 。
除錯類
-hprof:在 monkey 執行事件的前後產生報告,報告大約有 5mb,路徑為data/misc。
–ignore-crashes:monkey 預設當測試發生 exception 或 crash 會立即停止,當設定該參數 monkey將不會停止。
–ignore-timeouts:monkey 預設當測試發生 ANR會立即停止,當設定該參數 monkey將不會停止。
–ignore-security-exceptions:monkey 預設當測試發生 permission error會立即停止,當設定該參數 monkey將不會停止。
–kill-process-after-error:monkey 預設當測試發生錯誤時不會停止啟動的程序,當設定該參數 monkey將會停止該程序。Note: 當 monkey 成功完成測試後,也不會停止該程序,只會保留在測試結束的最後一個階段。
–montion-native-crashes:監看並報告當測試發生native code 的錯誤。
–wait-dbg:停止執行中的 monkey直到有除錯器連接為止。
–dbg-no-events:設定後,monkey 進入activity 前不會產生事件,一般會和 -v , -p,-throttle 一起使用來監視 packages 之間的切換。