mokey測(cè)試相關(guān)知識(shí)

一、什么是Monkey

顧名思義晦毙,Monkey就是猴子生巡, Monkey測(cè)試,就像一只猴子见妒, 在電腦面前孤荣,亂敲鍵盤在測(cè)試。 猴子什么都不懂徐鹤, 只知道亂敲垃环。

通過Monkey程序模擬用戶觸摸屏幕邀层、滑動(dòng)Trackball返敬、 按鍵等操作來對(duì)設(shè)備上的程序進(jìn)行壓力測(cè)試,檢測(cè)程序多久的時(shí)間會(huì)發(fā)生異常寥院。
Monkey測(cè)試是一種為了測(cè)試軟件的穩(wěn)定性劲赠、健壯性的快速有效的方法。

二秸谢、Monkey用來做什么

Monkey 主要用于Android客戶端 壓力測(cè)試的一個(gè)小工具凛澎,主要目的就是為了測(cè)試app 是否會(huì)Crash.

三、Monkey程序介紹

(1) Monkey程序由Android系統(tǒng)自帶估蹄,使用Java語(yǔ)言寫成塑煎,在Android文件系統(tǒng)中的存放路徑是: /system/framework/monkey.jar;
(2) Monkey.jar程序是由一個(gè)名為“monkey”的Shell腳本來啟動(dòng)執(zhí)行臭蚁,shell腳本在Android文件系統(tǒng)中 的存放路徑是:/system/bin/monkey最铁;
(3)Monkey 命令啟動(dòng)方式:
a)可以通過PC機(jī)CMD窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進(jìn)行Monkey測(cè)試

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

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

四冷尉、Monkey的啟動(dòng)與停止

monkey的啟動(dòng)很簡(jiǎn)單,可以通過兩種方式來啟動(dòng)monkey命令:1.PC端啟動(dòng):

adb shell monkey -p packagename -vvv 1000 

2.shell環(huán)境中啟動(dòng):

adb shell
monkey -p packagename -vvv 1000

那么這兩種不同的啟動(dòng)方式有啥區(qū)別呢系枪?
他們不同就在于在PC端啟動(dòng)的monkey運(yùn)行的log日志可以保存在pc端雀哨,shell環(huán)境中啟動(dòng)的monkey,日志就只能保存在手機(jī)中,譬如:
adb shell monkey -p packagename -vvv 1000 >D:\log.txt此時(shí)monkey的運(yùn)行日志保存在了D盤下的log.txt文件中

五雾棺、Monkey中止方法

Monkey一旦運(yùn)行起來膊夹,就無法停止,直到事件完成或者異常終止執(zhí)行捌浩,自己在剛接出的時(shí)候割疾,如果中途想停止就是扣電池或者重啟手機(jī)(這個(gè)相當(dāng)麻煩),后來發(fā)現(xiàn)monkey啟動(dòng)后混啟動(dòng)一個(gè)“com.android.commands.monkey”為包名的進(jìn)程嘉栓,發(fā)現(xiàn)它之后就可以優(yōu)雅的關(guān)閉monkey了宏榕,我們可以殺掉monkey進(jìn)程來關(guān)機(jī)monkey。
1.通過 adb shell ps | grep monkey 獲取monkey的PID
2.使用adb shell kill pid 來停止monkey服務(wù)

六侵佃、Monkey的架構(gòu)

Monkey 運(yùn)行在設(shè)備或模擬器上面麻昼,可以脫離PC運(yùn)行(普遍做法是將monkey作為一個(gè)像待測(cè)應(yīng)用發(fā)送 隨機(jī)按鍵消息的測(cè)試工具。驗(yàn)證待測(cè)應(yīng)用在這些隨機(jī)性的輸入面前是否會(huì)閃退或者崩潰)

七馋辈、Monkey 參數(shù)大全

壓力測(cè)試指令:monkey -p 包名 [參數(shù)] -v (-v -v) 執(zhí)行次數(shù) >導(dǎo)出log文件抚芦。參數(shù)名比例相加是100。
adb shell monkey -p com.activitage --pct-touch 80 --pct-motion 15 --pct-nav 5 -s 900 –ignore-crashes –ignore-timeouts --throttle 800 -v 10000


八迈螟、獲取包名的方法:

adb shell
pm list packages

其他方法:
1)手機(jī)中安裝APK包名查看器
2)源碼下的AndroidManifest.xml文件查看
3)aapt命令查看

九叉抡、Monkey 命令、基本參數(shù)介紹

-p <允許的包名列表>
用此參數(shù)指定一個(gè)或多個(gè)包答毫。指定包之后褥民,monkey將只允許系統(tǒng)啟動(dòng)指定的app。如果不指定

包洗搂,monkey將允許系統(tǒng)啟動(dòng)設(shè)備中的所有app消返。

指定一個(gè)包:adb shell monkey -p com.shjt.map 100

指定多個(gè)包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100

-v
用于指定反饋信息級(jí)別(信息級(jí)別就是日志的詳細(xì)程度),總共分3個(gè)級(jí)別耘拇,分別對(duì)應(yīng)的參數(shù)如下表所示:

Level 0 :adb shell monkey -p com.shjt.map -v 100 // 缺省值撵颊,僅提供啟動(dòng)提示、測(cè)試完成和最終結(jié)果等少量信息

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

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

-s(隨機(jī)數(shù)種子)
用于指定偽隨機(jī)數(shù)生成器的seed值,如果seed相同嘉涌,則兩次Monkey測(cè)試所產(chǎn)生的事件序列也相同的妻熊。示例:

monkey測(cè)試1:adb shell monkey -p com.shjt.map –s 10 100

monkey測(cè)試2:adb shell monkey -p com.shjt.map –s 10 100

--throttle <毫秒>
用于指定用戶操作(即事件)間的時(shí)延,單位是毫秒洛心;如果不指定這個(gè)參數(shù)固耘,monkey會(huì)盡可能快的 生成和發(fā)送消息。

示例:adb shell monkey -p com.shjt.map --throttle 3000 100

monkey配置命令例子:

adb shell monkey -p com.activitage  --pct-touch 80 --pct-motion 15 --pct-nav 5 -s 900 –ignore-crashes –ignore-timeouts --throttle 800 -v 10000

1.-p:指定被測(cè)應(yīng)用的包名词身,指定被測(cè)應(yīng)用的包名后厅目,monkey運(yùn)行并啟動(dòng)該應(yīng)用的main Activity。
2.--pct-touch:指定monkey生成觸摸事件的百分比
3.--pct-motion:設(shè)置monkey生成用戶手勢(shì)放的百分比對(duì)于常見的大多數(shù)應(yīng)用來說,這兩種操作事件是最常見的损敷,所以我們一般會(huì)將它們的比率設(shè)置相對(duì)高一點(diǎn)
4.-s:指定monkey的隨機(jī)種子數(shù)葫笼,monkey相同的隨機(jī)種子生成的事件是相同的,這樣可以幫助我們發(fā)現(xiàn)和定位問題
5:一般情況下monkey在運(yùn)行發(fā)生奔潰或者應(yīng)用無響應(yīng)(ARN)的時(shí)候會(huì)終止運(yùn)行拗馒,我們?yōu)榱四軌蜃宮onkey在奔潰和ARN的時(shí)候繼續(xù)運(yùn)行路星,
指定–ignore-crashes和–ignore-timeouts參數(shù),monkey可以繼續(xù)運(yùn)行
6.--throttle:指定monkey每個(gè)動(dòng)作的時(shí)間間隔诱桂,這里的時(shí)間單位是毫秒洋丐,這個(gè)時(shí)間500左右7.-v:使用它來控制monkey log的級(jí)別

十、Monkey日志分析

1.測(cè)試正常結(jié)束(pass)判斷

// Monkey finished

2.測(cè)試非正常結(jié)束(fail)判斷
1)monkey測(cè)試中出現(xiàn)停止運(yùn)行(crash)現(xiàn)象
在monkeylog的最后邊會(huì)有CRASH的關(guān)鍵字或者在我們的adblog中搜索fatal的關(guān)鍵字:

// CRASH: com.android.browser (pid 8766)
System appears to have crashed at event 74031of 1000000 using seed 100

(2)monkey測(cè)試中出現(xiàn)無響應(yīng)(anr)現(xiàn)象

下邊是以前測(cè)試phone出現(xiàn)的anr現(xiàn)象挥等,monkey log如下:

在monkeylog的最后邊會(huì)有NOT RESPONDING的關(guān)鍵字:

:Sending Touch (ACTION_DOWN): 0:(25.0,153.0)
// NOT RESPONDING: com.android.phone (pid 751)

3)monkey測(cè)試中uncaught exception 停止友绝。

11-01 08:53:27.113: ERROR/AndroidRuntime(1973):Uncaught handler: thread main exiting due to uncaught exception

4)monkey異常停止,但在monkey log中沒有有用log
對(duì)于這一類問題肝劲,我們首先要排查迁客,手機(jī)的adb是否能連接上,是不是有人為的影響辞槐,手機(jī)是否處于開機(jī)狀態(tài)掷漱,是否因?yàn)橹半娏坎蛔悖鴾y(cè)試比較耗電的模塊導(dǎo)致了手機(jī)低電量關(guān)機(jī)等榄檬。

【異常情況】

Monkey 測(cè)試出現(xiàn)錯(cuò)誤后卜范,一般的分析步驟

看Monkey的日志 (注意第一個(gè)swith以及異常信息等)

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

Monkey 執(zhí)行中斷,在log最后也能看到當(dāng)前執(zhí)行次數(shù)
雖然Monkey測(cè)試有部分缺陷丙号,我們無法準(zhǔn)確地得知重現(xiàn)步驟先朦, Monkey測(cè)試所出現(xiàn)的NullPointException, 都是可以在用戶使用時(shí)出現(xiàn)的, 何時(shí)出現(xiàn)只是時(shí)間問題

理論上來說犬缨, Monkey所有的Crash 都需要在發(fā)布前修復(fù)掉。

【拓展】

  • monkey白名單和黑明單的使用

monkey還有對(duì)隱藏的命令,在之前的命令分類中我們見過棉浸。
–pck-blacklist-file<黑名單文件>,
–pck-whitelist-file<白名單文件>,
黑名單和白名單在同一時(shí)間內(nèi)只能使用一個(gè)怀薛,不能同時(shí)使用,來看看怎么使用這兩個(gè)命令:
第一步建立黑白名單文件,黑白名單文件為文本格式迷郑,里面存儲(chǔ)的是要列入黑白名單的包名枝恋,用回車換行區(qū)分,一行一個(gè)包名嗡害,比如創(chuàng)建黑名單black.txt:

image

第二步將剛建好的文件push到手機(jī)上焚碌,如:

adb push d:\black.txt /data/local/tmp

執(zhí)行monkey命令,比如下面的語(yǔ)句:

adb shell monkey --pkg-blacklist-file /data/local/tmp/black.txt --throttle 500  -v v v 10000

此時(shí)monkey運(yùn)行的時(shí)候不去測(cè)試黑名單中的包了霸妹,

轉(zhuǎn)載鏈接
參考鏈接
一個(gè)很好的總結(jié)鏈接

【ANR結(jié)果分析鏈接】
https://testerhome.com/topics/12231
https://blog.csdn.net/qq_15158911/article/details/53444821

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末十电,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹃骂,老刑警劉巖台盯,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異畏线,居然都是意外死亡静盅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寝殴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿叠,“玉大人,你說我怎么就攤上這事蚣常≌恍椋” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵史隆,是天一觀的道長(zhǎng)魂务。 經(jīng)常有香客問我,道長(zhǎng)泌射,這世上最難降的妖魔是什么粘姜? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮熔酷,結(jié)果婚禮上孤紧,老公的妹妹穿的比我還像新娘。我一直安慰自己拒秘,他們只是感情好号显,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躺酒,像睡著了一般押蚤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羹应,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天揽碘,我揣著相機(jī)與錄音,去河邊找鬼园匹。 笑死雳刺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裸违。 我是一名探鬼主播掖桦,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼供汛!你這毒婦竟也來了枪汪?” 一聲冷哼從身側(cè)響起涌穆,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎料饥,沒想到半個(gè)月后蒲犬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岸啡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年原叮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巡蘸。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奋隶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悦荒,到底是詐尸還是另有隱情唯欣,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布搬味,位于F島的核電站境氢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碰纬。R本人自食惡果不足惜萍聊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悦析。 院中可真熱鬧寿桨,春花似錦、人聲如沸强戴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骑歹。三九已至预烙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陵刹,已是汗流浹背默伍。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衰琐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓炼蹦,卻偏偏與公主長(zhǎng)得像羡宙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掐隐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評(píng)論 25 707
  • Lillian_荔黎安閱讀 207評(píng)論 0 0
  • 暗夜虎嘯 拒絕星光環(huán)繞 一如正午驕傲 三尺垂涎嗷嗷 五指俗世撓 七尺堂前折腰 黃發(fā)嘶嚎 不悲晴空寥寥 馬蹄躁 塵埃...
    馮翩閱讀 412評(píng)論 0 1
  • 俗語(yǔ)說一花一物狗热,一世界钞馁。 一個(gè)住院大門,阻斷了與虛幻世界的聯(lián)系匿刮,卻又給我開啟了一個(gè)新的世界僧凰。 在這里,家人總是對(duì)患...
    尚澤_b4fe閱讀 440評(píng)論 0 0
  • 常有人形容某人聲音“有磁性”大部分正常人熟丸、正常場(chǎng)合說話训措,不會(huì)給人磁性之感。 磁性是什么光羞?磁性是一種方向绩鸣。 就像是一...
    伊織隨意寫閱讀 116評(píng)論 0 0