记录一次Monkey测试全流程

记录一次Monkey测试全流程

1、检查设备连接

ZHR:~ zc$ adb devices
List of devices attached
JPF4C19123011893	device

2、查看测试的包名

ZHR:~ zc$ adb shell dumpsys window w | grep name=""
      mSurface=Surface(name=GestureNavBottom)/@0x286f499
      mSurface=Surface(name=GestureNavRight)/@0x286f451
      mSurface=Surface(name=GestureNavLeft)/@0x286f415
       mAnimationIsEntrance=true      mSurface=Surface(name=StatusBar)/@0x21ad1a7
      mSurface=Surface(name=com.czb.webczbdemo/com.czb.webczbdemo.activity.WebPageNavigationActivity)/@0x1b4f995
       mAnimationIsEntrance=true      mSurface=Surface(name=com.android.systemui.HwImageWallpaper)/@0x21db9e9

如果你知道你的包的大概的名字,比如说腾讯的包一般都有一个“tencent”

ZHR:md zc$ adb shell pm list package|grep czb
package:com.czb.chezhubang
package:com.czb.webczbdemo

获取测试包名:com.czb.webczbdemo

3、清空logcat日志

adb logcat -c

首先,我们monkey测试的时候主要有两个日志

Monkey命令输出的日志

其实就是记录了monkey在我们手机上的操作而已

Logcat

这个才是我们的重点,他记录了我们app的信息,我们去找异常或者报错的时候都是来这里找的,清空logcat只是为了方便我们download到本地小一些而已,也可以不清空。

logcat分区

Android日志系统提供了记录和查看系统调试信息的功能,日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用。

开发者选项,有一个选项叫做“日志记录器缓冲区大小”,默认是256K,日志是循环写入环形缓冲区的,在通常情况下,写满时最旧的日志会被删除以给新输出的日志留内存空间。

Android log 输出量巨大,特别是通信系统的log,因此,Android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:
          
·Radio : 输出通信系统的log,如:WiFi,蓝牙,3/4/5G,GPS,NFC等

·System: 输出系统组件的log,权限比较高,如:调用相机,调用录制,调用麦克风等

·Events: 输出event模块的log,event翻译过来就是事件,如:通过手指点击屏幕的某一处地方,称为点击事件;通过按电源或者音量加减等

·Main:    所有java层的log,(不属于上面3层的log)

如果测试APP,需要输出Main,命令:adb logcat -b main,adb logcat 默认抓取Main

logcat日志级别

• Verbose:显示所有日志消息(默认值)。

• Debug:显示仅在开发期间有用的调试日志消息,以及此列表中较低的消息级别。

• Info:显示常规使用情况的预期日志消息,以及此列表中较低的消息级别。

• Warn:显示尚不是错误的潜在问题,以及此列表中较低的消息级别。

• Error:显示已经引发错误的问题,以及此列表中较低的消息级别。

• Assert:显示开发者预计绝不会发生的问题。

logcat常用命令

#打印默认日志数据
adb logcat
#需要打印日志详细时间的简单数据
adb logcat -v time
#需要打印级别为Error的信息
adb logcat *:E
#需要打印时间和级别是Error的信息
adb logcat -v time *:E

4、执行测试命令

adb shell monkey -p  com.czb.webczbdemo --throttle 100 --monitor-native-crashes -v -v -v  --pct-touch 30  --pct-rotation 5  --pct-rotation 5 --pct-motion 15  --pct-nav 0  --pct-majornav 15 --pct-appswitch 0 --pct-anyevent 0 --pct-trackball 0 --pct-syskeys 10 -s 100 1000 >/Users/zc/Desktop/md/monkey.txt

执行后终端会打印出一些信息,其实就是你的命令的参数,等monkey执行完成后,终端不再打印信息,返回控制权。

5、下载logcat日志

ZHR:~ zc$ adb logcat -v time >/Users/zc/Desktop/md/logcat.txt

注意:这个日志的输出的开始位置是从你上次清空后新生成的日志开始,直到你手动结束该命令为止,会实时的输出日志,所以要手动关闭:control+z(mac)

6、分析日志

monkey日志分析

先找到哪里有报错

我们主要分析的其实是monkey的日志

在日志中搜索关键字:

ANR

搜索报告中的关键字“ANR”,看有无应用无响应的事件(Application Not Responding)

crash

搜索报告中的关键字“crash”,看有无崩溃的事件

exception

搜索报告中的关键字“exception”,看有无其他异常事件。(如果出现空指针, NullPointerException,需格外重视)

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

违法访问错误:IllegalAccessError

内存不足错误:OutOfMemoryError

堆栈溢出错误:StackOverflowError

GC

注:暂时还未遇到过,抄的很彻底
内存泄露问题搜索"GC"(需进一步分析)
发现内存泄露–内存报告分析(利用hprof参数的内存快照生成内存报告)

在发现内存泄露后,可以执行相同的monkey指令,只需多加一个参数–hprof

如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。(注: /data/misc ?需要root权限,可
以在手机上安装个RE查看或通过手机助手查看)

ps:文件转换:配置monkey测试时的sdk-tools下查看是否hprof-conv命令,在命令行输入hprof-conv -help得知文件转化用法,直接转化就行,由.hprof转化成.conv格式。
转化后的文件用eclipse的Memory Analyzer tool(MAT)查看(此插件可以下载),可以点击?Reports->Leak Suspects链接来生成报告。

monkey出现错误后,一般的分析步骤

1)先找到出现错误的位置

2)查看出现错误之前2个switch之间的activity

3)手动执行事件,复现问题

4)若以上步骤还不能找出,产生错误时,有会seed值,输入相同的seed值,重新按照之前命令跑monkey

logcat日志分析

没试过,抄的很彻底

ANR in

当monkey测试出现异常终止,请打开logcat日志搜索关键字‘ANR in’,如果存在该关键字,说明app出现了ANR异常,我们需要把/data/anr目录下的trace.txt文件取下来

拉取traces文件

adb pull /data/anr/traces.txt /Users/zc/Desktop/md/traces.txt

取下来trace.txt文件后,将出现问题的进程号对应的日志发给软件工程师定位,如果在logcat日志里没有搜索到’anrin’关键字,就搜索’nullpointer’异常关键字的上下日志,发给开发定位

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

打开 traces.txt 后,发现时间和anr发生的时间不对应,是因为:两份日志是处于不同的模块,导致有时间上的差异,差异在几秒内;但是traces日志有一个特点,他只会保存最新的一份报错的日志,如果有多次报错,会被覆盖。

这里可以使用的“dropbox”,文件路径在 “/data/system/dropbox”,在此目录中,如果是“SYSTEM_BOOT”开头,为系统启动的日志,“data_app”开头的,为手动安装的第三方的日志,里面gz结尾的压缩包文件,内容已经有了anr或者crash的 logcat日志和 方法调用栈 日志。(注释:一个anr一个文件)

FATAL EXCEPTION:main

出现严重错误崩溃关键词

测试通过标准

一般 0 ANR 0 Crash是测试标准。

7、回归

回归其实就是将刚才的指令再执行一遍就行了,因为我们的指令里有-s,后面会讲到

8、回头来看monkey指令

类似的monkey指令其实网上有很多,我们只挑一些比较重要的指令和测试中需要注意的点

leaks

很多测试版本的app内置了一个检查内存泄漏的leaks功能,跑money的时候,记得让开发给关掉,否则会先进入leaks,不好出来

隐藏虚拟键及顶部状态栏,防止跑monkey的时候关闭wifi

ZHR:~ zc$ adb shell settings put global policy_control immersive.full=*

等你执行完了,发现,哇,我的顶部状态栏怎么没了,我是不是要重启是不是要恢复出厂设置,不用,执行下面的命令就可以了

ZHR:~ zc$ adb shell settings put global policy_control null

–throttle

有时候monkey的事件执行的很快,肉眼根本看不清点击事件,加上throttle参数就可以控制每个事件之间的间隔数,使执行动作慢下来,方便我们查看,单位:毫秒

–monitor-native-crashes

监视并报告Androids系统本地代码的崩溃事件

–ignore-timeouts(无响应ANR)

用于指定当应用程序发生ANR(ApplicationNo Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

–ignore-security-exceptions(许可证书崩溃)

用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

-p

后面跟着的就是我们的包名,第二步获取到的

-v -v -v

日志登记, -v -v -v 是最高的等级,打印的日志最多,-v是最少的

-s

Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。

–pct

绝对是monkey里的扛把子,几乎大部分的指令都在这里了
–pct-motion {+百分比}:1
翻译动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)

手势事件是指在屏幕某处的按下、随机移动、抬起的操作,即直线滑动操作。可通过–pct-motion参数来配置其事件百分比。

该事件是由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成的,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。

–pct-pinchzoom {+百分比}:2
翻译二指缩放,智能机上的放大缩小手势操作事件

二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作。可通过–pct-pinchzoom参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件起始是一个ACTION_DOWN事件和一个ACTION_POINTER_DOWN事件,即模拟两个手指同时点下;中间是一系列的ACTION_MOVE事件,即两个手指同时在屏幕上直线滑动;结束是由一个ACTION_POINTER_UP事件和一个ACTION_UP事件组成的,即两个手指同时放开。

–pct-trackball {+百分比}: 3
翻译轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件

轨迹事件是由一个或多个随机的移动组成的,有时会伴随着点击。很早之前的Android手机带有轨迹球,这个事件就是模拟的轨迹球的操作。现在的手机几乎都没有轨迹球,但轨迹球事件中包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数。可通过–pct-trackball参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件是由一系列的Trackball(ACTION_MOVE)事件组成的,观察手机上的操作,即为一系列的曲线滑动操作。

–pct-rotation {+百分比}:4
翻译屏幕旋转,横屏竖屏事件

屏幕旋转事件是一个隐藏事件,在Android官方文档中并没有记录这个事件。它其实是模拟的Android手机的横屏和竖屏切换。可通过–pct-rotation参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 该事件由一个rotation事件组成,其中degree表示的是旋转方向,顺时针旋转,0表示旋转90度的方向,1表示旋转180度的方向,2表示旋转270度的方向,3表示旋转360度的方向。在执行过程中,可以看到手机屏幕在横竖屏之间不断地切换。

–pct-nav {+百分比}:5
翻译基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件

基本导航事件是指点击方向输入设备的上、下、左、右按键的操作,现在手机上很少有上、下、左、右按键,这种事件一般用得比较少。可通过–pct-nav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:

该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上、下、左、右四个方向按键。

–pct-majornav {+百分比}:6
翻译主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等

主要导航事件是指点击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如键盘的中间键、回退按键、菜单按键。可通过–pct-majornav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是中间键和菜单键

–pct-syskeys {+百分比}:7
翻译系统按键,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等

系统按键事件是指点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等。可通过–pct-syskeys参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上面说到的几个系统按键。

–pct-appswitch {+百分比}:8
翻译应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用

启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。可通过–pct-appswitch参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Switch操作组成的,从手机上看,上面的操作实际是打开了com.android.settings这个应用的一个com.android.settings.Settings的Activity界面。

–pct-flip {+百分比}:9
翻译翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回

键盘事件主要是一些与键盘相关的操作。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等。可通过–pct-flip参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 如日志所示,这里主要是键盘的打开和关闭操作。

–pct-anyevent {+百分比}:10
翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

其他类型事件包括了除前面提到的10种事件外其他所有的事件,如按键、其他不常用的设备上的按钮等。可通过–pct-anyevent参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是其他的一些系统按键,如字母按键、数字按键等。因为现在手机很少带字母按键或数字按键,所以这个事件一般使用得比较少。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Monkey测试是一种随机化的测试方法,通常用于测试应用程序的稳定性和兼容性。它会在应用程序中随机生成触摸、滑动、按键等事件,以模拟用户的操作。如果应用程序不能正确处理这些事件,就会导致程序崩溃或出现其他异常情况。 下面是一般的monkey测试报错流程: 1. 生成随机事件:Monkey测试工具会生成随机的触摸、滑动、按键等事件,以模拟用户的操作。 2. 执行随机事件:应用程序会接收到这些随机事件,并进行相应处理。 3. 检查应用程序的响应:Monkey测试工具会检查应用程序的响应,包括界面响应、功能是否正常等。 4. 记录错误:如果应用程序出现了异常情况,Monkey测试工具会记录错误信息并输出日志。 5. 分析错误:测试人员会根据错误信息和日志,分析问题的原因。 6. 修复错误:开发人员根据测试人员提供的错误信息,修复应用程序中的问题。 7. 再次测试:修复后的应用程序会再次进行Monkey测试,以确认问题是否已经解决。 根据上述流程,如果应用程序不能正确地处理随机事件,就会导致程序崩溃或出现其他异常情况。在这种情况下,Monkey测试工具会记录错误信息并输出日志,测试人员根据错误信息和日志,分析问题的原因,开发人员再根据测试人员提供的错误信息,修复应用程序中的问题。最后,修复后的应用程序会再次进行Monkey测试,以确认问题是否已经解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值