Monkey系列之01--基本操作


monkey

一、Monkey是什么

1顶燕、Monkey測試是Android自動化測試的一種手段,是個命令行工具冈爹,可以運(yùn)行在模擬器或?qū)嶋H設(shè)備之中涌攻;

2、Monkey測試本身非常簡單频伤,就是模擬用戶的按鍵輸入恳谎,觸摸屏輸入,手勢輸入等憋肖,看設(shè)備多長時間會出異常因痛;

3、當(dāng)Monkey程序在模擬器或真實(shí)設(shè)備運(yùn)行的時候岸更,程序會產(chǎn)生一定數(shù)量或一定時間內(nèi)的隨機(jī)模擬用戶操作事件, 如點(diǎn)擊鸵膏,按鍵,手勢等怎炊, 以及一些系統(tǒng)級別的事件谭企;

4、Monkey測試通常也稱隨機(jī)測試或者穩(wěn)定性/健壯性測試或者稱之為壓力測試评肆,類似于軟暴力猴子測試债查,抓起手機(jī)打開APP,一頓狂點(diǎn)瓜挽,各種快速盹廷,高頻,無規(guī)律的隨機(jī)性操作久橙,看app是否能正常相應(yīng)速和,或者出現(xiàn)崩潰歹垫,閃退剥汤,內(nèi)存溢出等等問題

二颠放、Monkey的局限性

1、測試對象僅僅是應(yīng)用程序包吭敢,有一定的局限性

2碰凶、Monkey測試使用的事件流數(shù)據(jù)流是隨機(jī)的,不能進(jìn)行自定義

3鹿驼、可以對測試的對象欲低,事件數(shù)量,類型畜晰,頻率等進(jìn)行設(shè)置

三砾莱、Monkey測試的停止條件

1、如果限定了Monkey運(yùn)行在一個或幾個特定的包上凄鼻,那么它會監(jiān)測試圖轉(zhuǎn)到其它包的操作腊瑟,并對其進(jìn)行阻止。

2块蚌、如果應(yīng)用程序崩潰或接收到任何失控異常闰非,Monkey將停止并報錯。

3峭范、如果應(yīng)用程序產(chǎn)生了應(yīng)用程序不響應(yīng)(application not responding)的錯誤财松,Monkey將會停止并報錯。

四纱控、使用monkey的前提

1辆毡、準(zhǔn)備一部安卓手機(jī),Apple是不行的甜害!

2舶掖、手機(jī)最好恢復(fù)為出廠設(shè)置的狀態(tài),如果能root就更好了

3唾那、設(shè)置用成用不黑屏的狀態(tài)访锻,黑屏和鎖屏?xí)绊懨顖?zhí)行

4、手機(jī)不要設(shè)置鎖屏和解鎖密碼闹获,開機(jī)期犬,常亮,沒有人工操作避诽,永遠(yuǎn)不黑屏鎖屏

5龟虎、開啟開發(fā)者選項,允許usb調(diào)試沙庐,如果有調(diào)試選項鲤妥,記得選擇MTP模式

6佳吞、PC電腦上安裝adb tool相關(guān)工具(后續(xù)單獨(dú)寫一篇文章講ADB工具如何安裝配置吧!)

7棉安、usb線將手機(jī)和電腦連接底扳,彈出的提示信任的,選信任贡耽,提示允許usb調(diào)試的請允許調(diào)試

8衷模、Dos窗口cd到你的adb目錄下來執(zhí)行monkey命令(后文的演示環(huán)境下,adb安裝在d盤的adb文件夾下)

9蒲赂、手機(jī)上安裝你要測試的app的包阱冶,這一步不會的,請到此為止滥嘴,別往下看了木蹬!

五、Monkey實(shí)際操作過程

1若皱、首先電腦和手機(jī)通過usb連接镊叁,連接后進(jìn)入adb目錄下全谤,查看一下adb功能是否正常盾鳞,如下圖:

adb相關(guān)

2、在adb目錄下執(zhí)行【adb devices】命令徙垫,就可以看到一個設(shè)備機(jī)已經(jīng)連接可用饺汹,如果不可用蛔添,那么請檢查你的usb調(diào)試選項,開發(fā)者選項是否允許和打開兜辞,下圖顯示device已經(jīng)正秤疲可以使用,我測試的是一臺華為手機(jī):

adb list

3逸吵、手機(jī)安裝上你的apk的測試包凶硅,此時需要知道你的包的ID,才能在命令行里輸入相應(yīng)命令針對這個app進(jìn)行隨時事件測試扫皱,如何知道ID呢足绅?(不是上面的設(shè)備名字,而是app的ID韩脑,也是不你的app的中文名氢妈,而是在系統(tǒng)文件里的一串英文名)在adb目錄下,執(zhí)行命令【adb shell】段多,然后執(zhí)行【pm list packages】首量,列出的清單里,找到你的app的名字,具體怎么判斷加缘,根據(jù)經(jīng)驗(yàn)即可鸭叙,比如我下圖中箭頭所指的是baidu的app,package:后面的【com.XXXX.XXXX】就是應(yīng)用的ID了拣宏,找到你的應(yīng)用ID沈贝,就可以去執(zhí)行測試了(找ID這個過程有幾種方法,這個最簡單一點(diǎn)蚀浆,后文還補(bǔ)充了一種方法)

查看包名

4缀程、在手機(jī)上打開你的app,登錄到應(yīng)用的主頁面市俊,然后在adb的目錄下,執(zhí)行【adb shell monkey -p com.aaa.aaaaaaaa ?-v 500 >F:/monkeylog2018.txt】這條命令的意思是對aaa.aaaaaaaa這個ID應(yīng)用包滤奈,執(zhí)行500次隨機(jī)事件(可能包含點(diǎn)擊摆昧,滑動等等,隨機(jī)生成的蜒程,無法人為控制)绅你,然后執(zhí)行的日志輸出到F盤的monkey2018.txt文件里,輸入命令后昭躺,回車忌锯,等待結(jié)果,在這個時間里你會看到你的手機(jī)的這個app會自動做各種操作领炫,點(diǎn)擊偶垮,滑動等等,都是自動化的帝洪,這就是正在執(zhí)行monkey測試了似舵,我把我公司開發(fā)的app名稱打碼了,命令執(zhí)行很快葱峡,就是這個效果:

執(zhí)行monkey測試

5砚哗、命令執(zhí)行完成,接下來就去看看log吧砰奕,打開F盤自動生成的這個文件蛛芥,詳細(xì)看看都生成了什么內(nèi)容:

輸出日志

六、Monkey日志簡要分析

前四行基本是介紹概況军援,第一行是總計進(jìn)行了多少次隨機(jī)事件仅淑,第二行是告訴你本次測試的app的id,第三四行是說做了什么類型的操作盖溺,第五行開始是介紹這次500次隨機(jī)事件或命令的分布百分比漓糙,至于0-11是什么意思,稍后介紹烘嘱,下面是log的全文昆禽,貼出來看看(#后面是我寫的注釋蝗蛙,不是日志原文):

Monkey: seed=1515610273991 count=500 ? #累計執(zhí)行了多少次隨機(jī)事件

:AllowPackage: com.aaa.aaaaa ? #包名

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// Event percentages: ? ?#事件的分布百分比

//? 0: 15.0% ? ?#觸摸事件百分比

//? 1: 10.0% ? ?#手勢事件百分比

//? 2: 2.0% ? ???#二指縮放事件百分比

//? 3: 15.0%??#軌跡球事件百分比

//? 4: -0.0%??#屏幕旋轉(zhuǎn)事件百分比

//? 5: -0.0%??#基本導(dǎo)航事件百分比

//? 6: 25.0%??#主要導(dǎo)航事件百分比

//? 7: 15.0%??#系統(tǒng)按鈕事件百分比

//? 8: 2.0%??#啟動activity事件百分比

//? 9: 2.0%??#鍵盤輕彈事件百分比

//? 10: 1.0%??#其他事件百分比

:Switch: ?#表示跳轉(zhuǎn)到我們要測試的包的里,命令里制定的包的activity里面activity#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.aaa.aaaa/.activity.SplashActivity;end

#表示允許次intent跳轉(zhuǎn)

? // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.aaa.aaaa/.activity.SplashActivity } in package com.aaa.aaaa

:Sending Trackball (ACTION_MOVE): 0:(-5.0,1.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,1.0)

:Sending Touch (ACTION_DOWN): 0:(844.0,452.0)

:Sending Touch (ACTION_UP): 0:(856.3925,455.1536)

? ? // Injection Failed ? ?#注入touch事件失敗啦醉鳖,為什么呢捡硅?因?yàn)閍pp還沒反應(yīng)過來,它就執(zhí)行下一個命令了盗棵,還有就是app里沒有滑動點(diǎn)擊的功能壮韭,點(diǎn)了也沒反應(yīng)之類的,以后的文章詳細(xì)介紹monkey命令再詳解

:Sending Touch (ACTION_DOWN): 0:(246.0,256.0)

:Sending Touch (ACTION_UP): 0:(244.92224,247.17607)

:Sending Touch (ACTION_DOWN): 0:(428.0,476.0)

:Sending Touch (ACTION_UP): 0:(440.89676,405.66605)

? ? // Injection Failed

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)

:Sending Touch (ACTION_DOWN): 0:(1070.0,1121.0)

:Sending Touch (ACTION_UP): 0:(1073.162,1132.0884)

:Sending Touch (ACTION_DOWN): 0:(641.0,438.0)

:Sending Touch (ACTION_UP): 0:(657.7884,396.05533)

:Sending Trackball (ACTION_MOVE): 0:(0.0,-4.0)

? ? //[calendar_time:2018-01-10 16:32:49.912? system_uptime:16578533]

? ? // Sending event #100 ?#注入事件成功100次

:Sending Trackball (ACTION_MOVE): 0:(1.0,-2.0)

:Sending Touch (ACTION_DOWN): 0:(768.0,1602.0)

:Sending Touch (ACTION_UP): 0:(896.64996,1583.9524)

:Sending Touch (ACTION_DOWN): 0:(1045.0,1781.0)

:Sending Touch (ACTION_UP): 0:(1043.9761,1774.2175)

:Sending Touch (ACTION_DOWN): 0:(1037.0,1271.0)

:Sending Touch (ACTION_UP): 0:(983.8985,1251.1171)

:Sending Touch (ACTION_DOWN): 0:(393.0,1354.0)

:Sending Touch (ACTION_UP): 0:(241.84598,1213.4604)

:Sending Touch (ACTION_DOWN): 0:(737.0,243.0)

:Sending Touch (ACTION_UP): 0:(739.0893,253.83078)

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.aaa.aaaa/.activity.SplashActivity;end

? ? // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.aaa.aaaa/.activity.SplashActivity } in package com.aaa.aaaa

:Sending Touch (ACTION_DOWN): 0:(839.0,474.0)

:Sending Touch (ACTION_UP): 0:(838.525,469.33966)

:Sending Touch (ACTION_DOWN): 0:(150.0,1406.0)

? ? //[calendar_time:2018-01-10 16:32:50.269? system_uptime:16578890]

? ? // Sending event #200

:Sending Touch (ACTION_UP): 0:(122.750374,1494.216)

:Sending Touch (ACTION_DOWN): 0:(548.0,1164.0)

:Sending Touch (ACTION_UP): 0:(562.61395,1165.6589)

:Sending Trackball (ACTION_MOVE): 0:(-5.0,3.0)

? ? // Rejecting start of Intent { act=com.huawei.membranetouch.action.MT_GUIDE pkg=com.huawei.membranetouch cmp=com.huawei.membranetouch/.MtGuideActivity } in package com.huawei.membranetouch

:Sending Touch (ACTION_DOWN): 0:(30.0,474.0)

:Sending Touch (ACTION_UP): 0:(32.203053,478.70514)

:Sending Touch (ACTION_DOWN): 0:(736.0,1180.0)

:Sending Touch (ACTION_UP): 0:(687.7853,1144.4519)

:Sending Trackball (ACTION_MOVE): 0:(-5.0,-4.0)

:Sending Touch (ACTION_DOWN): 0:(278.0,0.0)

:Sending Touch (ACTION_UP): 0:(277.88403,0.0)

:Sending Touch (ACTION_DOWN): 0:(880.0,947.0)

:Sending Touch (ACTION_UP): 0:(892.1809,885.9538)

:Sending Touch (ACTION_DOWN): 0:(543.0,1594.0)

:Sending Touch (ACTION_UP): 0:(573.5902,1647.6938)

:Sending Touch (ACTION_DOWN): 0:(309.0,1204.0)

:Sending Touch (ACTION_UP): 0:(298.53745,1205.275)

Events injected: 500 ?#事件注入了500次纹因,我的log在這篇文章里是刪減了喷屋,都差不多,貼太長沒用

:Sending rotation degree=0, persist=false #發(fā)送屏幕翻轉(zhuǎn) 度=0瞭恰,存留=假

:Dropped: keys=0 pointers=11 trackballs=0 flips=6 rotations=0 ? #丟棄:鍵=0屯曹,指針=11,軌跡球=0惊畏,鍵盤輕彈=6恶耽,屏幕翻轉(zhuǎn)=0

## Network stats: elapsed time=2266ms (0ms mobile, 0ms wifi, 2266ms not connected) ?#網(wǎng)絡(luò)狀態(tài):占用時間=2266ms(手機(jī)0ms,wifi0ms颜启,未連接2266ms)

// Monkey finished ? ?#測試結(jié)束

以上內(nèi)容包含了測試過程的操作和步驟偷俭,以及日志的基本分析,要深入的學(xué)習(xí)monkey還需要深入的分析日志缰盏,這個專題涌萤,下次再寫。

補(bǔ)充:

查看ID其他方法1:要查看設(shè)備中所有的包乳规,在CMD窗口中執(zhí)行以下命令:

? >adb shell

? #cd data/data

? #ls

會列出所有的ID形葬,從中找出自己的ID即可,但是這個方法的前提是root或者說有data目錄的權(quán)限暮的,有的機(jī)器上執(zhí)行這個命令的結(jié)果是拒絕的笙以,并不會列出包名,這種情況下冻辩,用上文提到的方法可以搞定猖腕;這個是全面出擊

查看ID其他方法2: 在手機(jī)連接電腦的情況下,點(diǎn)擊運(yùn)行你要查看id的APP后恨闪,在adb目錄下執(zhí)行這個命令倘感,也可以看到app的ID:

>adb?shell?dumpsys?activity?|?find?"mFocusedActivity" ? ?這個是精準(zhǔn)定位

手機(jī)百度的ID查找

查看ID其他方法3:在adb目錄下執(zhí)行:adb shell pm list packages -3 ? 這個命令是輸出第三方的包,在這列表里選出自己的app

查看第三方包ID



作者碼字辛苦咙咽,凡是讀后有益者老玛,請麻煩給個評價,點(diǎn)個喜歡,如果喜歡我的文章蜡豹,請長期關(guān)注麸粮。2018年,長期更新镜廉。

有興趣溝通交流的可以加QQ群:222728298 ? ?


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弄诲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子娇唯,更是在濱河造成了極大的恐慌齐遵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塔插,死亡現(xiàn)場離奇詭異梗摇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)佑淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門留美,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伸刃,你說我怎么就攤上這事》瓯叮” “怎么了捧颅?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長较雕。 經(jīng)常有香客問我碉哑,道長,這世上最難降的妖魔是什么亮蒋? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任扣典,我火速辦了婚禮,結(jié)果婚禮上慎玖,老公的妹妹穿的比我還像新娘贮尖。我一直安慰自己,他們只是感情好趁怔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布湿硝。 她就那樣靜靜地躺著,像睡著了一般润努。 火紅的嫁衣襯著肌膚如雪关斜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天铺浇,我揣著相機(jī)與錄音痢畜,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛丁稀,可吹牛的內(nèi)容都是我干的吼拥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼二驰,長吁一口氣:“原來是場噩夢啊……” “哼扔罪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桶雀,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矿酵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矗积,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體全肮,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年棘捣,在試婚紗的時候發(fā)現(xiàn)自己被綠了辜腺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡乍恐,死狀恐怖评疗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茵烈,我是刑警寧澤百匆,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站呜投,受9級特大地震影響加匈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仑荐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一雕拼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粘招,春花似錦啥寇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逊笆,卻和暖如春栈戳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背难裆。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工子檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镊掖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓褂痰,卻偏偏與公主長得像亩进,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缩歪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349