Monkey測(cè)試

一、Monkey簡(jiǎn)介

monkey文檔官方網(wǎng)址

Monkey 是Android SDK提供的一個(gè)命令行工具匠抗, 可以簡(jiǎn)單,方便地運(yùn)行在任何版本的Android模擬器和實(shí)體設(shè)備上。 Monkey會(huì)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入铃肯、觸摸屏輸入为朋、手勢(shì)輸入等)臂拓,適合對(duì)app做壓力測(cè)試,主要目的就是為了測(cè)試app 是否會(huì)Crash习寸。

  • 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;

如果你是一個(gè)android開發(fā)人員鸯匹,當(dāng)你把自己的環(huán)境搭建好之后坊饶,這個(gè)東西已經(jīng)存在了,直接可以使用殴蓬。

(一)匿级、Monkey 命令啟動(dòng)方式

1)可以通過PC機(jī)CMD窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進(jìn)行Monkey測(cè)試

2)在PC上adb shell 進(jìn)入Android系統(tǒng),通過執(zhí)行 monkey {+命令參數(shù)} 來進(jìn)行Monkey 測(cè)試

3)在Android機(jī)或者模擬器上直接執(zhí)行monkey 命令科雳,可以在Android機(jī)上安裝Android終端模擬器

(二)根蟹、Monkey 參數(shù)

測(cè)試?yán)樱╟om.haijia.test 是測(cè)試的應(yīng)用包名):

adb shell monkey –p com.haijia.test –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >d:\monkey.txt
-v : 用于指定反饋信息級(jí)別(信息級(jí)別就是日志的詳細(xì)程度),總共分3個(gè)級(jí)別糟秘,分別對(duì)應(yīng)的參數(shù)如下 表所示:
 // 缺省值简逮,僅提供啟動(dòng)提示、測(cè)試完成和最終結(jié)果等少量信息   
Level 0  :  adb shell monkey -p com.haijia.test -v 100              

 // 提供較為詳細(xì)的日志尿赚,包括每個(gè)發(fā)送到Activity的事件信息
Level 1  :  adb shell monkey -p com.haijia.test -v  -v 100         

// 最詳細(xì)的日志散庶,包括了測(cè)試中選中/未選中的Activity信息
Level 2  :  adb shell monkey -p com.haijia.test -v  -v  -v 100     

-throttle <毫秒>

用于指定事件之間的間隔時(shí)間 蕉堰,單位是毫秒;如果指定這個(gè)參數(shù)悲龟,monkey會(huì)盡可能快的 生成和發(fā)送消息屋讶。 示例:

adb shell monkey -p pkgname --throttle 3000 100  
-s(隨機(jī)數(shù)種子)

用于指定偽隨機(jī)數(shù)生成器的seed值,如果seed相同须教,則兩次Monkey測(cè)試所產(chǎn)生的事件序列也相同的皿渗。 示例:

adb shell monkey -p pkgname –s 10 100                

-p <允許的包名列表>

用此參數(shù)指定一個(gè)或多個(gè)包。指定包之后轻腺,monkey將只允許系統(tǒng)啟動(dòng)指定的app乐疆。如果丌指定包, monkey將允許系統(tǒng)啟動(dòng)設(shè)備中的所有app贬养。

指定一個(gè)包:adb shell monkey -p pkgname 100   

指定多個(gè)包:adb shell monkey -p pkgname1  –p pkgname2  100  
touch:設(shè)置觸摸事件
adb shell monkey -pct-touch :指定touch事件的百分比percent 
motion:設(shè)置動(dòng)作事件
adb shell monkey -pct-motion :指定motion事件的百分比percent 
trackball:設(shè)置軌跡球事件
adb shell monkey -pct-trackball :指定軌跡球事件百分比percent 
nav:導(dǎo)航事件設(shè)置
adb shell monkey -pct-nav :指定基本導(dǎo)航事件百分比percent 
majornav:設(shè)置主要導(dǎo)航事件
adb shell monkey -pct-majornav :設(shè)定主要導(dǎo)航事件百分比percent挤土,兼容中間鍵,返回鍵误算,菜單按鍵 
syskeys:設(shè)置事件
adb shell monkey -pct-syskeys :設(shè)定系統(tǒng)事件百分比percent仰美,比如HOME,BACK,撥號(hào)及音量調(diào)節(jié)等事件。
appswitch:啟動(dòng)Activity事件
adb shell monkey -pct-appswitch :設(shè)定啟動(dòng)activity的事件百分比percent 
anyevent:不常用事件設(shè)置
adb shell monkey -pct-anyevent :設(shè)定不常用事件地百分比
syskeys:設(shè)置事件
adb shell monkey -pct-syskeys :設(shè)定系統(tǒng)事件百分比percent儿礼,比如HOME,BACK,撥號(hào)及音量調(diào)節(jié)等事件咖杂。
crashes :程序崩潰事件設(shè)置
adb shell monkey -ignore-crashes :忽略崩潰和異常事件 
timeouts:超時(shí)事件設(shè)置
adb shell monkey -ignore-timeouts :忽略超時(shí)事件 

(三)關(guān)于測(cè)試命令

1、adb install xx.apk:

把指定的安裝包apk文件安裝到測(cè)試設(shè)備中蚊夫。

2翰苫、adb shell monkey:

給指定的設(shè)備發(fā)送壓力測(cè)試,number是要測(cè)試的次數(shù)。執(zhí)行這個(gè)命令的效果就相當(dāng)于有個(gè)手指在你的手機(jī)上亂點(diǎn)这橙。

adb shell monkey -p com.xx.xx 10
3奏窑、adb shell monkey -p pkgname:

同上面效果一樣,只是對(duì)指定包名(pkgname)apk進(jìn)行測(cè)試屈扎。

4埃唯、查看adb 版本
adb version
5、查看當(dāng)前可用設(shè)備
adb devices
6鹰晨、查看monkey 幫助
adb shell monkey -help
7墨叛、--ignore-crashes 運(yùn)行中忽略crash,遇到crash依然把后面的事件跑完
adb shell monkey --ignore-crashes -v 100
8模蜡、--ignore-timeouts 運(yùn)行中忽略ANR,遇到ANR依然把后面的事件跑完
adb shell monkey --ignore-timeouts -v 100
9漠趁、--ignore-native-crashes 忽略monkey本身的異常,直到事件執(zhí)行完畢
adb shell monkey --ignore-native-crashes -v 100
10忍疾、運(yùn)行并生成.txt的日志文件
adb shell monkey -p com.xxxx.xxx.xxx -v -v -v 1000 > Desktop/monkeytestOne.txt

(四)Monkey 日志分析

生成的文件大致如下(Monkey finished 代表執(zhí)行完成):
:Monkey: seed=1506157309339 count=500
:AllowPackage: com.haijia.test
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
//   - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.contacts.activities.DialtactsActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.deskclock.AlarmsMainActivity (from package com.android.deskclock)
//   - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)

// Seeded: 1506157309339
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: -0.0%
//   6: 25.0%
//   7: 15.0%
//   8: 2.0%
//   9: 2.0%
//   10: 1.0%
//   11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.haijia.test/com.stub.plugin.Stub01;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/com.stub.plugin.Stub01 } in package com.haijia.test
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/.activity.GuideActivity } in packagecom.haijia.test
    // activityResuming(com.haijia.test)
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Touch (ACTION_UP): 0:(250.74362,575.5601)
Sleeping for 0 milliseconds
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.haijia.test/com.stub.plugin.Stub01;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/com.stub.plugin.Stub01 } in package com.haijia.test
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
    // Allowing start of Intent { cmp=com.haijia.test/.activity.LoginByPhoneActivity } in package com.zcya.vtsp
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,1.0)
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
    // activityResuming(com.zcya.vtsp)
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_MOVE): 0:(389.88348,823.37866)
Events injected: 500
:Sending rotation degree=0, persist=false
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.zcya.vtsp/.activity.GuideActivity } in package com.zcya.vtsp
:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=4983ms (0ms mobile, 0ms wifi, 4983ms not connected)
// Monkey finished

異常情況

Monkey 測(cè)試出現(xiàn)錯(cuò)誤后闯传,一般的分析步驟
看Monkey的日志 (注意第一個(gè)swith以及異常信息等)

  1. 程序無響應(yīng)的問題: 在日志中搜索 “ANR”
  2. 崩潰問題:在日志中搜索 “Exception” (如果出現(xiàn)空指針, NullPointerException) 肯定是有bug卤妒。

另外附上小米的測(cè)試命令例子

adb shell monkey -v –throttle 300 –pct-touch 30

–pct-motion 20 –pct-nav 20 –pct-majornav 15 –pct-appswitch 5

–pct-anyevent 5 –pct-trackball 0 –pct-syskeys 0 -p ‘%s’ 1000
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甥绿,一起剝皮案震驚了整個(gè)濱河市字币,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌共缕,老刑警劉巖洗出,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異图谷,居然都是意外死亡翩活,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門便贵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅茎,“玉大人,你說我怎么就攤上這事嫉沽。” “怎么了俏竞?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵绸硕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我魂毁,道長(zhǎng)玻佩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任席楚,我火速辦了婚禮咬崔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烦秩。我一直安慰自己垮斯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布只祠。 她就那樣靜靜地躺著兜蠕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抛寝。 梳的紋絲不亂的頭發(fā)上熊杨,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音盗舰,去河邊找鬼晶府。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钻趋,可吹牛的內(nèi)容都是我干的川陆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛮位,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼书劝!你這毒婦竟也來了进倍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤购对,失蹤者是張志新(化名)和其女友劉穎猾昆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骡苞,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垂蜗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了解幽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴见。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖躲株,靈堂內(nèi)的尸體忽然破棺而出片部,到底是詐尸還是另有隱情,我是刑警寧澤霜定,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布档悠,位于F島的核電站,受9級(jí)特大地震影響望浩,放射性物質(zhì)發(fā)生泄漏辖所。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一磨德、第九天 我趴在偏房一處隱蔽的房頂上張望缘回。 院中可真熱鬧,春花似錦典挑、人聲如沸酥宴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幅虑。三九已至,卻和暖如春顾犹,著一層夾襖步出監(jiān)牢的瞬間倒庵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工炫刷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擎宝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓浑玛,卻偏偏與公主長(zhǎng)得像绍申,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 注意:應(yīng)該是monkey -p your.package.name -v 500 這條命令极阅,前面沒有adb she...
    Ten_Minutes閱讀 756評(píng)論 0 0
  • Monkey命令行可用的全部選項(xiàng) 常規(guī) --help 列出簡(jiǎn)單的用法胃碾。 -v 命令行的每一個(gè)-v將增加反饋信息的級(jí)...
    宇文臭臭閱讀 832評(píng)論 0 4
  • 1.定義 Monkey是Android中的一個(gè)命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中筋搏。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶...
    JJwhite閱讀 831評(píng)論 0 0
  • monkey定義 Monkey是Android中的一個(gè)命令行工具仆百,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨...
    _想靜靜_閱讀 722評(píng)論 0 1
  • 兩年了奔脐,我以為我已經(jīng)忘記了俄周,但是今夜失眠又哭了,會(huì)想起那段感情髓迎,真的是撕心裂肺峦朗,今年快三十歲了,可是自從跟他談過戀...
    凡鳥閱讀 190評(píng)論 0 0