monkey
測試
讀書筆記
1. monkey 的基本使用
monkey
文檔官方網(wǎng)址:https://developer.android.com/studio/test/monkey.html-
使用
monkey
有兩種方式:-
第一種方式:shell 端啟動
進(jìn)入
adb shell
-
運行
"/system/bin"
路徑下的monkey
腳本$ adb shell # cd /system/bin # monkey
-
第二種方式:直接 pc 啟動
直接通過以下的命令運行:
$ adb shell /system/bin/monkey
這兩種方式的區(qū)別: 通過 PC 端啟動谭梗,monkey 運行日志可以保存到 PC 上呼伸;通過 Shell 端啟動,monkey 運行日志可以保存到手機(jī)里刑然。
-
-
加上選項
[options]
的命令如下:$ adb shell monkey [options] <event-count>
2. monkey 的命令及其使用
monkey
的 option
操作都是根據(jù)具體的需求設(shè)定的作烟,主要分為五類愉粤,分別為: 常規(guī)類、事件類拿撩、約束類衣厘、調(diào)試類和官方隱藏類參數(shù)。
2.1 monkey 的常規(guī)類命令
-
-h
: 顯示monkey
參數(shù)幫助信息 usage -
-v
: 打印出日志信息压恒,每個-v
將增加反饋信息的級別影暴。命令格式為:$ adb shell monkey -v <event-count>
-v
越多日志信息月詳細(xì),不過目前最多支持 3 個 -v
探赫,即:
* 0級: 除啟動提示型宙、測試完成和最終結(jié)果外提供較少信息
* 1級: 提供較詳細(xì)測試信息,如逐個發(fā)送 Activity 的事件
* 2級: 提供更詳細(xì)安裝信息伦吠,如測試中被選中或為被選中的 Activity
2.2 monkey 的事件類命令
-
-f
: 后接測試腳本名妆兑,表示要使用monkey
運行指定的monkey
腳本,命令示例:$ adb shell monkey -f <scriptfile> <event-count> $ abd shell monkey -f /mnt/sdcard/test 10
-
-s
: 后接隨機(jī)數(shù)生成器的 seed 值毛仪。如果使用相同的seed 值再次運行 monkey箭跳,將生成相同的事件序列,也就是說重復(fù)執(zhí)行剛才的隨機(jī)操作潭千。命令格式為:
$ adb shell monkey -s <seed> <event-count>
-
--throttle
: 后接時間谱姓,單位為 ms(<milliseconds>),表示事件之間的固定延遲(即執(zhí)行每一個指令間隔的時間)刨晴,如果不接該選項屉来,monkey
將不會延遲路翻。命令格式:
$ adb shell monkey --throttle <milliseconds>
-
--ptc-touch
: 后接觸摸事件百分比,命令格式:
$ adb shell monkey --ptc-touch <percent>
--ptc-motion
: 后接動作事件百分比茄靠。動作事件不單單指手勢操作茂契,它泛指從某一個位置按下(即Down事件)后經(jīng)過一系列偽隨機(jī)事件后彈起(即Up事件)。--ptc-trackball
: 后接軌跡球事件百分比慨绳。軌跡球事件包括一系列的隨機(jī)移動掉冶,以及偶爾跟隨在移動后面的點擊事件。--ptc-nav
: 后接基本導(dǎo)航事件百分比脐雪。 基本導(dǎo)航事件主要指來自方向輸入設(shè)備的上厌小、下、左战秋、右事件璧亚。--ptc-majornav
: 后接主要導(dǎo)航事件百分比。主要導(dǎo)航事件通常指引發(fā)圖形界面的一些動作脂信,如 5-way 鍵盤中間按鍵癣蟋、返回按鍵、菜單按鍵等狰闪。--ptc-syskeys
: 后接系統(tǒng)按鍵事件百分比疯搅。系統(tǒng)按鍵事件通常指僅供系統(tǒng)使用的保留按鍵,比如 home鍵埋泵,back鍵秉撇,撥號鍵等。--ptc-appswitch
: 后接應(yīng)用啟動事件百分比秋泄。醫(yī)用啟動事件俗稱 打開應(yīng)用琐馆,通過調(diào)用startActivity()
方法最大限度地開啟該 package 下的所有應(yīng)用。--ptc-anyevent
: 后接其他類型事件百分比恒序。除了上述提到的事件外全部都屬于其他事件瘦麸。
2.3 monkey 的約束類命令
-
-p
: 后接一個或多個包名(<allowed-package-name>),如果應(yīng)用需要訪問其他包里面的 Activity歧胁,那相關(guān)的包也需要在此同時指定滋饲。如果不指定任何包,monkey
將允許系統(tǒng)啟動全部包里的 Activity喊巍。 每一個 -p 對應(yīng)一個包屠缭,指定多個包時每個包名前都需要加上 -p,如:$ adb shell monkey -p <allowed-package-name> <event-count> $ adb shell monkey -p com.csmijo.test 1000
-
-c
: 后接一個或多個類別名(即 <main-category> 參數(shù))崭参,monkey
將只允許系統(tǒng)啟動這些類別中某個類別列出的 Activity呵曹。如果不指定任何類別,monkey 將選擇Intent.CATEGORY_LAUNCH
和Intent.CATEGORY_monkey
里的 Activity。
2.4 monkey 調(diào)試類命令
-
--dbg-no-events
: 在設(shè)置此選項后奄喂,monkey 將進(jìn)入初始啟動铐殃,進(jìn)入到某個測試 Activity 中不會進(jìn)一步生成事件。命令格式:$ adb shell monkey --dbg-no-events <event-count>
-
--hprof
: 在設(shè)置此項后跨新,將在monkey
事件序列前后立即生成profiling report
富腊。 該選項將在 data/misc 中生成 5MB 大小的文件,慎用域帐! -
--ignore-crashes
: 在設(shè)置此項后赘被,當(dāng)應(yīng)用程序崩潰或者發(fā)生失控異常時,monkey
將繼續(xù)運行直到計數(shù)完成肖揣。如果不設(shè)置此選項民假,monkey
遇到上述崩潰或者異常將停止運行。 -
--ignore-timeouts
: 在設(shè)置此選項后许饿,當(dāng)應(yīng)用程序發(fā)生任何超時錯誤(如ANR)時,monkey
將繼續(xù)運行直到計數(shù)結(jié)束舵盈。如果不設(shè)置此選項陋率,monkey
遇到此類超時對話框?qū)⑼V惯\行。 -
--ignore-security-exceptions
: 在設(shè)置此選項后秽晚,當(dāng)應(yīng)用程序發(fā)生任何權(quán)限錯誤(如啟動一個需要某些權(quán)限的 Activity)時瓦糟,monkey
將繼續(xù)運行直到計數(shù)完成。如果不設(shè)置此選項赴蝇,monkey
遇到此類權(quán)限錯誤將停止運行菩浙。 -
--kill-process-after-error
: 在設(shè)置此選項后,當(dāng)monkey
因為應(yīng)用程序發(fā)生錯誤停止時句伶,將會通知系統(tǒng)體質(zhì)發(fā)生錯誤的進(jìn)程劲蜻。如果不設(shè)置此項,在monkey
停止時發(fā)生錯誤的應(yīng)用程序?qū)⒗^續(xù)處于運行狀態(tài)考余。 -
--monitor-nativie-crashes
: 在設(shè)置此選項后先嬉,monkey
運行時native code
的崩潰事件將被監(jiān)視被報告。如果不設(shè)置則不會監(jiān)視楚堤。 -
--wait-dbg
: 在設(shè)置此選項后疫蔓,將暫停執(zhí)行中的monkey
,知道有調(diào)試器與它連接。
2.5 官方隱藏類參數(shù)
--pkg-blacklist-file
: 限制monkey
不測試指定黑名單文檔中記錄的包(package)身冬。如果沒有使用這個參數(shù)衅胀,monkey 會測試系統(tǒng)內(nèi)所有的的包。如果使用了這個參數(shù)酥筝,可通過在黑名單文檔中記錄所有不需要測試的包名稱滚躯,來相紙 monkey 的執(zhí)行范圍。 黑名單文檔中每一行只能放一個包名-
--pkg-whitelist-file
: 限制monkey
只測試指定的白名單文檔中記錄的包。如果沒有使用這個參數(shù)哀九,monkey 會測試系統(tǒng)內(nèi)所有的包剿配。如果使用了這個參數(shù),可通過在白名單文檔內(nèi)記錄所有要測試的包阅束,來限制monkey 的執(zhí)行范圍呼胚。白名單文檔中每一行只能放一個包名。注意:如果要測試的包與其他的包有關(guān)聯(lián)息裸,則必須一起指定這些包來執(zhí)行這項參數(shù)蝇更。
3. monkey 腳本編寫
3.1 monkey API 詳解
-
軌跡球事件
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)
只需要關(guān)注: 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)
只需要關(guān)注: action年扩、x、y 即可
-
啟動應(yīng)用
LaunchActivity(String pkg_name,String cl_name)
-
等待事件
UserWait(long sleeptime)
時間的單位為:毫秒(millisecond)
-
按下鍵值
DispatchPress(int keyCode)
-
長按鍵值
LongPress(int keyCode)
-
發(fā)送鍵值
DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)
-
開關(guān)軟鍵盤
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. monkey 日志分析
4.1 monkey 日志的保存方法
-
保存在 pc 中访圃,命令如下:
$ adb shell monkey [options] <event-count> > d:\monkeylog.txt
-
保存在手機(jī)中厨幻,命令如下:
$ adb shell # monkey [options] <event-count> /mnt/sdcard/monkeylog.txt
-
標(biāo)準(zhǔn)流與錯誤流分開保存,命令如下:
# monkey [options] <event-count> 1>/mnt/sdcard/monkeylog.txt 2>/mnt/sdcard/monkeyErrorlog.txt
4.2 monkey 日志內(nèi)容解析
- 搜索關(guān)鍵字"ANR" 查找 ANR 相關(guān)信息
- 搜索關(guān)鍵字"CRASH" 查找 Crash 相關(guān)信息
[參考文獻(xiàn)]
- 《深入理解Android自動化測試》
- 《騰訊Android自動化測試實戰(zhàn)》