日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 获取monkey日志_安卓app测试之Monkey日志分析

發(fā)布時間:2025/3/12 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 获取monkey日志_安卓app测试之Monkey日志分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn):原文:https://blog.csdn.net/a136332462/article/details/76066909

一、一般測試結(jié)果分析-搜索關(guān)鍵字:

1、無響應(yīng)問題可以在日志中搜索 “ANR” 。

2、崩潰問題搜索 “CRASH” 。

3、內(nèi)存泄露問題搜索"GC"(需進(jìn)一步分析)。

4、異常問題搜索 “Exception”(如果出現(xiàn)空指針, NullPointerException,需格外重視)。

詳細(xì)說明

1、 ANR問題:在日志中搜索“ANR”(“Application Not Responding"),說明有bug,出現(xiàn)ANR,一般是主線程的響應(yīng)超過5秒,或者BroadcastReceiver沒有在10秒內(nèi)作出響應(yīng)。這個就是一個比較嚴(yán)重的缺陷。把耗時的操作另起線程來處理就可以了。

2、 崩潰問題:在日志中搜索“Exception”

二. 詳細(xì)分析monkey日志:

將執(zhí)行Monkey生成的log,從手機(jī)中導(dǎo)出并打開查看該log;在log的最開始都會顯示Monkey執(zhí)行的seed值、執(zhí)行次數(shù)和測試的包名。

首先我們需要查看Monkey測試中是否出現(xiàn)了ANR或者異常,具體方法如上述。然后我們要分析log中的具體信息,方法如下:

查看log中第一個Switch,主要是查看Monkey執(zhí)行的是那一個Activity,譬如下面的log中,執(zhí)行的是com.tencent.smtt.SplashActivity,在下一個swtich之間的,如果出現(xiàn)了崩潰或其他異常,可以在該Activity中查找問題的所在。

:Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.tencent.smtt/.SplashActivity;end

// Allowing start of Intent {act=android.intent.action.MAIN cat=

[android.intent.category.LAUNCHER]cmp=com.tencent.smtt/.SplashActivity } in package com.tencent.smtt

在下面的log中,Sending Pointer ACTION_DOWN和Sending Pointer ACTION_UP代表當(dāng)前執(zhí)行了一個單擊的操作;

Sleeping for 500 milliseconds這句log是執(zhí)行Monkey測試時,throttle設(shè)定的間隔時間,每出現(xiàn)一次,就代表一個事件。

SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN ? 代表當(dāng)前執(zhí)行了一個點擊下導(dǎo)航鍵的操作;

Sending Pointer ACTION_MOVE ? ? 代表當(dāng)前執(zhí)行了一個滑動界面的操作。

:Sending Pointer ACTION_DOWN x=47.0 y=438.0

:Sending Pointer ACTION_UP x=47.0 y=438.0Sleeping for 500 milliseconds

:SendKey (ACTION_DOWN): 20 ? //KEYCODE_DPAD_DOWN:SendKey (ACTION_UP): 20 ? //KEYCODE_DPAD_DOWNSleeping for 500 milliseconds

:Sending Pointer ACTION_MOVE x=-2.0 y=3.0

:Sending Pointer ACTION_MOVE x=4.0 y=-3.0

:Sending Pointer ACTION_MOVE x=-5.0 y=-3.0

:Sending Pointer ACTION_MOVE x=3.0 y=4.0

:Sending Pointer ACTION_MOVE x=-4.0 y=1.0

:Sending Pointer ACTION_MOVE x=-1.0 y=-1.0

:Sending Pointer ACTION_MOVE x=-2.0 y=-4.0

如果Monkey測試順利執(zhí)行完成,在log的最后,會打印出當(dāng)前執(zhí)行事件的次數(shù)和所花費的時間;// Monkey finished代表執(zhí)行完成。Monkey執(zhí)行中斷,在log的最后也能查看到當(dāng)前已執(zhí)行的次數(shù)。Monkey執(zhí)行完成的log具體如下:

Events injected: 6000

:Dropped: keys=0 pointers=9 trackballs=0 flips=0

## Network stats: elapsed time=808384ms (0ms mobile, 808384ms wifi, 0msnot connected)

// Monkey finished

三、常見問題的具體分析

1、Null指針異常

空指針異常主要是有NullPointerException異常提示,在Monkey測試過程中,該信息一般記錄在plog.log (locat中也有該信息)中。

如果Monkey命令被中斷,說明有異常信息并且有對應(yīng)的打印信息,可以看到如下信息,說明幾個問題:

A、android.process.acore該進(jìn)程出現(xiàn)異常

B、異常信息主要是由于NullPointerException引起的,也就是出現(xiàn)了空指針,導(dǎo)致了acore進(jìn)程進(jìn)入debug

C、具體的可以繼續(xù)分析是由哪個函數(shù)的那一行導(dǎo)致的,如可以從rollAnimate3dRotate.java文件中的275行查找等。

//at com.android.launcher.LauncherAnimator.ScrollAnimate3dRotate.drawFrame(ScrollAnimate3dRotate.java:275)

D、可能同一應(yīng)用中存在多處的空指針異常,所以一旦出現(xiàn)空指異常后,可以分析和對比log信息,如果不一致的話,需要把新的log信息也一同添加到bug中,如果log信息一直的話,則不需要繼續(xù)補充沒有必要的log信息。

**************************************************************************

// CRASH: android.process.acore (pid 1339)

// Short Msg: java.lang.NullPointerException

// Long Msg: java.lang.NullPointerException

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:e

ng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// java.lang.NullPointerException:

// ? at com.android.launcher.LauncherAnimator.ScrollAnimate3dRotate.drawFrame(ScrollAnimate3dRotate.java:275)

// ? at com.android.launcher.Workspace.dispatchDraw(Workspace.java:605)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1524)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at com.android.launcher.DragLayer.dispatchDraw(DragLayer.java:258)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1524)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at android.view.View.draw(View.java:6329)

// ? at android.widget.FrameLayout.draw(FrameLayout.java:352)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1526)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at android.view.View.draw(View.java:6329)

// ? at android.widget.FrameLayout.draw(FrameLayout.java:352)

// ? at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1901)

// ? at android.view.ViewRoot.draw(ViewRoot.java:1333)

// ? at android.view.ViewRoot.performTraversals(ViewRoot.java:1098)

// ? at android.view.ViewRoot.handleMessage(ViewRoot.java:1618)

// ? at android.os.Handler.dispatchMessage(Handler.java:99)

// ? at android.os.Looper.loop(Looper.java:123)

// ? at android.app.ActivityThread.main(ActivityThread.java:4203)

// ? at java.lang.reflect.Method.invokeNative(Method.java:-2)

// ? at java.lang.reflect.Method.invoke(Method.java:521)

// ? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)

// ? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

// ? at dalvik.system.NativeStart.main(NativeStart.java:-2)

** System appears to have crashed at event 7908 of 5000000 using seed 0

2、debug異常

debug異常主要是由于應(yīng)用程序本身的錯誤導(dǎo)致的異常。在Monkey測試過程中,該信息同樣記錄在plog.log (locat中也有該信息)中。一般情況下,出現(xiàn)的該問題,很可能在手動測試時也可以測試到。

A、com.android.browser該進(jìn)程進(jìn)入debug

B、出現(xiàn)的是IllegalStateException異常,該異常一般多是傳遞的參數(shù)非法或被多次調(diào)用時出現(xiàn)的異常

C、Bug信息提交時,詳細(xì)信息中一般應(yīng)該包含如下的log信息,方便開發(fā)人員分析和定位。

************************************************************************

// CRASH: com.android.browser (pid 5683)

// Short Msg: Connection is not open

// Long Msg: java.lang.IllegalStateException: Connection is not open

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// java.lang.IllegalStateException: Connection is not open

// ? at android.net.http.AndroidHttpClientConnection.assertOpen(AndroidHttpClien

tConnection.java:153)

// ? at android.net.http.AndroidHttpClientConnection.setSocketTimeout(AndroidHtt

pClientConnection.java:195)

// ? at android.net.http.Connection.openHttpConnection(Connection.java:364)

// ? at android.net.http.Connection.processRequests(Connection.java:225)

// ? at android.net.http.ConnectionThread.run(ConnectionThread.java:116)

** System appears to have crashed at event 34155 of 5000000 using seed 0**

3、低內(nèi)存異常

低內(nèi)存異常一般情況下,主要表現(xiàn)在出現(xiàn)OutOfMemoryError異常或者提示Out of memory,其后果同樣表現(xiàn)為拋出OutOfMemoryError異常或者是通過kill process 來殺掉部分進(jìn)程以釋放內(nèi)存空間,當(dāng)然如果被kill點關(guān)鍵的進(jìn)程的話,也就可能導(dǎo)致部分應(yīng)用會自動的退出。出現(xiàn)該情況時,主要是在進(jìn)行頻繁的進(jìn)行大量的操作導(dǎo)致的,所以使用手動的方式也是可能進(jìn)行重現(xiàn)的。

A、com.android.elastos.backup該進(jìn)程出現(xiàn)的異常

B、出現(xiàn)的是OutOfMemoryError異常,該異常一般多頻繁的操作(即多次調(diào)用某個函數(shù),存在申請變量空間未釋放)導(dǎo)致的

C、Bug信息提交時,詳細(xì)信息中同樣應(yīng)該包含如下的log信息,方便開發(fā)人員分析和定位。

// CRASH: com.android.elastos.backup (pid 1581)

// Short Msg: bitmap size exceeds VM budget

// Long Msg: java.lang.OutOfMemoryError: bitmap size exceeds VM budget

// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/release-keys

// Build Changelist: -1

// Build Time: 1271397239

// ID:

// Tag: AndroidRuntime

// java.lang.OutOfMemoryError: bitmap size exceeds VM budget

// ? at android.graphics.Bitmap.nativeCreate(Bitmap.java:-2)

// ? at android.graphics.Bitmap.createBitmap(Bitmap.java:464)

// ? at android.graphics.Bitmap.createBitmap(Bitmap.java:431)

// ? at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:336)

// ? at android.widget.AbsListView.preScaleBitmapBG(AbsListView.java:2354)

// ? at android.widget.AbsListView.draw(AbsListView.java:2365)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1526)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at android.view.View.draw(View.java:6329)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1526)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at android.view.View.draw(View.java:6329)

// ? at android.widget.FrameLayout.draw(FrameLayout.java:352)

// ? at android.view.ViewGroup.drawChild(ViewGroup.java:1526)

// ? at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

// ? at android.view.View.draw(View.java:6329)

// ? at android.widget.FrameLayout.draw(FrameLayout.java:352)

// ? at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1901)

// ? at android.view.ViewRoot.draw(ViewRoot.java:1333)

// ? at android.view.ViewRoot.performTraversals(ViewRoot.java:1098)

// ? at android.view.ViewRoot.handleMessage(ViewRoot.java:1618)

// ? at android.os.Handler.dispatchMessage(Handler.java:99)

// ? at android.os.Looper.loop(Looper.java:123)

// ? at android.app.ActivityThread.main(ActivityThread.java:4203)

// ? at java.lang.reflect.Method.invokeNative(Method.java:-2)

// ? at java.lang.reflect.Method.invoke(Method.java:521)

// ? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)

// ? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

// ? at dalvik.system.NativeStart.main(NativeStart.java:-2)

** System appears to have crashed at event 143290 of 100000000 using seed 0#

或者出現(xiàn)plog信息的最后出現(xiàn)如下log信息也可能存在同樣問題:

<3>[56351.640641] Out of memory: kill process 14177 (app_process) score 247872 or a child

<3>[56351.641121] Killed process 14177 (app_process)

4、操作無響應(yīng)異常

操作無響應(yīng)的問題,主要表現(xiàn)在Monkey運行過程中,出現(xiàn)某功能無響應(yīng),提示是否“強制關(guān)閉“或“等待“,同時會打印出相應(yīng)的log信息,如下:

A、可以說明com.android.soundrecorder該進(jìn)程出現(xiàn)的無響應(yīng)

B、出現(xiàn)的是TimerOut異常,該異常一般出現(xiàn)時一般都會又keyDispatchingTimedOut提示

C、目前,uPhone手機(jī)中經(jīng)常出現(xiàn)操作無響應(yīng)的幾個模塊包括:clock、camera、soundrecorder、broser等,根據(jù)開發(fā)人員分析其他模塊也是有可能出現(xiàn)操作無響應(yīng)的,測試過程中,請多注意。

D、出現(xiàn)無響應(yīng)異常,一般情況下很難被修復(fù),和發(fā)送事件的頻率也是有關(guān)系的,從質(zhì)量上來要求的話,要求盡可能的減少出現(xiàn)操作無響應(yīng)的頻率和時間。

// NOT RESPONDING: com.android.soundrecorder (pid 1931)

ANR in process: com.android.soundrecorder (last in com.android.soundrecorder)

Annotation: keyDispatchingTimedOut

CPU usage:

Load: 8.24 / 8.41 / 8.25

CPU usage from 35911ms to 83ms ago:

com.android.soundrecorder: 4% = 3% user + 0% kernel / faults: 997 minor 43 maj

or

mediaserver: 2% = 2% user + 0% kernel / faults: 267 minor 3 major

android.process.media: 2% = 0% user + 1% kernel / faults: 563 minor 194 major

system_server: 1% = 1% user + 0% kernel / faults: 1279 minor 5 major

com.cootek.touchpal: 0% = 0% user + 0% kernel / faults: 180 minor 1 major

sensorserver_ya: 0% = 0% user + 0% kernel / faults: 47 minor 1 major

mmcqd: 0% = 0% user + 0% kernel

app_process: 0% = 0% user + 0% kernel / faults: 203 minor 1 major

com.fihtdc.brservice: 0% = 0% user + 0% kernel / faults: 29 minor

kswapd0: 0% = 0% user + 0% kernel

com.android.settings: 0% = 0% user + 0% kernel / faults: 266 minor

port-bridge: 0% = 0% user + 0% kernel / faults: 19 minor

rpcrouter: 0% = 0% user + 0% kernel

com.android.mms: 0% = 0% user + 0% kernel / faults: 135 minor 8 major

TOTAL: 13% = 8% user + 4% kernel + 0% iowait

procrank:

PID ? ? ?Vss ? ? ?Rss ? ? ?Pss ? ? ?Uss ?cmdline

1209 ? 35368K ? 25376K ? 15283K ? 14036K ?system_server

1342 ? 32788K ? 24596K ? 14899K ? 14136K ?android.process.acore

……

// procrank status was 0

anr traces:

// meminfo status was 0

** System appears to have crashed at event 59034 of 5000000 using seed 0

5、其他異常

A、Restart System異常(系統(tǒng)重新啟動),即log信息的最后幾行會看到Restart System的打印信息,說明手機(jī)被自動的重啟或斷掉,有幾個方面的原因

1、運行過程中,存在異常手機(jī)被自動重啟

2、手機(jī)在運行過程中,進(jìn)入設(shè)置中的恢復(fù)出場設(shè)置,導(dǎo)致手機(jī)重啟

3、其他原因,如果手機(jī)后蓋移動等

B、RuntimeException等異常,同樣的會在plog.log中可以看到相應(yīng)的打印信息, java.lang.RuntimeException該問題多出現(xiàn)在操作無響應(yīng)之后,或者是某應(yīng)用的服務(wù)無法啟動或連接時,需要具體問題具體的分析

C、StaleDataException、readException等異常, 在plog.log中可以看到相應(yīng)的打印信息,也會有相應(yīng)的信息: android.database.StaleDataException,該信息說明android的數(shù)據(jù)庫操作出現(xiàn)異常, 需要具體問題具體的分析

D、IllegalArgumentException等異常,多少情況下為說明向函數(shù)傳遞了一個不正確或不合法的參數(shù)需要具體問題具體的分析

E、其他,帶補充和分析說明

說明幾點:

1、log信息的分析,希望在bug信息的簡述中能夠明確說明清楚出現(xiàn)的是什么異常,具體的log信息要單獨添加到詳細(xì)信息描述中,方便相關(guān)人員定位和查看。

2、buy的提交,對于Monkey測試出現(xiàn)的問題:

a、首先要求分析log信息

b、再次要確認(rèn)該bug是否已經(jīng)提交?已經(jīng)提交的bug和新運行出來的問題是否一致?

c、如果不一致的話,是否屬于同一問題,如空指針異常,是的話就把該問題的log信息一起注釋到bug信息中,并添加所有的log信息

d、如果不一致的,也不屬于同一問題的話,可以提交新的bug

3、在java編程中,一般的異常都會拋出xxx Exception的信息,可以跟進(jìn)xxx進(jìn)行相關(guān)的判斷和分析,具體的異常則需要具體問題具體分析。

6、常見的java異常

算術(shù)異常類:ArithmeticExecption

空指針異常類:NullPointerException

類型強制轉(zhuǎn)換異常:ClassCastException

數(shù)組負(fù)下標(biāo)異常:NegativeArrayException

數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException

違背安全原則異常:SecturityException

文件已結(jié)束異常:EOFException

文件未找到異常:FileNotFoundException

字符串轉(zhuǎn)換為數(shù)字異常:NumberFormatException

操作數(shù)據(jù)庫異常:SQLException

輸入輸出異常:IOException

違法訪問錯誤:IllegalAccessError

內(nèi)存不足錯誤:OutOfMemoryError

堆棧溢出錯誤:StackOverflowError 1

四.percent相關(guān)命令控制了事件類型,如果我們不指定事件類型。生成的報告中,事件占比大致如下:

// Event percentages:

// 0: 15.0%

// 1: 10.0%

// 2: 2.0%

// 3: 15.0%

// 4: -0.0%

// 5: 25.0%

// 6: 15.0%

// 7: 2.0%

// 8: 2.0%

// 9: 1.0%

// 10: 13.0%

這里將事件分為了10種類型,分別為:

0:觸摸事件百分比,即參數(shù)--pct-touch

1:滑動事件百分比,即參數(shù)--pct-motion

2:縮放事件百分比,即參數(shù)--pct-pinchzoom

3:軌跡球事件百分比,即參數(shù)--pct-trackball

4:屏幕旋轉(zhuǎn)事件百分比,

5:基本導(dǎo)航事件百分比,即參數(shù)--pct-nav

6:主要導(dǎo)航事件百分比,即參數(shù)--pct-majornav

7:系統(tǒng)事件百分比,即參數(shù)--pct-syskeys

8:Activity啟動事件百分比,即參數(shù)--pct-appswitch

9:鍵盤翻轉(zhuǎn)事件百分比,即參數(shù)--pct-flip

10:其他事件百分比,即參數(shù)--pct-anyevent

總結(jié)

以上是生活随笔為你收集整理的android 获取monkey日志_安卓app测试之Monkey日志分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。