一、Monkey簡(jiǎn)介:
Monkey是Android SDK提供的一個(gè)命令行工具迅矛,可運(yùn)行在任一版本上的模擬器里或真機(jī)上节腐。Monkey可發(fā)送偽隨機(jī)的用戶(hù)事件流,適合對(duì)應(yīng)用進(jìn)行壓力測(cè)試英岭;只針對(duì)Activity做測(cè)試,不能對(duì)Service做測(cè)試湿右。
二谈为、質(zhì)量要求:
版本release(發(fā)布)前,Monkey跑出來(lái)的結(jié)果中crash要為0掷空,final release前宅倒,Monkey跑完的總次數(shù)應(yīng)為25W,結(jié)果里不允許有nullPointException出現(xiàn)丈莺。
三划煮、常用命令參數(shù)
1)? -p? 應(yīng)用包名
例:指定一個(gè)包 ? ? monkey -p com.htc.weather -v 1000
? ? ? ? 指定多個(gè)包 ? ??monkey -p com.htc.weather?-p com.htc.pdfreader -p com.htc.photo.widgets -v 1000
? ? ? ? 不指定包 ? ? ? ???monkey -v 1000
2)-v
Monkey的日志輸出有3個(gè)級(jí)別:默認(rèn)的是level 0, -v -v日志級(jí)別為level 1遏佣, -v -v -v日志級(jí)別為level 2挖炬。日志的級(jí)別越高,越詳細(xì)状婶。為了方便問(wèn)題的定位意敛,將日志級(jí)別設(shè)置為level2。?
3) -s
指定偽隨機(jī)數(shù)生成器的seed值膛虫,如果seed相同草姻,則兩次monkey 測(cè)試產(chǎn)生的事件序列也相同。
例: monkey -p com.htc.weather -s 35 -v 1000
4) --throttle? (毫秒)
指定操作之間的時(shí)間間隔稍刀,一方面是希望能更接近用戶(hù)的操作場(chǎng)景撩独,正常用戶(hù)操作都會(huì)有一定的時(shí)間間隔;另一方面也是不希望因?yàn)檫^(guò)于頻繁的操作而導(dǎo)致系統(tǒng)崩潰,尤其是在比較低端的手機(jī)上執(zhí)行測(cè)試時(shí)跌榔。因此通過(guò)–throttle設(shè)置Monkey每個(gè)操作固定延遲0.5秒异雁。?
5) --pct-xxx
觸摸事件和手勢(shì)事件是用戶(hù)最常見(jiàn)的操作,所以通過(guò)–pct-touch和–pct-motion將這兩個(gè)事件的占比調(diào)整到40%與25%僧须;?
目標(biāo)應(yīng)用包含了多個(gè)Activity纲刀,為了能覆蓋大部分的Activity,所以通過(guò)–pct-appswitch將Activity切換的事件占比調(diào)整到10%担平;?
被測(cè)應(yīng)用之前在測(cè)試中出現(xiàn)過(guò)不少橫豎屏之間切換的問(wèn)題示绊,這個(gè)場(chǎng)景也必須關(guān)注,因此通過(guò)–pct-rotation把橫豎屏切換事件調(diào)整到10%暂论;?
通過(guò)–pct-majornav面褐,調(diào)整“主要”導(dǎo)航事件的百分比調(diào)整到10%(這些導(dǎo)航事件通常引發(fā)圖形界面中的動(dòng)作,如:5-way鍵盤(pán)的中間按鍵取胎、回退按鍵展哭、菜單按鍵)。
注意: 各類(lèi)事件的百分比總和不能超過(guò)100%
6)?--ignore-xxx
運(yùn)行中忽略項(xiàng)闻蛀,設(shè)置后遇到該類(lèi)問(wèn)題將繼續(xù)執(zhí)行monkey指令匪傍;未設(shè)置則會(huì)停止monkey指令。
? ?--ignore-crashes:忽略崩潰
? 通常觉痛,應(yīng)用發(fā)生崩潰或異常時(shí)Monkey會(huì)停止運(yùn)行役衡。如果設(shè)置此項(xiàng),Monkey將繼續(xù)發(fā)送事件給系統(tǒng)薪棒,直到事件計(jì)數(shù)完成手蝎。
? ?--ignore-timeouts:忽略超時(shí)
設(shè)置此項(xiàng)后,當(dāng)應(yīng)用程序發(fā)生任何超時(shí)錯(cuò)誤(如ANR俐芯,即Application Not Responding)時(shí)棵介,monkey將繼續(xù)運(yùn)行直到計(jì)數(shù)完成。如果不設(shè)置此項(xiàng)泼各,monkey遇到此類(lèi)超時(shí)將停止運(yùn)行
--ignore-security-exceptions:忽略安全異常
通常鞍时,當(dāng)程序發(fā)生許可錯(cuò)誤(例如啟動(dòng)一些需要許可的Activity)導(dǎo)致的異常時(shí),Monkey將停止運(yùn)行扣蜻。設(shè)置此項(xiàng),Monkey將繼續(xù)發(fā)送事件給系統(tǒng)及塘,直到事件計(jì)數(shù)完成莽使。
--ignore-native-crashes:忽略本地代碼導(dǎo)致的崩潰
設(shè)置忽略后,Monkey將執(zhí)行完所有的事件笙僚,不會(huì)因此停止
7) 其他
--monitor-native-crashes:用于指定是否監(jiān)視并報(bào)告應(yīng)用程序發(fā)生崩潰的本地代碼
--kill-process-after-error:用于指定當(dāng)應(yīng)用程序發(fā)生錯(cuò)誤時(shí)芳肌,是否停止其運(yùn)行。如果指定此參數(shù),當(dāng)應(yīng)用程序發(fā)生錯(cuò)誤時(shí)亿笤,應(yīng)用程序停止運(yùn)行并保持在當(dāng)前狀態(tài)翎迁。(注意:應(yīng)用程序僅是靜止在發(fā)生錯(cuò)誤時(shí)的狀態(tài),系統(tǒng)并不會(huì)結(jié)束該應(yīng)用程序的進(jìn)程)
–hprof:
使用–hprof在出現(xiàn)內(nèi)存問(wèn)題時(shí)净薛,存儲(chǔ)一份內(nèi)存“快照”
四汪榔、實(shí)操流程
1.獲取應(yīng)用包名
1).adb logcat | find "包名關(guān)鍵字" 或其他指令
2).adb shell pm list packages -3? 顯示所有第三方應(yīng)用
2.連接真機(jī),執(zhí)行adb devices肃拜,確認(rèn)連接成功.
3.執(zhí)行monkey指令
4.同時(shí)獲取更多信息
1)記錄logcat日志信息:?
adb shell logcat -v time > logcat.txt?
2)獲取內(nèi)存信息:?
adb shell dumpsys meminfo?$package_name or?$pid?
3)獲取CPU信息:?
adb shell top -n 1 |findstr?$package_name or?$pid?
4)獲取電量信息:?
adb shell dumpsys battery?
5)獲取GPU信息:?
GPU信息命令:adb shell dumpsys gfxinfo?$package_name or?$pid?
要獲取GPU信息痴腌,在“開(kāi)發(fā)者選項(xiàng)”中打開(kāi)“GPU呈現(xiàn)模式分析”,如圖3所示:
圖3 GPU呈現(xiàn)模式分析
6)獲取流量信息:?
adb shell cat/proc/uid_stat/$uid/tcp_rcv?
adb shell cat/proc/uid_stat/$uid/tcp_snd
4.分析log
一般的測(cè)試結(jié)果分析:
1)燃领、 ANR問(wèn)題:在日志中搜索“ANR”
2)士聪、崩潰問(wèn)題:在日志中搜索“Exception”??