monkey运⾏⽇志基础分析
之前有写过:
monkey命令详解:
要看的移步
这篇主要讲的是在使⽤monkey运⾏结束以后,对⽇志的基础分析,
注意查找⽇志中的⽆响应问题和崩溃问题。⽆响应问题可以在⽇志中搜索 “ANR” ,崩溃问题搜索 “CRASH” ,内存泄露问题搜
索"GC"(需进⼀步分析),异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视)。
⼀. 初步分析⽅法:Monkey测试出现错误后,⼀般的差错步骤为以下⼏步:
1、 找到是monkey⾥⾯的哪个地⽅出错
2、 查看Monkey⾥⾯出错前的⼀些事件动作,并⼿动执⾏该动作
3、 若以上步骤还不能找出,可以使⽤之前执⾏的monkey命令再执⾏⼀遍,注意ed值要⼀样
⼀般的测试结果分析:
1、 ANR问题:在⽇志中搜索“ANR”(“Application Not Responding"),说明有bug,出现ANR,⼀般是主线程的响应超过5秒,或者
BroadcastReceiver没有在10秒内作出响应。这个就是⼀个⽐较严重的缺陷。把耗时的操作另起线程来处理就可以了。
2、 崩溃问题:在⽇志中搜索“Exception”
⼆. 详细分析monkey⽇志:
将执⾏Monkey⽣成的log,从⼿机中导出并打开查看该log;在log的最开始都会显⽰Monkey执⾏的ed值、执⾏次数和测试的包名。
⾸先我们需要查看Monkey测试中是否出现了ANR或者异常,具体⽅法如上述。然后我们要分析log中的具体信息,⽅法如下:
查看log中第⼀个Switch,主要是查看Monkey执⾏的是那⼀个Activity,譬如下⾯的log中,执⾏的是
Activity,在下⼀个swtich之间的,如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。
// Allowing start of Intent {act= cat=
[ER]cmp=/.SplashActivity } in package
在下⾯的log中,Sending Pointer ACTION_DOWN和Sending Pointer ACTION_UP代表当前执⾏了⼀个单击的操作;
Sleeping for 500 milliconds这句log是执⾏Monkey测试时,throttle设定的间隔时间,每出现⼀次,就代表⼀个事件。
SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN 代表当前执⾏了⼀个点击下导航键的操作;
Sending Pointer ACTION_MOVE 代表当前执⾏了⼀个滑动界⾯的操作。
:Sending Pointer ACTION_DOWN x=47.0 y=438.0
:Sending Pointer ACTION_UP x=47.0 y=438.0Sleeping for 500 milliconds
:SendKey (ACTION_DOWN): 20 //KEYCODE_DPAD_DOWN:SendKey (ACTION_UP): 20 //KEYCODE_DPAD_DOWNSleeping
for 500 milliconds
: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测试顺利执⾏完成,在log的最后,会打印出当前执⾏事件的次数和所花费的时间;// Monkey finished代表执⾏完成。
Monkey执⾏中断,在log的最后也能查看到当前已执⾏的次数。Monkey执⾏完成的log具体如下:
Events injected: 6000
:Dropped: keys=0 pointers=9 trackballs=0 flips=0
## Network stats: elapd time=808384ms (0ms mobile, 808384ms wifi, 0msnot connected)
// Monkey finished
三、常见问题的具体分析
1、Null指针异常
空指针异常主要是有NullPointerException异常提⽰,在Monkey测试过程中,该信息⼀般记录在 (locat中也有该信息)中。
如果Monkey命令被中断,说明有异常信息并且有对应的打印信息,可以看到如下信息,说明⼏个问题:
:Switch:#Intent;action=;category=ER;launchFlags=0x10000000;compon
如果Monkey命令被中断,说明有异常信息并且有对应的打印信息,可以看到如下信息,说明⼏个问题:
A、该进程出现异常
B、异常信息主要是由于NullPointerException引起的,也就是出现了空指针,导致了acore进程进⼊debug
C、具体的可以继续分析是由哪个函数的那⼀⾏导致的,如可以从⽂件中的275⾏查找等。
//at ame(:275)
D、可能同⼀应⽤中存在多处的空指针异常,所以⼀旦出现空指异常后,可以分析和对⽐log信息,如果不⼀致的话,需要把新的log信息也
⼀同添加到bug中,如果log信息⼀直的话,则不需要继续补充没有必要的log信息。
**************************************************************************
// CRASH: (pid 1339)
// Short Msg: interException
// Long Msg: interException
// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:e
ng/relea-keys
// Build Changelist: -1
// Build Time: 1271397239
// ID:
// Tag: AndroidRuntime
// interException:
// at ame(:275)
// at chDraw(:605)
// at ild(:1524)
// at chDraw(:1256)
// at chDraw(:258)
// at ild(:1524)
// at chDraw(:1256)
// at (:6329)
// at (:352)
// at ild(:1526)
// at chDraw(:1256)
// at (:6329)
// at (:352)
// at indow$(:1901)
// at (:1333)
// at mTraversals(:1098)
// at Message(:1618)
// at chMessage(:99)
// at (:123)
// at (:4203)
// at Native(:-2)
// at (:521)
// at Init$(:799)
// at (:557)
// at (:-2)
** System appears to have crashed at event 7908 of 5000000 using ed 0
2、debug异常
debug异常主要是由于应⽤程序本⾝的错误导致的异常。在Monkey测试过程中,该信息同样记录在 (locat中也有该信息)中。⼀般
情况下,出现的该问题,很可能在⼿动测试时也可以测试到。
A、r该进程进⼊debug
B、出现的是IllegalStateException异常,该异常⼀般多是传递的参数⾮法或被多次调⽤时出现的异常
C、Bug信息提交时,详细信息中⼀般应该包含如下的log信息,⽅便开发⼈员分析和定位。
************************************************************************
// CRASH: r (炸饺子 pid 5683)
// Short Msg: Connection is not open
// Long Msg: lStateException: Connection is not open
// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/relea-keys
// Build Changeli冷嘲热讽 st: -1
// Build Changelist: -1
// Build Time: 1271397239
// ID:
// Tag: AndroidRuntime
// lStateException: Connection is not open
// at Open(AndroidHttpClien
:153)
// at ketTimeout(AndroidHtt
:195)
// at tpConnection(:364)
// at sRequests(:225)
// at (:116)
** System appears to have crashed at event 34155 of 5000000 using ed 0**
3、低内存异常
低内存异常⼀般情况下,主要表现在出现OutOfMemoryError异常或者提⽰Out of memory,其后果同样表现为抛出
OutOfMemoryError异常或者是通过kill process 来杀掉部分进程以释放内存空间,当然如果被kill点关键的进程的话,也就可能导致部分
应⽤会⾃动的退出。出现该情况时,主要是在进⾏频繁的进⾏⼤量的操作导致的,所以使⽤⼿动的⽅式也是可能进⾏重现的。
A、该进程出现的异常
B、出现的是OutOfMemoryError异常,该异常⼀般多频繁的操作(即多次调⽤某个函数,存在申请变量空间未释放纵欲无度 )导致的
C、Bug信息提交时,详细信息中同样应该包含如下的log信息,⽅便开发⼈员分析和定位。
// CRASH: (pid 1581)
// Short Msg: bitmap size exceeds VM budget
// Long Msg: emoryError: bitmap size exceeds VM budget
// Build Label: android:FIH/msm7627_surf/msm7627_surf/F0X:1.6/DONUT/0001_0_020:eng/relea-keys
// Build Changelist: -1
// Build Time: 1271397239
// ID:
// Tag: AndroidRuntime
// emoryError: bitmap size exceeds VM budget
// at Create(:-2)
// at Bitmap(:464)
// at Bitmap(:431)
// at ScaledBitmap(:336)
// at leBitmapBG(:2354)
// at (:2365)
// at ild(:1526)
// at chDraw(:1256)
// at (:6329)
// at ild(:1526)
// at chDraw(:1256)
// at (:6329)
// at (:352)
// at ild(:1526)
// at chDraw(:1256)
// at (:6329)
// at (:352)
// at indow$(:1901)
// at (:1333)
// at mTraversals(:1098)
// at Message(:1618)
// at chMessage(:99)
// at (:123)
// at (:4203)
// at Native(:-2)
// at (:521)
// at Init$(:799)
// at Init$(:799)
// at (:557)
// at (:-2)
** System appears to have crashed at event 143290 of 100000000 using ed 0#
或者出现plog信息的最后出现如下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、可以说明ecorder该进程出现的⽆响应
B、出现的是TimerOut异常,该异常⼀般出现时⼀般都会⼜keyDispatchingTimedOut提⽰
C、⽬前,uPhone⼿机中经常出现操作⽆响应的⼏个模块包括:clock、camera、soundrecorder、bror等,根据开发⼈员分析其他模
块也是有可能出现操作⽆响应的,测试过程中,请多注意。
D、出现⽆响应异常,⼀般情况下很难被修复,和发送事件的频率也是有关系的,从质量上来要求的话,要求尽可能的减少出现操作⽆响应
的频率和时间。
// NOT RESPONDING: ecorder (pid 1931)
ANR in process: ecorder (last in ecorder)
Annotation: keyDispatchingTimedOut
CPU usage:
Load: 8.24 / 8.41 / 8.25
CPU usage from 35911ms to 83ms ago:
ecorder: 4% = 3% ur + 0% kernel / faults: 997 minor 43 maj
or
mediarver: 2% = 2% ur + 0% kernel / faults: 267 minor 3 major
: 2% = 0% ur + 1% kernel / faults: 563 minor 194 major
system_rver: 1% = 1% ur + 0% kernel / faults: 1279 minor 5 major
al: 0% = 0% ur + 0% kernel / faults: 180 minor 1 major
nsorrver_ya: 0% = 0% ur + 0% kernel / faults: 47 minor 1 major
mmcqd: 0% = 0% ur + 0% kernel
app_process: 0% = 0% ur + 0% kernel / faults: 203 minor 1 major
ice: 0% = 0% ur + 0% kernel / faults: 29 minor
kswapd0: 0% = 0% ur + 0% kernel
gs: 0% = 0% ur + 0% kernel / faults: 266 minor
port-bridge: 0% = 0% ur + 0% kernel / faults: 19 minor
rpcrouter: 0% = 0% ur + 0% kernel
: 0% = 0% ur + 0% kernel / faults: 135 minor 8 major
TOTAL: 13% = 8% ur + 4% kernel + 0% iowait
procrank:
PID Vss Rss Pss Uss cmdline
1209 35368K 25376K 15283K 14036K system_rver
1342 32788K 24596K 14899K 14136K
……
// procrank status was 0
anr traces:
// meminfo status was 0
** System appears to have crashed at event 59034 of 5000000 using ed 0
5、其他异常
A、Restart System异常(系统重新启动),即log信息的最后⼏⾏会看到Restart System的打印信息,说明⼿机被⾃动的重启或断掉,有⼏
个⽅⾯的原因
1、运⾏过程中,存在异常⼿机被⾃动重启
2、⼿机在运⾏过程中,进⼊设置中的恢复出场设置,导致⼿机重启
3、其他原因,如果⼿机后盖移动等
B、RuntimeException等异常,同样的会在中可以看到相应的打印信息, eException该问题多出现在操作⽆响应
B、RuntimeException等异常,同样的会在中可以看到相应的打印信息, eException该问题多出现在操作⽆响应
之后,或者是某应⽤的服务⽆法启动或连接时,需要具体问题具体的分析
C、StaleDataException、readException等异常, 在中可以看到相应的打印信息,也会有相应的信息:
ataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析
D、IllegalArgumentException等异常,多少情况下为说明向函数传递了⼀个不正确或不合法的参数需要具体问题具体的分析
E、其他,带补充和分析说明
说明⼏点:
1、log信息的分析,希望在bug信息的简述中能够明确说明清楚出现的是什么异常,具体的log信息要单独添加到详细信息描述中,⽅便相
关⼈员定位和查看。
2、buy的提交,对于Monkey测试出现的问题:
a、⾸先要求分析log信息
b、再次要确认该bug是否已经提交?已经提交的bug和新运⾏出来的问题是否⼀致?
c、如果不⼀致的话,是否属于同⼀问题,如空指针异常,是的话就把该问题的log信息⼀起注释到bug信息中,并添加所有的log信息
d、如果不⼀致的,也不属于同⼀问题的话,可以提交新的bug
3、在java编程中,⼀般的异常都会抛出xxx Exception的信息,可以跟进xxx进⾏相关的判断和分析,具体的异常则需要具体问题具体分
析。
四.percent相关命令控制了事件类型,如果我们不指定事件类型。⽣成的报告中,事件占⽐⼤致如下:
// 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: 13.0%
这⾥将事件分为了10种类型,分别为:
0:触摸事件百分⽐,即参数--pct-touch
1:滑动事件百分⽐,即参数--pct-motion
2:缩放事件百分⽐,即参数--pct-pinchzoom
3:轨迹球事件百分⽐,即参数--pct-trackball
4:屏幕旋转事件百分⽐,
5:基本导航事件百分⽐,即参数--pct-nav
6:主要导航事件百分⽐,即参数--pct-majornav
7:系统事件百分⽐,即参数--pct-syskeys
8:Activity启动事件百分⽐,即参数--pct-appswitch
9:键盘翻转事件百分⽐,即参数--pct-flip
10:其他事件百分⽐,即参数--pct-anyevent
更为具体的类型信息,可以查看查看Monkey源码中的⽂件。
五.以下内容为android系统中的keycode值,在以后的调试中会经常需要查询:
KEYCODE_UN关于景色的成语 KNOWN=0;
KEYCODE_SOFT_LEFT=1;
KEYCODE_SOFT_RIGHT=2;
KEYCODE_HOME=3;
KEYCODE_BACK=4;
KEYCODE_CALL=5;
KEYCODE_ENDCALL=6;
KEYCODE_0=7;
KEYCODE_1=8;
KEYCODE_2=9;
KEYCODE_3=10;
KEYCODE_4=11;
KEYCODE_5=12;
KEYCODE_5=12;
KEYCODE_6=13;
KEYCODE_7=14;
KEYCODE_8=15;
KEYCODE_9=16;
KEYCODE_STAR=17; //-----------------------------------
KEYCODE_POUND=18;
KEYCODE_DPAD_UP=19;
KEYCODE_DPAD_DOWN=20;
KEYCODE_DPAD_LEFT=21;
KEYCOD亚洲最小的国家 E_DPAD_RIGHT=22;
KEYCODE_DPAD_CENTER=23;
KEYCODE_VOLUME_UP=24;
KEYCODE_VOLUME_DOWN=25;
KEYCODE_POWER=26;
KEYCODE_CAMERA=27;
KEYCODE_CLEAR=28; //-----------------------------------
KEYCODE_A=29;
KEYCODE_B=30;
KEYCODE_C=31;
KEYCODE_D=32;
KEYCODE_E=33;
KEYCODE_F=34;
KEYCODE_G=35;
KEYCODE_H=36;
KEYCODE_I=37;
KEYCODE_J=38;
KEYCODE_K=39;
KEYCODE_L=40;
KEYCODE_M=41;
KEYCODE_N=42;
KEYCODE_O=43;
KEYCODE_P=44;
KEYCODE_Q=45;
KEYCODE_R=46;
KEYCODE_S=47;
KEYCODE_T=48;
KEYCODE_U=49;
KEYCODE_V=50;
KEYCODE_W=51;
KEYCODE_X=52;
KEYCODE_Y=53;
KEYCODE_Z=54;
KEYCODE_COMMA=55; //-----------------,------------------
KEYCODE_PERIOD=56; //-----------------.------------------
KEYCODE_ALT_LEFT=57;
KEYCODE_ALT_RIGHT=58;
KEYCODE_SHIFT_LEFT=59;
KEYCODE_SHIFT_RIGHT=60;
KEYCODE_TAB=61;
KEYCODE_SPACE=62;
KEYCODE_SYM=63;
KEYCODE_EXPLORER=64; //-----------------------------------
KEYCODE_ENVELOPE=65; //---------------信封--------------------
KEYCODE_ENTER=66;
KEYCODE_DEL=67;
KEYCODE_GRAVE=68; //---------------坟墓--------------------
KEYCODE_MINUS=69; //---------------负--------------------
KEYCODE_EQUALS=70; //--------------等于(=)---------------------
KEYCODE_LEFT_BRACKET=71; //----------------------------
KEYCODE_RIGHT_BRACKET=72; //--------------------青椒鸡蛋怎么炒好吃 --------
KEYCODE_BACKSLASH=73; //-------------反斜线---------------
KEYCODE_SEMICOLON=74; //--------------;--------------
KEYCODE_APOSTROPHE=75; //---------------’-------------
KEYCODE_SLASH=76; //--------------/?--------------
KEYCODE_AT=77; //------------------@---------------
KEYCODE_NUM=78;
KEYCODE_HEADSETHOOK=79; //----------------------------
KEYCODE_FOCUS=80;//*Camera*focus
KEYCODE_PLUS=81; //------------+----------------
KEYCODE_MENU=82;
KEYCODE_NOTIFICATION=83; //----------------------------
KEYCODE_SEARCH=84;
KEYCODE_MEDIA_PLAY_PAUSE=85;
KEYCODE_MEDIA_STOP=86;
KEYCODE_MEDIA_NEXT=87;
KEYCODE_MEDIA_PREVIOUS=88;
KEYCODE_MEDIA_REWIND=89; //------------倒带----------------
KEYCODE_MEDIA_FAST_FORWARD=90;
KEYCODE_MUTE=91; //-----------静⾳-----------------
本文发布于:2023-04-27 11:39:56,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/850807.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |