一 monkey测试简介
monkey就是SDK中附带的一个命令行工具,模拟器/真实设备【尽量用真实设备】。发送伪随机的用户【如按键输入,触摸屏输入,手势输入等】,实现压力测试。
作用:提过APP稳定性,健壮性
运行平台:Android
二 monkey工具使用
monkey使用前提条件:
1.配置Android SDK,jdk环境变量
2.连接手机--进入开发者模式--打开USB调试
验证是否成功:打开cmd--输入命令【adb devices】
monkey基本组成
monkey选项主要分为四大类:
1.基本配置选项,如设置尝试的事件数量【一般下班前测试,第二天早上看日志分析】
2.运行约束选项,如设置只对单独的一个包进行测试
3.事件类型和频率
4.调试选项
基本命令组成
adb shell monkey -p 程序包 -v 测试次数
注:
1.-v最多显示3个,-v就是日志显示格式。
2.其中程序包名称通过adb shell pm list packages -3显示所有第三方APP程序包
3.执行mokey测试前,先看下有哪些参数,执行命令【adb shell monkey】
4.执行monkey测试
这里测试是医咖大夫APP
打开cmd-输入命令【adb monkey -p cn.medsci.yun.doctor -v 次数】,如下图所示
monkey 测试通过依据,尾部出现【monkey finished】
所有的参数写在-p包后面,事件数 之间,输入2个-v,获取更多信息,更详细点
- Android APP monkey中crash和anr的bug一定要解决掉,否则用到客户手中发生crash和anr问题机率很大
seed值指定义了事件的序列。作用:用于测试验证bug,用于开发解决bug--复现bug,seed值尽量不变,同个值。
复现seed值操作,加上-s,如下图:
涉及参数解析:
【-s】:伪随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。
【-v】:命令行的每一个 -v 将增加反馈信息的级别。最多出现3个,-v越多,日志信息越详细。
【-p】:此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。要指定多个 包,需要使用多个 -p选项,每个-p选项只能用于一个包。
【--throttle】:在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。
指令含义介绍:
如上命令含义:测试的应用程序为医咖大夫,三个-v表示输出的monkey的log最详细的数据,测试事件次数1000,log保存在E盘的test_log.txt里面
如上命令含义解读:测试的应用程序为医咖大夫,种子seed的值为100,事件间的延时为100毫秒,一个-v表示输出的monkey的log较为详细的数据,测试事件次数100,
三、monkey日志分析
- 程序无响应的问题:在日志中搜索【ANR】
- 崩溃问题,在日志中搜索【Exception】
- monkey顺利执行完成,在log最后会打印当前执行事件的次数和花费事件。或者最后出现monkey finished代表执行完成。
- monkey执行中断,在log后面能看到当前已执行的次数
- 【crash】类型错误--异常退出,异常停止问题
四、monkey内存泄漏
执行monkey测试时,有时会有内存泄漏情况。
- 手机弹出out of memory对话框-----则确定有内存泄漏
- 手机没提示但是实际有内存泄漏,排除方法通过logcat文件GC输出log信息,搜索关键词GC。
若存在以下任意一个情况,就可能存在内存泄漏。【操作:打开2个命令窗口,一个执行adb logcat;另个执行monkey,结束后,Ctrl+c中断log抓取】
a、GC_FOR_ALLOC, 因为在分配内存时内存不够引发的
b、GC_EXPLICIT, 表明GC被显式请求触发的,如System.gc调用
c、GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发
d、GC_BEFORE_OOM, 表明在虚拟机抛出内存不够异常OOM之前,执行最后一次回收内存垃圾
发现内存泄漏,可利用hprof参数的内存生成内存报告。
发现内存泄漏,执行相同monkey,加个参数【hprof】
adb shell monkey -p 包名 --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkey.txt
如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。
(注: /data/misc 需要root权限,可以在手机上安装个RE查看或通过手机助手查看)
【--hprof】:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项
【--throttle】:每个事件结束后的间隔时间——降低系统的压力
【--pct-touch】:指定触摸事件的百分比,如:--pct-touch 5%
【--pct-motion】:<percent> (滑动事件)
拓展:
--pct-trackball <percent> (轨迹球事件) 、
--pct-nav <percent> (导航事件 up/down/left/right)、
--pct-majornav <percent> (主要导航事件 back key 、 menu key)、
--pct-syskeys <percent> (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)、
--pct-appswitch <percent> (activity之间的切换)、
--pct-anyevent <percent>(任意事件)
来源:oschina
链接:https://my.oschina.net/u/4309414/blog/3613805