原理概括:adb devices---了解包名--adb shell monkey -p 包名 -v 運(yùn)行次數(shù)(多個(gè)參數(shù)的組合形成不同的用例以求最大的覆蓋)--當(dāng)崩潰或無響應(yīng)時(shí)分析monkey日志
常規(guī)monkey命令(可直接在項(xiàng)目里使用):
adb shell monkey -p com.jiochat.jiochatapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>d:\b.log
重現(xiàn)bug:monkey日志搜索關(guān)鍵詞ANR exception,將之前的事件重新操作,尤其是seed值要一模一樣闪唆,如monkey -p 包名 -v seed 0 500
日志分析:查看是否有crash等關(guān)鍵字,找上下文堪夭,進(jìn)行簡單分析將你所能定位的錯(cuò)誤信息發(fā)給開發(fā)。
該工具用于進(jìn)行壓力測試拣凹。 測試人員結(jié)合monkey 打印的日志 和系統(tǒng)打印的日志森爽,開發(fā)人員修改測試中出現(xiàn)的問題。Monkey 是SDK中附帶的一個(gè)工具,所有的事件都是隨機(jī)產(chǎn)生的嚣镜,不帶任何人的主觀性爬迟。
Monkey程序由Android系統(tǒng)自帶,使用Java語言寫成菊匿,在Android文件系統(tǒng)中的存放路徑是:/system/framework/monkey.jar付呕。
Monkey.jar程序是由一個(gè)名為“monkey”的Shell腳本來啟動(dòng)執(zhí)行,shell腳本在Android文件系統(tǒng)中的存放路徑是:/system/bin/monkey跌捆;這樣就可以通過在shell窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進(jìn)行Monkey測試了徽职。
二、monkey測試環(huán)境搭建:運(yùn)行前安裝adb(MONKEY測試使用的是ADB命令佩厚,因此只需要配置ADB環(huán)境即可姆钉。)
1.pc端下載adb命令包,解壓后放到C盤目錄下(也就是jdk抄瓦,sdk潮瓶,下載地址:http://pan.baidu.com/s/1pJ6Yqs7,jdk安裝钙姊,sdk解壓即可毯辅,并配置環(huán)境變量,path加上platform-tools和tools的目錄路徑)
2.手機(jī)通過usb連接電腦煞额,自動(dòng)安裝usb驅(qū)動(dòng)思恐,連接成功
3.驗(yàn)證adb命令能否運(yùn)行
pc端進(jìn)入cmd命令行---進(jìn)入C:\tmg目錄下--運(yùn)行adb shell赤屋,出現(xiàn)$符號證明adb命令運(yùn)行成功,進(jìn)入shell模式
三壁袄、手機(jī)設(shè)置
手機(jī)屏幕超時(shí)設(shè)置為從不關(guān)閉,防止手機(jī)進(jìn)入鎖屏狀態(tài)媚媒。
? ?以htc手機(jī)為例:進(jìn)入設(shè)置-顯示--屏幕待機(jī)--設(shè)置為從不關(guān)閉嗜逻。
四、運(yùn)行monkey
運(yùn)行方式有三種:a.pc機(jī)上 adb shell monkey +參數(shù) ?b pc機(jī)輸入adb shell進(jìn)入到手機(jī)的安卓設(shè)備后再monkey+參數(shù) C手機(jī)設(shè)備上安裝一個(gè)模擬器手機(jī)執(zhí)行monkey+參數(shù)(手機(jī)模擬器可以通過百度搜索或360手機(jī)助手搜a(bǔ)ndroid terminal缭召,安裝即可栈顷,可以在模擬器的命令行中輸入mokey +參數(shù))
下面是第一種方法:
1.查看包名:查看電腦中某一位置的apk文件的包名:PC打開CMD-進(jìn)入TMG目錄-運(yùn)行設(shè)備--查看包名aapt dump badging *.apk(apk文件的路徑,可以直接拖拽)嵌巷。
或者直接查看手機(jī)中存在的apk包萄凤,進(jìn)入adb shell 命令后---手機(jī)的data/data文件夾--ls查看所有包名 找到要測apk的包名
2.運(yùn)行monkey,對此包進(jìn)行300次無規(guī)律點(diǎn)擊搪哪。
或者運(yùn)行monkey靡努,對此包進(jìn)行300次無規(guī)律點(diǎn)擊后將日志導(dǎo)出到電腦的某一位置
adb shell -p 包名 -v 點(diǎn)擊數(shù) >電腦某一位置
3、測試停止后晓折,查看導(dǎo)出的monkey日志惑朦,發(fā)現(xiàn)問題。
在log的最開始都會顯示Monkey執(zhí)行的seed值漓概、執(zhí)行次數(shù)和測試的包名漾月。
首先我們需要查看Monkey測試中是否出現(xiàn)了ANR或者異常,無響應(yīng)問題(ANR問題):在日志中搜索“ANR ”(此處有空格)胃珍, 崩潰問題:在日志中搜索“Exception”梁肿,快速定位到關(guān)鍵事件信息 。然后查看Monkey里面出錯(cuò)前的一些事件動(dòng)作觅彰,并手動(dòng)執(zhí)行該動(dòng)作吩蔑,找出重現(xiàn)步驟,給開發(fā)填抬。
五哥纫、monkey命令詳解
monkey -pcom.tencent.mtaexample -s 23 ?--throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
? ? ? ? 1. ? -p后面接著的對應(yīng)的包名,如果是整機(jī)測試痴奏,就不需要 -ppackage_name
? ? ? ? 2. ? -s后面是對應(yīng)的種子數(shù)蛀骇,好像就是操作步驟,根據(jù)她們測試的經(jīng)驗(yàn)读拆,一般種子數(shù)在23擅憔,同步她們測試的結(jié)果,一般種子的個(gè)數(shù)固定為23檐晕,和她們選擇的操作步驟就是同步的暑诸。
? ? ? ? 3. ? --ignore-crashes --ignore-timeouts 這里是在monkey測試的過程中遇到carash或者timeout的情況時(shí)忽略掉蚌讼,一般不設(shè)置時(shí),出現(xiàn)carash或者timeout時(shí)个榕,Monkey測試會終止篡石。這里是防止Monkey測試終止。
? ? ? ? 4. ? -v 指的是Monkey測試時(shí)打印log級別西采。
5. ? 100000 這里是指點(diǎn)擊的次數(shù)凰萨,根據(jù)她們測試的經(jīng)驗(yàn),對于單個(gè)應(yīng)用程序這個(gè)次數(shù)設(shè)置在100000次就可以了械馆;如果是整機(jī)胖眷,一般設(shè)置在500000次。
/data/local/tmp/log.txt測試的log記錄在手機(jī)上/data/local/tmp/ 下面的log.txt里面霹崎,這個(gè)名字可以自己寫珊搀。
? ? ? ? 6. ? 2>&1 固定的寫法,這個(gè)也很重要尾菇,代表的意思是中間忽略的東東的日志一并輸入到指定的文件中境析。
? ? ? ? 7. ? 最后單獨(dú)的一個(gè)"&" 是一旦Monkey測試開始了,之后可以拔掉數(shù)據(jù)線派诬,不會影響Monkey測試簿晓。
? ? ? ? 8. ? 測試所有模塊 ?monkey ?-s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
六、monkey常用參數(shù)詳解
-v ?日志詳細(xì)程度
Level 0 ?: ?adb shell monkey ?-p fishjoy.control.menu ?-v 100 ? 最簡單(默認(rèn))千埃,除了啟動(dòng)憔儿、測試完成和最終結(jié)果外只提供較少的信息。
Level 1 ?: ?adb shell monkey ?-p fishjoy.control.menu ?-v ?-v 100 ?提供了較為詳細(xì)的測試信息放可,如逐個(gè)發(fā)送到Activity的事件信息
Level 2 ?: ?adb shell monkey ?-p fishjoy.control.menu ?-v ?-v ?-v 100?提供了更多的設(shè)置信息谒臼,如測試中選中或未選中的Activity信息
比較常用的是-v -v -v,一般會保存到指定文件中供開發(fā)人員查找bug原因時(shí)使用
-s(隨機(jī)數(shù)種子)
指定偽隨機(jī)數(shù)生成器的seed值耀里,如果seed相同蜈缤,則兩次Monkey測試所產(chǎn)生的事件序列也相同的。
示例: monkey測試1:adb ?shell ?monkey ?-p fishjoy .control.menu ?–s 10 ?100
? ? ? ? ? monkey測試2:adb ?shell ?monkey ?-p fishjoy .control.menu ?–s 10 ?100
--throttle <毫秒>?
指定用戶操作(即事件)間的時(shí)延冯挎,單位是毫秒底哥;如果不指定這個(gè)參數(shù),monkey會盡可能快的生成和發(fā)送消息房官。
示例:adb ?shell monkey -p fishjoy.control.menu ?--throttle 3000 100?
-p <允許的包名列表>?
用此參數(shù)指定一個(gè)或多個(gè)包趾徽。指定包之后,monkey將只允許系統(tǒng)啟動(dòng)指定的app翰守。如果不指定包孵奶,monkey將允許系統(tǒng)啟動(dòng)設(shè)備中的所有app。
--ignore-security-exception?
作用:通常蜡峰,當(dāng)程序發(fā)生許可錯(cuò)誤(例如啟動(dòng)一些需要許可的Activity)導(dǎo)致的異常時(shí)了袁,Monkey將停止運(yùn)行朗恳。設(shè)置此項(xiàng),Monkey將繼續(xù)發(fā)送事件給系統(tǒng)载绿,直到事件計(jì)數(shù)完成粥诫。
--ignore-timeouts
作用:通常,應(yīng)用程序發(fā)生任何超時(shí)錯(cuò)誤(如“Application Not responding”對話框)Monkey將停止運(yùn)行崭庸,設(shè)置此項(xiàng)怀浆,Monkey將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計(jì)數(shù)完成冀自。
--ignore-crashes
作用:通常,應(yīng)用發(fā)生崩潰或異常時(shí)Monkey會停止運(yùn)行秒啦。如果設(shè)置此項(xiàng)熬粗,Monkey將繼續(xù)發(fā)送事件給系統(tǒng),直到事件計(jì)數(shù)完成余境。
--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í)會伴隨著點(diǎn)擊事件)如不規(guī)則滑動(dòng)解鎖
--pct-nav<percent> 導(dǎo)航顽聂,現(xiàn)在手機(jī)基本沒有導(dǎo)航了
---pct-syskeys<percent> 按鍵消息比例肥惭,主頁、后退紊搪、音量增減
--pct-anyevent 其他不常用的按鍵比例的設(shè)置蜜葱,不常用
--hprof ?monkey測試完成后生成內(nèi)存快照,data/misc路徑下生成耀石,不常用牵囤,比較占空間
--ignore-security-exceptions ?忽略權(quán)限問題的
--kill-process-after-error 當(dāng)錯(cuò)誤發(fā)生時(shí)殺進(jìn)程
--monitor-native-crashes 監(jiān)視崩潰時(shí)的本地代碼
七、殺monkey進(jìn)程
如果想中斷運(yùn)行中的monkey CTRL+C
adb shell ps | grep monkey ?返回進(jìn)程號
adb shell kill [剛才查到的進(jìn)程號]
app包名查看:
a.手機(jī)安裝包名查看器'
?b.aapt命令 ?aapt dump badging *.apk
c滞伟、源碼下的AndroidManifest.xml文件查看
d.adb logcat抓取當(dāng)前Android機(jī)運(yùn)行的app的包名( ?I/ActivityManager(數(shù)字): Displayed 包名/類
名: +ms )
命令行輸入 adb logcat >e:\bag.txt
手機(jī)操控app揭鳞,ctrl+c停止
去e:\bag.txt這個(gè)文件下搜索關(guān)鍵字如Displayed?,一般都能找到