Monkey測(cè)試的功能
Monkey是內(nèi)置在Androidshell中的命令行工具蚓土。Monkey測(cè)試可以模擬用戶點(diǎn)擊行為,通過腳本的形式不斷地執(zhí)行,然后可以導(dǎo)出到本地日志砂蔽,進(jìn)行奔潰分析。模擬方式是系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流署惯。
Monkey測(cè)試的使用
設(shè)置ADB環(huán)境
將{android sdk location}\platform-tools
加入環(huán)境變量左驾,以便使用終端執(zhí)行adb命令。
編輯Monkey腳本
基本語法:
$ adb shell monkey [options] <event-count>
腳本示例:
monkey -p com.arisan1000.android --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --pct-appswitch 30 --pct-touch 15 --pct-motion 50 --pct-anyevent 5 -s 1000 43200 2>/sdcard/error.txt 1>/sdcard/info.txt
Category | Option | Description |
---|---|---|
General? | --help | 打印簡(jiǎn)單的使用向?qū)?/td> |
-v | 每個(gè)-v表示增加信息的冗余級(jí)別。默認(rèn)是Level 0诡右,打印啟動(dòng)通知安岂、測(cè)試結(jié)束和最終結(jié)果。Level 1帆吻,提供了較為詳細(xì)的測(cè)試信息域那,如逐個(gè)發(fā)送到Activity的事件信息。Level 2猜煮,提供了更多的設(shè)置信息次员,如測(cè)試中選中或未選中的Activity信息。 | |
Events | -s <seed> | 指定偽隨機(jī)數(shù)生成器的seed值王带,如果seed相同淑蔚,則兩次Monkey測(cè)試所產(chǎn)生的事件序列也相同的 |
--throttle <milliseconds> | 指定用戶操作(即事件)間的時(shí)延,單位是毫秒愕撰;如果不指定這個(gè)參數(shù)束倍,monkey會(huì)盡可能快的生成和發(fā)送消息。 | |
--pct-touch <percent> | 調(diào)整觸摸事件的百分比.(觸摸事件是指在屏幕中的一個(gè)down-up事件盟戏,即在屏幕某處按下并抬起的操作)比如一個(gè)應(yīng)用80%的操作都是觸摸绪妹,那就可以將此參數(shù)的百分比設(shè)置成相應(yīng)較高的百分比。如觸摸返回柿究、觸摸簽到等 | |
--pct-motion <percent> | 調(diào)整motion事件百分比邮旷。(motion事件是由屏幕上某處一個(gè)down事件、一系列偽隨機(jī)的移動(dòng)事件和一個(gè)up事件組成)也就是直線滑動(dòng)事件如從左到有滑動(dòng)解鎖 | |
--pct-trackball <percent> | 作用:調(diào)整滾動(dòng)球事件百分比蝇摸。(滾動(dòng)球事件由一個(gè)或多個(gè)隨機(jī)的移動(dòng)事件組成婶肩,有時(shí)會(huì)伴隨著點(diǎn)擊事件)如不規(guī)則滑動(dòng)解鎖 | |
--pct-nav <percent> | 調(diào)整基本的導(dǎo)航事件(上下左右),事件來自直接的輸入設(shè)備∶蚕Γ現(xiàn)在的設(shè)備一般沒有設(shè)置導(dǎo)航按鈕了律歼。 | |
--pct-majornav <percent> | 調(diào)整“主要”導(dǎo)航事件的百分比。 (這些是通常會(huì)導(dǎo)致您的UI中的操作的導(dǎo)航事件啡专,例如5向按鍵中的中心按鈕险毁,后退鍵或菜單鍵。) | |
--pct-syskeys <percent> | 按鍵消息比例们童,主頁畔况、后退、音量增減 | |
--pct-appswitch <percent> | 啟動(dòng)Activity的事件比例 | |
--pct-anyevent <percent> | 其他不常用的按鍵比例的設(shè)置慧库,不常用 | |
-p <allowed-package-name> | 用此參數(shù)指定一個(gè)或多個(gè)包跷跪。指定包之后,monkey將只允許系統(tǒng)啟動(dòng)指定的app齐板。如果不指定包吵瞻,monkey將允許系統(tǒng)啟動(dòng)設(shè)備中的所有app葛菇。 | |
-c <main-category> | 指定啟動(dòng)Activity的category。若無指定橡羞,monkey會(huì)選擇帶有Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY的Activity熟呛。使用時(shí),一個(gè)-c指定一個(gè)category尉姨,可以多次使用庵朝。 | |
Debugging | --dbg-no-events | 指定該選項(xiàng)時(shí),Monkey會(huì)執(zhí)行測(cè)試Activity的初始啟動(dòng)又厉,但不會(huì)生成進(jìn)一步的事件九府。為了獲得更好的結(jié)果,可以結(jié)合 -v選項(xiàng)覆致,一個(gè)或多個(gè)包限制 和 非0的throttle選項(xiàng) (為了保持Monkey運(yùn)行30s或以上)侄旬。這提供了一個(gè)監(jiān)控應(yīng)用調(diào)用的包轉(zhuǎn)換的環(huán)境。 |
--hprof | 測(cè)試完成后生成內(nèi)存快照煌妈,data/misc路徑下生成儡羔,不常用,比較占空間 | |
--ignore-crashes | 在monkey測(cè)試的過程中遇到crash不終止monkey進(jìn)程璧诵,直到計(jì)數(shù)結(jié)束汰蜘。 | |
--ignore-timeouts | 在monkey測(cè)試的過程中遇到timeout error 或者 ANR 不終止monkey進(jìn)程,直到計(jì)數(shù)結(jié)束之宿。 | |
--ignore-security-exceptions | 忽略權(quán)限問題族操,直到事件計(jì)數(shù)結(jié)束。 | |
--kill-process-after-error | 當(dāng)發(fā)生錯(cuò)誤時(shí)終止monkey進(jìn)程比被。 | |
--monitor-native-crashes | 監(jiān)視崩潰時(shí)的本地代碼色难。當(dāng)設(shè)置 --kill-process-after-error時(shí),monkey進(jìn)程會(huì)停止等缀。 | |
--wait-dbg | 當(dāng)調(diào)試器失去連接時(shí)枷莉,停止monkey進(jìn)程。 |
執(zhí)行和停止腳本
- 連接設(shè)備并開啟調(diào)試模式
- 執(zhí)行腳本命令:復(fù)制腳本到終端
- 回車執(zhí)行停止腳本尺迂,如下:
// 獲取monkey所在的進(jìn)程id
adb shell top | grep monkey
示例結(jié)果:
5447 0 1% S 10 262960K 10328K root com.android.commands.monkey
5447 0 0% S 10 262960K 10324K root com.android.commands.monkey
//徹底停止monkey進(jìn)程
adb shell kill -9 5447
分析本地日志
- 找到是monkey里面的哪個(gè)地方出錯(cuò)笤妙。
- 查看Monkey里面出錯(cuò)前的一些事件動(dòng)作,并手動(dòng)執(zhí)行該動(dòng)作枪狂。
- 若以上步驟還不能找出危喉,可以使用之前執(zhí)行的monkey命令再執(zhí)行一遍宋渔,注意seed值要一樣州疾。
詳情參考Monkey測(cè)試3——Monkey測(cè)試結(jié)果分析
參考
附錄 A:Linux中的輸入輸出重定向
n> file 表示將文件描述符為 n 的文件重定向到 file严蓖。常見的文件描述符為:
文件描述符 | 名稱 | 常用縮寫 | 默認(rèn)值 |
---|---|---|---|
0 | 標(biāo)準(zhǔn)輸入 | stdin | 鍵盤 |
1 | 標(biāo)準(zhǔn)輸出 | stdout | 屏幕 |
2 | 標(biāo)準(zhǔn)錯(cuò)誤輸出 | stderr | 屏幕 |