monkey日志分析

monkey日志分析

app在功能测试基本完成之后,会通过monkey专项测试,验证程序的稳定性

首先在拿到一个monkey报告时可以从文首看到

①该次monkey的seed

②执行次数(count

③执行的对应包名(AllowPackage

④执行的类别(IncludeCategory

⑤每种事件执行的百分比(Event percentages,这个网上到处都有对应的值,此处便不列出。且需注意不同的安卓sdk版本中每个值对应的意义可能不一样。)

异常情况

http://t.leborn.me/res/editor/net/upload/2015-09-26/3426c215-b354-4a02-a0e1-9cb192111fb8.png

http://t.leborn.me/res/editor/net/upload/2015-09-26/442538e8-0453-4f97-9cb6-04937bddae48.png

http://t.leborn.me/res/editor/net/upload/2015-09-26/a04551aa-c68f-4420-8a19-00169e796d75.png

其中adb shell procrank 查询各进程内存使用情况;adb shell cat /proc/meminfo 查看当前的内存情况..

http://t.leborn.me/res/editor/net/upload/2015-09-26/dca09a82-8592-4e57-b43a-eae99666a3b6.png一、Monkey测试出现错误后,一般步骤为以下:

看monkey的日志是为了进一步分析问题的来源,可以找到Log中出现问题处的前一个Switch,随后根据Log主页是查看相关的Activity

1、程序无响应的问题,在日志中搜索:ANR

可能的原因有:

a、当前有耗时操作在UI线程指定,导致卡UI了

b、在5s内没有响应输入事件(eg:按键、触摸屏幕)

cBroadcastReceiver在特定时间内(10s)无法处理完成

当出现ANR后,需要导出,步骤如下:

a、输入adb shell

b、输入cd /data/anr/

c、输入ls

d、adb pull /data/anr d:\trace.txt

e、在logcat将出现anr问题的进程号复制,然后在trace.txt文件里按ctrl+F 查找,粘贴进程号,查找对应的问题

2、崩溃问题

在日志中搜索:Exception,如果出现空指针,则肯定有bug

3、搜索:crash、error

monkey执行中断,在log最后也能看到当前执行次数,若以上步骤还不能定位问题,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。

可能出现Crash的场景:

1、图片放大缩小

2、输入框无限输入各种类型的字符

3、快速成长

4、和系统交互等

二、详细分析monkey日志:
首先我们需要查看Monkey测试中是否出现了ANR或者异常,具体方法如上述。将执行Monkey生成的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。具体方法如上述。

然后我们要分析log中的具体信息,方法如下:
查看log中第一个Switch,主要是查看Monkey执行的是那一个Activity,譬如下面的log中,执行的是com.tencent.smtt.SplashActivity,在下一个swtich之间的,如果出现了崩溃或其他异常,可以在该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代表当前执行了一个单击的操作;
Sleeping for 500 milliseconds这句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.0
Sleeping for 500 milliseconds
:SendKey (ACTION_DOWN): 20 //KEYCODE_DPAD_DOWN
:SendKey (ACTION_UP): 20 //KEYCODE_DPAD_DOWN
Sleeping 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测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;// Monkey finished代表执行完成。Monkey执行中断,在log的最后也能查看到当前已执行的次数。Monkey执行完成的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

 

猜你喜欢

转载自blog.csdn.net/hhy_123963/article/details/87103746
今日推荐