一污尉、什么是Monkey示弓?
Monkey是Android中的一個(gè)命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中行冰。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入溺蕉、觸摸屏輸入、手勢(shì)輸入等)悼做,實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試疯特。Monkey測(cè)試是一種為了測(cè)試軟件的穩(wěn)定性、健壯性的快速有效的方法肛走。
二漓雅、為什么要用Monkey?
用Monkey來做壓力測(cè)試比人為來做效率高很多,對(duì)提高程序的健壯性有很大幫助。
三邻吞、Monkey的局限性
1组题、 測(cè)試的對(duì)象僅為應(yīng)用程序包,有一定的局限性抱冷。
2崔列、 Monky測(cè)試使用的事件流數(shù)據(jù)流是隨機(jī)的,不能進(jìn)行自定義旺遮。
3赵讯、 可對(duì)MonkeyTest的對(duì)象,事件數(shù)量耿眉,類型边翼,頻率等進(jìn)行設(shè)置。
四跷敬、Monkey的用法
基本語法如下:
$ adb shell monkey [options]
如果不指定options讯私,Monkey將以無反饋模式啟動(dòng)热押,并把事件任意發(fā)送到安裝在目標(biāo)環(huán)境中的全部包西傀。下面是一個(gè)更為典型的命令行示例,它啟動(dòng)指定的應(yīng)用程序桶癣,并向其發(fā)送500個(gè)偽隨機(jī)事件:
$ adb shell monkey -p your.package.name -v 500
其中-p表示對(duì)象包 –v 表示反饋信息級(jí)別
五拥褂、Monkey常用命令
1、九個(gè)事件
--pct-touch 0
調(diào)整觸摸事件的百分比(觸摸事件是一個(gè)down-up事件牙寞,它發(fā)生在屏幕上的某單一位置)(——點(diǎn)擊事件饺鹃,涉及down、up)
--pct-motion 1
調(diào)整動(dòng)作事件的百分比(動(dòng)作事件由屏幕上某處的一個(gè)down事件间雀、一系列的偽隨機(jī)事件和一個(gè)up事件組成) (——注:move事件悔详,涉及down、up惹挟、move三個(gè)事件)
--pct-trackball 2
調(diào)整軌跡事件的百分比(軌跡事件由一個(gè)或幾個(gè)隨機(jī)的移動(dòng)組成茄螃,有時(shí)還伴隨有點(diǎn)擊)--(軌跡球)
--pct-nav 3
調(diào)整“基本”導(dǎo)航事件的百分比(導(dǎo)航事件由來自方向輸入設(shè)備的up/down/left/right組成)
--pct-majornav 4
調(diào)整“主要”導(dǎo)航事件的百分比(這些導(dǎo)航事件通常引發(fā)圖形界面中的動(dòng)作,如:5-way鍵盤的中間按鍵连锯、回退按鍵归苍、菜單按鍵)
--pct-syskeys 5
調(diào)整“系統(tǒng)”按鍵事件的百分比(這些按鍵通常被保留,由系統(tǒng)使用运怖,如Home拼弃、Back、Start Call摇展、End Call及音量控制鍵)
--pct-appswitch 6
調(diào)整啟動(dòng)Activity的百分比吻氧。在隨機(jī)間隔里,Monkey將執(zhí)行一個(gè)startActivity()調(diào)用,作為最大程度覆蓋包中全部Activity的一種方法医男。(從一個(gè)Activity跳轉(zhuǎn)到另一個(gè)Activity)
--pct-flip 7
調(diào)整“鍵盤翻轉(zhuǎn)”事件的百分比砸狞。
--pct-anyevent 8
調(diào)整其它類型事件的百分比。它包羅了所有其它類型的事件镀梭,如:按鍵刀森、其它不常用的設(shè)備按鈕、等等报账。
紅色的數(shù)字對(duì)應(yīng)下面百分比對(duì)應(yīng)的數(shù)字研底。比如下圖中0:15.0%,表示分配--pct-touch事件15%透罢。測(cè)試100次分配15次測(cè)試down-up榜晦。
2、百分比控制
如果在monkey參數(shù)中不指定上述參數(shù)羽圃,這些動(dòng)作都是隨機(jī)分配的乾胶,9個(gè)動(dòng)作其每個(gè)動(dòng)作分配的百分比之和為100%,我們可以通過添加命令選項(xiàng)來控制每個(gè)事件的百分比朽寞,進(jìn)而可以將操作限制在一定的范圍內(nèi)识窿。
我們先來看一下不加動(dòng)作百分比控制,系統(tǒng)默認(rèn)分配事件百分比的情況
命令:adb shell monkey -v -p your.www.com 500
結(jié)果:
再看一下指定事件脑融,控制事件百分比之后的情況
命令:adb shell monkey -v -p your.www.com --pct-anyevent 100 500
結(jié)果:
說明:--pct-anyevent 100表明pct-anyevent所代表的事件的百分比為100%喻频。
六、約束限制及確定對(duì)應(yīng)包名
1、約束限制
-p
1個(gè)-p選項(xiàng)只能用于一個(gè)包。指定多個(gè)包米碰,需要使用多個(gè)-p選項(xiàng)
2、確定測(cè)試包名
利用monkey測(cè)試姻蚓,通過-p參數(shù)確定應(yīng)用程序在Emulator中所對(duì)應(yīng)的包名。步驟如下:
a匣沼、在Eclipse中打開欲測(cè)試的項(xiàng)目狰挡,并在模擬器中執(zhí)行。此時(shí)肛著,他的APK應(yīng)該加載到了Emulator(譯:仿真器圆兵、模擬器)上(
也可以通過命令模式打開模擬器、安裝枢贿、刪除apk
啟動(dòng)模擬器:emulator -avd testtest為模擬器名稱
安裝:adb install c:/xxx.apk
刪除:adb uninstall apk的包名
)
b殉农、在命令行輸入命令:adb shell
c、應(yīng)用程序包都在data目錄中的data目錄下局荚,我們輸入命令:cd data/data進(jìn)入目標(biāo)data文件夾超凳,在執(zhí)行命令:ls愈污,可找到剛才加載項(xiàng)目的應(yīng)用程序包。如下圖所示:
找到對(duì)應(yīng)的包名后轮傍,就可以通過monkey命令來進(jìn)行測(cè)試了暂雹。例如:adb shell monkey -v -p your.www.com 500
隨便說一下,最后的500创夜,表示測(cè)試觸發(fā)500個(gè)事件(500個(gè)事件要按比例分?jǐn)偟?個(gè)事件當(dāng)中杭跪,如何指定不同的事件比例上面已經(jīng)說過了)。
如果在事件之間插入延時(shí)驰吓,使用參數(shù):--throttle 5000 這里的5000為毫秒單位涧尿。通過這個(gè)選項(xiàng),可以降低monkey的執(zhí)行速度檬贰;如果不指定該選項(xiàng)姑廉,Monkey將不會(huì)被延遲,事件將盡可能快的被產(chǎn)生翁涤。
-s 偽隨機(jī)數(shù)生成器的seed值桥言。如果用相同的seed值再次運(yùn)行monkey,它將生成相同的事件序列葵礼,對(duì)9個(gè)事件分配相同的百分比号阿。
-v 命令行的每一個(gè)-v將增加反饋信息的級(jí)別。
至于其它的一些參數(shù)章咧,就百度一下吧倦西,暫時(shí)先寫到這里能真。
七赁严、在monkey測(cè)試中常用的命令組合
1、monkey -p com.yourpackage -v 500 簡(jiǎn)單的輸出測(cè)試的信息粉铐。
2疼约、monkey -p com.yourpackage -v -v -v 500? 以深度為三級(jí)輸出測(cè)試信息。
3蝙泼、monkey -p com.yourpackage --port 端口號(hào) -v 為測(cè)試分配一個(gè)專用的端口號(hào)程剥,不過這個(gè)命令只能輸出跳轉(zhuǎn)的信息及有錯(cuò)誤時(shí)輸出信息。
4汤踏、monkey -p com.yourpackage -s 數(shù)字 -v 500 為隨機(jī)數(shù)的事件序列定一個(gè)值织鲸,若出現(xiàn)問題下次可以重復(fù)同樣的系列進(jìn)行排錯(cuò)。
5溪胶、monkey -p com.yourpackage -v --throttle 3000 500 為每一次執(zhí)行一次有效的事件后休眠3000毫秒搂擦。
八、試?yán)?/p>
在android studio terminal中輸入abd ps 列出手機(jī)中的程序列表(安裝時(shí)包名可能會(huì)發(fā)生變化)
用命令$ adb shell monkey -p your.package.name -v 500進(jìn)行測(cè)試
九哗脖、關(guān)于Monkey測(cè)試的停止條件
Monkey Test執(zhí)行過程中在下列三種情況下會(huì)自動(dòng)停止:
1瀑踢、如果限定了Monkey運(yùn)行在一個(gè)或幾個(gè)特定的包上扳还,那么它會(huì)監(jiān)測(cè)試圖轉(zhuǎn)到其它包的操作,并對(duì)其進(jìn)行阻止橱夭。
2氨距、如果應(yīng)用程序崩潰或接收到任何失控異常,Monkey將停止并報(bào)錯(cuò)棘劣。
3俏让、如果應(yīng)用程序產(chǎn)生了應(yīng)用程序不響應(yīng)(application not responding)的錯(cuò)誤,Monkey將會(huì)停止并報(bào)錯(cuò)茬暇。
通過多次并且不同設(shè)定下的Monkey測(cè)試才算它是一個(gè)穩(wěn)定性足夠的程序舆驶。