Monkey框架(测试方法篇) - monkey日志分析
生活随笔
收集整理的這篇文章主要介紹了
Monkey框架(测试方法篇) - monkey日志分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Monkey日志分析是Monkey測(cè)試中非常重要的一個(gè)環(huán)節(jié),通過日志分析,可以獲取當(dāng)前測(cè)試對(duì)象在測(cè)試過程中是否會(huì)發(fā)生異常,以及發(fā)生的概率,同時(shí)還可以獲取對(duì)應(yīng)的錯(cuò)誤信息,幫助開發(fā)定位和解決問題。介紹日志分析方法之前,先來看一下日志的保存方法。
1.Monkey日志的保存方法
Monkey運(yùn)行日志常見的保存方法有三種: ? 保存在PC中,代碼如下: >adb shell monkey [option] <count> >d:\monkey.txt 執(zhí)行以上命令,Monkey的運(yùn)行日志將被保存在PC上的D盤下的一個(gè)monkey.txt文件中。 ? 保存在手機(jī)中,代碼如下: >adb shell >monkey [option] <count> > /mnt/sdcard/monkey.txt 執(zhí)行以上命令,Monkey的運(yùn)行日志將被保存在手機(jī)中的SD卡上的一個(gè)monkey.txt文件中。 ? 標(biāo)注流與錯(cuò)誤流分開保存,代碼如下: Monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt 執(zhí)行以上命令,Monkey的運(yùn)行日志和異常日志將被分開保存。此時(shí)Monkey的運(yùn)行日志將被保存在monkey.txt文件中,而異常日志將被保存在D盤下的error.txt中。 執(zhí)行結(jié)束后,可以看到SD卡上新增加了monkey.txt和error.txt。monkey.txt顯示運(yùn)行日志,如圖4-7所示。 [插圖] 圖4-7 運(yùn)行日志輸出 如果Monkey執(zhí)行期間存在Crash(崩潰)或ANR(Application Not Responding,應(yīng)用程序無響應(yīng)), error.txt中會(huì)顯示錯(cuò)誤日志,如圖4-8所示。 [插圖] 圖4-8 異常日志輸出2.Monkey日志內(nèi)容解析
Monkey運(yùn)行時(shí)輸出的日志一般包含四類信息,分別是測(cè)試命令信息、偽隨機(jī)事件流信息、異常信息、Monkey執(zhí)行結(jié)果信息。 1)測(cè)試命令信息 Monkey啟動(dòng)后會(huì)輸出當(dāng)前所執(zhí)行命令的各種參數(shù)信息,其中包括種子(Seed)信息、事件數(shù)量、可運(yùn)行的應(yīng)用列表以及各事件百分比等。這些信息都是通過Monkey命令參數(shù)所指定的,這部分日志信息的解析,如代碼清單4-3所示。 代碼清單4-3 Monkey日志-測(cè)試命令信息 //測(cè)試命令信息 //隨機(jī)種子值,執(zhí)行事件數(shù)量 :Monkey: seed=1454215444564 count=10 //可運(yùn)行的應(yīng)用列表 :AllowPackage: com.tencent.android.qqdownloader //Category包含LAUNCHER和MONKEY :IncludeCategory: android.intent.category.LAUNCHER :IncludeCategory: android.intent.category.MONKEY //各事件的百分比 // Event percentages: // 0: 15.0% 事件0:--pct-touch // 1: 10.0% 事件1:--pct-motion // 2: 2.0% 事件2:--pct-pinchzoom // 3: 15.0% 事件3:--pct-trackball // 4: -0.0% 事件4:--pct-rotation // 5: 25.0% 事件5:--pct-nav // 6: 15.0% 事件6:--pct-majornav // 7: 2.0% 事件7:--pct-syskeys // 8: 2.0% 事件8:--pct-appswitch // 9: 1.0% 事件9:--pct-flip // 10: 13.0% 事件10:--pct-anyevent 2)偽隨機(jī)事件流信息 當(dāng)Monkey開始執(zhí)行測(cè)試后,會(huì)順序輸出執(zhí)行的事件流信息,主要是前面提到的11大事件。這部分日志信息的解析,如代碼清單4-4所示。 代碼清單4-4 Monkey日志-偽隨機(jī)事件流信息 //執(zhí)行的事件流信息 //啟動(dòng)App事件 :Switch: #Intent; action=android.intent.action.MAIN; category=android.intent. category.LAUNCHER; launchFlags=0x10200000; component=com.tencent.android. qqdownloader/com.tencent.assistant.activity.SplashActivity; end // Allowing start of Intent { act=android.intent.action.MAIN cat=[android. intent.category.LAUNCHER] cmp=com.tencent.android.qqdownloader/com.tencent. assistant.activity.SplashActivity } in packagecom.tencent.android.qqdownloader //軌跡球事件 :Sending Trackball (ACTION_MOVE): 0:(4.0,2.0) //點(diǎn)擊事件 :Sending Touch (ACTION_DOWN): 0:(387.0,1858.0) :Sending Touch (ACTION_UP): 0:(385.8215,1861.3011) //延時(shí) Sleeping for 0 milliseconds … 3)異常信息 當(dāng)Monkey執(zhí)行過程中遇到錯(cuò)誤時(shí),會(huì)輸出對(duì)應(yīng)異常信息,如代碼清單4-5所示。 代碼清單4-5 Monkey日志-異常信息 //發(fā)送Crash的應(yīng)用包名和pid // CRASH: com.tencent.android.qqdownloader (pid 912) //Crash的簡(jiǎn)要信息 // Short Msg: java.lang.ClassNotFoundException //Crash的詳細(xì)信息 // Long Msg: java.lang.ClassNotFoundException: Didn't find class "com. qq.AppService.AstApp" on path DexPathList[[zip file "/data/app/com.tencent. android.qqdownloader-2.apk"], nativeLibraryDirectories[/data/app-lib/com. tencent.android.qqdownloader-2, /vendor/lib, /system/lib]] //機(jī)型和系統(tǒng)信息 // Build Label: Xiaomi/pisces/pisces:4.4.4/KTU84P/5.12.24:user/release-keys // Build Changelist: 5.12.24 // Build Time: 1450958964000 //Crash的詳細(xì)日志 // java.lang.RuntimeException: Unable to instantiate application com. qq.AppService.AstApp: java.lan.ClassNotFoundException: Didn't find class "com. qq.AppService.AstApp" on path: DexPathList[[zip fil "/data/app/com.tencent. android.qqdownloader-2.apk"], nativeLibraryDirectories=[/data/app-lib/com. tecent.android.qqdownloader-2, /vendor/lib, /system/lib]] // at android.app.LoadedApk.makeApplication(LoadedApk.java:509) // at android.app.ActivityThread.access$1500(ActivityThread.java:138) // at dalvik.system.NativeStart.main(Native Method) // ... 11 more // 4)Monkey執(zhí)行結(jié)果信息 當(dāng)Monkey執(zhí)行完所有事件后,會(huì)輸出執(zhí)行結(jié)果信息,其中包括執(zhí)行的事件數(shù)量、旋轉(zhuǎn)的角度、丟失的事件數(shù)量、網(wǎng)絡(luò)狀態(tài)以及Monkey最終的執(zhí)行結(jié)果,如代碼清單4-6所示。 代碼清單4-6 Monkey日志-執(zhí)行成功結(jié)果信息 //執(zhí)行的事件數(shù)量 Events injected: 10 //旋轉(zhuǎn)的角度為0 :Sending rotation degree=0, persist=false //丟失的事件數(shù)量 :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0 //網(wǎng)絡(luò)狀態(tài),移動(dòng)網(wǎng)絡(luò)聯(lián)網(wǎng)0ms, Wi-Fi聯(lián)網(wǎng)0ms,沒聯(lián)網(wǎng)144ms ## Network stats: elapsed time=144ms (0ms mobile, 0ms wifi, 144ms not connected) // Monkey finished 如果Monkey執(zhí)行過程中出現(xiàn)了異常導(dǎo)致執(zhí)行失敗,會(huì)輸出對(duì)應(yīng)的執(zhí)行失敗的原因,第幾個(gè)事件執(zhí)行失敗以及所使用的隨機(jī)種子數(shù),如代碼清單4-7所示。 代碼清單4-7 Monkey日志-執(zhí)行失敗結(jié)果信息 //顯示Monkey執(zhí)行失敗 ** Monkey aborted due to error. //執(zhí)行的事件數(shù)量 Events injected: 8 //旋轉(zhuǎn)的角度為0 :Sending rotation degree=0, persist=false //丟失的事件數(shù)量 :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0 //網(wǎng)絡(luò)狀態(tài) ## Network stats: elapsed time=405ms (0ms mobile, 0ms wifi, 405ms not connected) //提示在執(zhí)行到第8個(gè)事件時(shí)出現(xiàn)Crash,以及所使用的隨機(jī)種子的值 ** System appears to have crashed at event 8 of 100 using seed 14542168482353.Monkey日志異常信息查找
Monkey執(zhí)行過程中常見的錯(cuò)誤類型主要有兩類:應(yīng)用程序無響應(yīng)(ANR)和崩潰(Crash)。 ANR是指當(dāng)Android系統(tǒng)監(jiān)測(cè)到應(yīng)用程序在5秒內(nèi)沒有響應(yīng)輸入的事件或廣播在10秒內(nèi)沒有執(zhí)行完畢時(shí)拋出無響應(yīng)提示。當(dāng)出現(xiàn)ANR時(shí)彈出的錯(cuò)誤提示框如圖4-9所示。ANR彈窗 Crash是指當(dāng)應(yīng)用程序出現(xiàn)錯(cuò)誤時(shí)導(dǎo)致程序異常停止或退出的情況,當(dāng)出現(xiàn)Crash時(shí)通常會(huì)彈出對(duì)應(yīng)的錯(cuò)誤提示框如圖4-10所示。crash彈窗 要統(tǒng)計(jì)Monkey日志中錯(cuò)誤出現(xiàn)的次數(shù)也非常簡(jiǎn)單,只要搜索關(guān)鍵字“ANR”和“CRASH”出現(xiàn)的次數(shù)即可。由于通常Monkey測(cè)試的日志會(huì)比較大,日志內(nèi)容也非常多,為了簡(jiǎn)化統(tǒng)計(jì)操作,可以使用bat腳本進(jìn)行統(tǒng)計(jì),具體如代碼清單4-8所示。 代碼清單4-8 Monkey日志分析bat腳本 @echo off&setlocal enabledelayedexpansion #設(shè)置所有Monkey日志存放的目錄 set ff=log\*.txt #設(shè)置查詢關(guān)鍵字 set str=CRASH crash ANR died #設(shè)置查詢結(jié)果存放的目錄 set fileName=Result.txt #開始查詢 echo 正在統(tǒng)計(jì)&echo; echo %date% %time% >%fileName% echo.>>%fileName% echo 分析結(jié)果:>>%fileName% echo ---------------------------------------------->>%fileName% #依次打開目錄下每一個(gè)Monkey日志查詢關(guān)鍵字并輸出個(gè)數(shù) (for %%a in (%str%)do ( set n%%a=0&set/p= %%a : <nul>con for /f "delims=" %%b in ('findstr "%%a" "%ff%"')do ( set h=%%b call :yky %%a) echo ! n%%a! >con echo 關(guān)鍵字 %%a 共有 ! n%%a! 處 ))>>%fileName% echo.>>%fileName% #針對(duì)崩潰的日志輸出其所在文件行數(shù) echo 崩潰日志:>>%fileName% findstr "%str%" "%ff%">>%fileName% echo/&pause&exit :yky set/a n%1+=1 set h=! h:*%1=! if defined h if not "! h:*%1=! "=="! h! " goto :yky 最終執(zhí)行后,在腳本目錄下會(huì)生成Result.txt文件記錄異常出現(xiàn)的次數(shù),如圖4-11所示。 圖4-11 日志分析結(jié)果文件 根據(jù)統(tǒng)計(jì)結(jié)果,可以得到Crash和ANR出現(xiàn)的次數(shù),以及出現(xiàn)在哪個(gè)日志文件中,出現(xiàn)該錯(cuò)誤的包名。如果需要更詳細(xì)的錯(cuò)誤信息,可以打開對(duì)應(yīng)的Monkey日志文件查詢。通過詳細(xì)日志信息,測(cè)試可以定位到引起Crash的原因,以及出現(xiàn)Crash的代碼行信息。這里給出常見的一些Crash錯(cuò)誤信息,見表4-7。 表4-7 常見Crash信息表 當(dāng)獲取到Crash和ANR日志信息后,理論上開發(fā)人員就可以開始根據(jù)日志內(nèi)容分析和定位問題了。但事實(shí)上,要定位問題單靠日志信息還是非常困難的,有時(shí)候開發(fā)人員還需要知道問題復(fù)現(xiàn)的場(chǎng)景,同時(shí)增加更多的調(diào)試日志以協(xié)助定位。這時(shí)候,他們可能會(huì)期望測(cè)試能夠復(fù)現(xiàn)問題或者提供問題出現(xiàn)場(chǎng)景和操作步驟。通常,測(cè)試人員可以通過使用同一個(gè)種子數(shù)(seed值),再次執(zhí)行Monkey來嘗試復(fù)現(xiàn)問題。這種方法比較費(fèi)時(shí),并且不是所有的隨機(jī)Crash和ANR都可以通過這種方法來復(fù)現(xiàn)。那問題來了,在Monkey出現(xiàn)問題的時(shí)候有沒有可能即時(shí)地截圖并且記錄下操作步驟呢?Monkey本身是沒有這個(gè)能力的,但是通過一些Monkey改造可以實(shí)現(xiàn)該功能。轉(zhuǎn)載于:https://www.cnblogs.com/Chilam007/p/10941092.html
總結(jié)
以上是生活随笔為你收集整理的Monkey框架(测试方法篇) - monkey日志分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021级新生个人训练赛第38场
- 下一篇: Dirmap:一款高级Web目录文件扫描