一大渤、什么是 Monkey 測試
Monkey 測試是通過向系統(tǒng)發(fā)送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入掸绞、手勢輸入等)泵三,實現(xiàn)對應(yīng)用程序客戶端的穩(wěn)定性測試;
通俗來說衔掸,Monkey 測試即“猴子測試”烫幕,是指像猴子一樣,不知道程序的任何用戶交互方面的知識敞映,就對界面進行無目的较曼、亂點亂按的操作;
Monkey 測試是一種為了測試軟件的穩(wěn)定性驱显、健壯性的快速有效的方法诗芜;
Monkey 程序是 Android 系統(tǒng)自帶的,由 Java 語言寫成埃疫,在 Android 文件系統(tǒng)中的存放路徑是: /system/framework/monkey.jar伏恐;
Monkey 程序需要通過 adb 來運行。
二栓霜、操作步驟
安裝并配置好 adb 環(huán)境翠桦,并通過 adb 連接好設(shè)備;
獲取被測應(yīng)用的包名胳蛮;
執(zhí)行 Monkey 命令進行測試
三销凑、Monkey 命令說明
adb shell monkey + 行為參數(shù) + ">" + {日志保存路徑}
上面的">",會覆蓋日志文件仅炊,如果使用">>"斗幼,則在日志文件后面追加
示例:
adb shell monkey -p com.xxx.myapp --throttle 100 --ignore-crashes --ignore-timeouts
--ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > d:\mylog.log
格式 | 示例 | 說明 |
---|---|---|
常規(guī)類命令 | ||
{數(shù)字} | 1000000 | Monkey 測試事件次數(shù) |
-v | -v -v -v | 每個 -v 都將增加反饋信息的級別。共3個級別抚垄,因此 -v -v -v 可以提供最詳細的設(shè)置信息蜕窿。-v:0級,除啟動提示呆馁、測試完成和最終結(jié)果外提供較少信息桐经。-v -v:1級,提供較詳細測試信息浙滤,如逐個發(fā)送到 Activity 的事件阴挣。-v -v -v:2級,提供更詳細安裝信息纺腊,如測試中被選中或未被選中的 Activity |
> + {日志路徑} | > d:\mylog.log | Monkey 測試日志記錄文件 |
約束類命令 | ||
-p + {被測應(yīng)用包名} | -p com.leiting.sdk.test2 | 只針對指定包名進行測試 |
-c + {一個或多個類別名} | -c Intent.CATEGORY_LAUNCHER | Monkey 將只允許系統(tǒng)啟動這些類別中某個類別列出的 Activity畔咧,如果不指定任何類別茎芭,Monkey 將選擇 Intent.CATEGORY_LAUNCHER 和 Intent.CATEGORY_monkey 里的 Activity(每個 -c 對應(yīng)一個類別,指定多個類別時每個類別名前面都需要加上 -c) |
調(diào)試類命令 | ||
--ignore-timeouts | --ignore-timeouts | Monkey 測試時忽略應(yīng)用程序發(fā)生的超時錯誤盒卸,若發(fā)生超時骗爆,將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計數(shù)完成(若不設(shè)置此項蔽介,在遇到超時時摘投,Monkey 將停止運行) |
--ignore-security-exception | --ignore-security-exception | Monkey 測試時忽略程序發(fā)生的異常錯誤,若發(fā)生異常虹蓄,將繼續(xù)發(fā)送事件給系統(tǒng)犀呼,直到事件計數(shù)完成(若不設(shè)置此項,在遇到異常時薇组,Monkey 將停止運行) |
--ignore-crashes | --ignore-crashes | Monkey 測試時忽略應(yīng)用程序崩潰(Force&Close錯誤)外臂,若發(fā)生奔潰,將繼續(xù)發(fā)送事件給系統(tǒng)律胀,直到事件計數(shù)完成(若不設(shè)置此項宋光,在遇到奔潰時,Monkey 將停止運行) |
--ignore-native-crashes | --ignore-native-crashes | Monkey 測試時忽略本地代碼導(dǎo)致的崩潰炭菌,若發(fā)生崩潰罪佳,將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計數(shù)完成(若不設(shè)置此項黑低,在遇到本地代碼導(dǎo)致的奔潰時赘艳,Monkey 將停止運行) |
--monitor-native-crashes | --monitor-native-crashes | 監(jiān)視崩潰時的本地代碼 |
--dbg-no-events | --dbg-no-events | 設(shè)置此項后,monkey將進行初始啟動克握,進入到某個測試Activity中不會進一步生成事件蕾管,可以監(jiān)視應(yīng)用程序所調(diào)用的包之間的轉(zhuǎn)換,為了更好的跟蹤菩暗,一般該項會與-v(日志)掰曾、-p<allowed-package-name> (包約束) 和 --throttle<milliseconds> (延遲)等聯(lián)合使用 |
--hprof | --hprof | 設(shè)置此項后,將在monkey事件序列前后立即生成profilfing report停团,將在data/misc中生成5MB左右大小的文件 |
--kill-process-after-error | --kill-process-after-error | 設(shè)置此項后旷坦,當(dāng)monkey因為應(yīng)用程序發(fā)生錯誤而停止時,將會通知系統(tǒng)停止發(fā)生錯誤的進程客蹋。如果不設(shè)置此項,monkey停止時發(fā)生錯誤的應(yīng)用程度將繼續(xù)處于運行狀態(tài)孽江。 |
--wait-dbg | --wait-dbg | 在設(shè)置此項后讶坯,將暫停執(zhí)行中的monkey,直到有調(diào)試器與它連接岗屏。 |
事件類命令 | ||
-s {數(shù)字} | -s 100 | 隨機數(shù)生成器的 seed 值辆琅,如果使用相同的 seed 值再次運行 Monkey漱办,將生成相同的事件序列(也就是說,重復(fù)執(zhí)行剛才的隨機操作) |
--throttle + {毫秒單位時間} | --throttle 100 | 事件之間插入的固定延遲婉烟,單位毫秒娩井。通過這個選項可以減緩Monkey的執(zhí)行速度。如果不指定似袁,Monkey將盡可能快的產(chǎn)生并執(zhí)行事件 |
--pct-touch + {數(shù)字} | --pct-touch 30 | 觸摸事件占比洞辣,即整個測試過程中,觸摸事件占 30%(指在某一位置的一個 down-up 事件昙衅,如:點擊) |
--pct-montion + {數(shù)字} | --pct-montion 30 | 動作事件占比扬霜,即整個測試過程中,動作事件占 30%(指從某一位置接下(即down事件)后經(jīng)過一系列偽隨機事件后彈出(即up事件)) |
--pct-trackball + {數(shù)字} | --pct-trackball 30 | 軌跡球事件占比(指隨機移動事件而涉,以及偶爾跟隨在移動事件后面的點擊事件) |
--pct-nav + {數(shù)字} | --pct-nav 30 | 基本導(dǎo)航事件占比(指來自方向輸入設(shè)備的上著瓶、下、左啼县、右事件) |
--pct-majornav + {數(shù)字} | --pct-majornav 30 | 主要導(dǎo)航事件占比(指引發(fā)圖形界面的一些動作材原,如鍵盤中間按鍵、返回按鍵季眷、菜單按鍵等) |
--pct-syskeys + {數(shù)字} | --pct-syskeys 30 | 系統(tǒng)按鍵事件占比(指僅供系統(tǒng)使用的保留按鍵余蟹,如HOME鍵、BACK鍵瘟裸、撥號鍵客叉、掛斷鍵、音量鍵等) |
--pct-appswtich + {數(shù)字} | --pct-appswtich 30 | 應(yīng)用啟動事件占比(指打開應(yīng)用话告,通過調(diào)用 startActivity() 方法最大限度地開啟該 package下的所有應(yīng)用) |
--pct-anyevent + {數(shù)字} | --pct-anyevent 30 | 其他事件占比(指上文中未涉及的所有其他事件兼搏,如 keypress、不常用的 button 等) |
4沙郭、從 Monkey 日志中看問題:
- 程序無響應(yīng)的問題:在日志中搜索 “ANR”
- 崩潰問題:在日志中搜索 “Exception”佛呻,Java常見異常:
算術(shù)異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉(zhuǎn)換異常:ClassCastException
數(shù)組負下標(biāo)異常:NegativeArrayException
數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
文件已結(jié)束異常:EOFException
文件未找到異常:FileNotFoundException
字符串轉(zhuǎn)換為數(shù)字異常:NumberFormatException
操作數(shù)據(jù)庫異常:SQLException
輸入輸出異常:IOException
違法訪問錯誤:IllegalAccessError
內(nèi)存不足錯誤:OutOfMemoryError
堆棧溢出錯誤:StackOverflowError
其他