Monkey log 分析

运行命令:

adb shell monkey -p com.android.contacts -v -v -v 30 -- throttle 1000

Log:

:Monkey: seed=1607827353796 count=30  //伪随机种子为1607827353796,事件总数30
:AllowPackage: com.android.contacts   //包名
:IncludeCategory: android.intent.category.LAUNCHER  //包含的类别
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER   //选择主activities
//   - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)//这些非指定包的activity
//   - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
//   + Using main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts) //指定包的activity
//   + Using main activity com.android.contacts.activities.DialtactsActivity (from package com.android.contacts) 
//   - NOT USING main activity com.example.android.notepad.NotePadActivity (from package com.example.android.notepad)
//   - NOT USING main activity com.android.mms.ui.ConversationList (from package com.android.mms)
...//中间的省略,从这可看出手机都安装了哪些应用
//   - NOT USING main activity com.huawei.android.launcher.Launcher (from package com.huawei.android.launcher)
// Seeded: 1607827353796
// 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%
//表示跳转到com.android.contacts包中的.activities.PeopleActivity里
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.contacts/.activities.PeopleActivity;end
//允许此Intent跳转
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.contacts/.activities.PeopleActivity } in package com.android.contacts
//以下是事件间的延迟和发送的各种事件
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 494    // 494
:Sending Key (ACTION_UP): 494    // 494
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(575.0,236.0)
:Sending Touch (ACTION_MOVE): 0:(575.6902,240.57219)
:Sending Touch (ACTION_MOVE): 0:(580.6857,244.19972)
:Sending Touch (ACTION_UP): 0:(581.75305,248.34988)
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(983.0,990.0)
:Sending Touch (ACTION_UP): 0:(986.1901,990.87067)
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-5.0,2.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,1.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-1.0)
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
    // Allowing start of Intent { act=android.intent.action.VIEW dat=content://com.android.contacts/contacts/lookup/1885r23-.1885r24-/24 cmp=com.android.contacts/.activities.ContactDetailActivity } in package com.android.contacts
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 651    // 651
:Sending Key (ACTION_UP): 651    // 651
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(4.0,4.0)
Events injected: 30   //注入事件30
:Sending rotation degree=0, persist=false   //发送屏幕翻转 度=0,存留=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0 //丢弃:键=0,指针=0,轨迹=0,键盘轻弹=0,屏幕翻转=0 
## Network stats: elapsed time=1771ms (0ms mobile, 0ms wifi, 1771ms not connected)  //网络状态:占用时间=1771ms(手机0ms,WiFi 0ms,未连接1771ms)
// Monkey finished //测试完成

从上述代码中可看出,该程序在此次测试中没有问题,若程序出现问题终端将打印出异常供程序员查找错误。

Monkey log异常分析

1、 Null指针异常

空指针异常主要是有NullPointerException异常提示,在Monkey测试过程中,该信息一般记录在plog.log (locat中也有该信息)中。

如果Monkey命令被中断,说明有异常信息并且有对应的打印信息,可以看到如下信息,说明几个问题:

A、android.process.acore该进程出现异常

B、异常信息主要是由于NullPointerException引起的,也就是出现了空指针,导致了acore进程进入debug

C、具体的可以继续分析是由哪个函数的那一行导致的

D、可能同一应用中存在多处的空指针异常,所以一旦出现空指异常后,可以分析和对比log信息,如果不一致的话,需要把新的log信息也一同添加到bug中,如果log信息一直的话,则不需要继续补充没有必要的log信息

2、 debug异常

debug异常主要是由于应用程序本身的错误导致的异常。在Monkey测试过程中,该信息同样记录在plog.log (locat中也有该信息)中。一般情况下,出现该问题,很可能在手动测试时测试到。

A、 com.android.browser该进程进入debug

B、 出现的是IllegalStateException异常,该异常一般多是传递的参数非法或被多次调用时出现的异常

C、 Bug信息提交时,详细信息中一般应该包含如下的log信息,方便开发人员分析和定位。

// 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、 低内存异常

低内存异常一般情况下,主要表现在出现OutOfMemoryError异常或者提示Out of memory,其后果同样表现为抛出OutOfMemoryError异常或者是通过kill process 来杀掉部分进程以释放内存空间,当然如果被kill点关键的进程的话,也就可能导致部分应用会自动的退出。出现该情况时,主要是在进行频繁的进行大量的操作导致的,所以使用手动测试也可能重现。

A、 com.android.elastos.backup该进程出现的异常

B、 出现的是OutOfMemoryError异常,该异常一般多频繁的操作(即多次调用某个函数,存在申请变量空间未释放)导致的

C、 Bug信息提交时,详细信息中同样应该包含如下的log信息,方便开发人员分析和定位。​​​​​​​

// 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#

或者出现如下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、 操作无响应异常

操作无响应的问题,主要表现在Monkey运行过程中,出现某功能无响应,提示是否“强制关闭“或“等待“,同时会打印出相应的log信息,如下:

A、 可以说明com.android.soundrecorder该进程出现的无响应、 出现的是TimerOut异常,该异常一般出现时一般都会又keyDispatchingTimedOut提示。

C、 目前手机中经常出现操作无响应的几个模块包括:clock、camera、soundrecorder、broser等,根据开发人员分析其他模块也是有可能出现操作无响应的。

D、 出现无响应异常,一般情况下很难被修复,和发送事件的频率也是有关系的,从质量上来要求的话,要求尽可能的减少出现操作无响应的频率和时间。

// 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异常(系统重新启动),即log信息的最后几行会看到Restart System的打印信息,说明手机被自动的重启或断掉,有几个方面的原因

1、 运行过程中,存在异常手机被自动重启

2、 手机在运行过程中,进入设置中的恢复出场设置,导致手机重启

3、 其他原因,如果手机后盖移动等

B、 RuntimeException等异常,同样的会在plog.log中可以看到相应的打印信息, java.lang.RuntimeException该问题多出现在操作无响应之后,或者是某应用的服务无法启动或连接时,需要具体问题具体的分析

C、 StaleDataException、readException等异常, 在plog.log中可以看到相应的打印信息,也会有相应的信息: android.database.StaleDataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析

D、 IllegalArgumentException等异常,多少情况下为说明向函数传递了一个不正确或不合法的参数需要具体问题具体的分析

E、 其他,带补充和分析说明

 

说明几点:

1、在log中搜索关键字,如:ANR、Crash、Exception可快速定位到monkey测试是否出现异常。

2、 log信息的分析,希望在bug信息的简述中能够明确说明清楚出现的是什么异常,具体的log信息要单独添加到详细信息描述中,方便相关人员定位和查看。

3、 提交bug时,对于Monkey测试出现的问题:

      a、 首先应该分析log信息

      b、 再次要确认该bug是否已经提交?已经提交的bug和新运行出来的问题是否一致?

      c、 若不一致,是否属于同一问题?如空指针异常,是的话就把该问题的log信息一起注释到bug信息中,并添加所有的log信息

      d、 若不一致,也不属于同一问题的话,可以提交新的bug

4、 在java编程中,一般的异常都会抛出xxx Exception的信息,可以跟进xxx进行相关的判断和分析,具体的异常则需要具体问题具体分析。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值