一、monkey简介
monkey是一个黑盒压力测试工具,采用随机算法对被测应用随机发送伪随机的用户事件流,如点击,拖拽,滑动,输入等,来确定应用是否会发生异常,并且会产生日志来进行分析,适合作为压力或者稳定性测试工具来测试应用的崩溃率,稳定性。
monkey是Android系统自带工具,配置完sdk后即可在命令行中正常使用monkey相关命令。
二、常用monkey命令
monkey操作命令格式: adb shell monkey {+命令参数}
1.测试准备--设备连接
有线连接:
使用Android数据线连接测试机至电脑USB插口,连接成功后,命令窗口中输入adb devices查看设备连接情况
无线连接:
电脑与测试机处于同一局域网中,通过为测试机设置端口号做唯一映射
adb -s 设备号 tcpip 5556
adb connect 设备IP:5556
2.测试准备--查看被测APP包名
adb shell am monitor 然后打开被测应用,即可获取包名
3.monkey基础参数及用法
-p:指定包名 例如:adb shell monkey -p 包名 事件总数
事件总数计算方式=预计运行时长(换算成秒)/间隔时长(换算成秒)
-v:打印log级别,-v越多日志信息越详细,最多支持3个。例如:adb shell monkey -p 包名 -v -v -v 事件总数
-s:伪随机数生成器的seed值,通俗的说就是个标记,后面跟数字,例如:执行adb shell monkey -s 1 -p 包名 事件总数,这个 我标记了-s 1,命令操作完之后,我发现有日志报错,我想重新执行这个monkey操作,那你就可以继续执行这个命令,排错时常用。
-f:后接测试脚本名,例如:adb shell monkey -f 脚本名 事件总数
--throttle:后面接时间,单位为ms,,表示事件之间的固定延迟,若无该项monkey将不会延迟,例如:adb shell monkey --throttle 500 -p 包名 事件总数
--ignore-crashe:忽略异常崩溃
--ignore-timeouts :忽略超时、ANR
--ignore-native-crashes :忽略native层代码的崩溃
--ignore-security-exceptions:忽略一些许可错误,比如证书许可,网络许可
--monitor-native-crashes:是否监视并报告native层发送的崩溃代码
--kill-procress-after-error:用于在发送错误后杀死进程
--hprof:设置后在monkey事件序列之前和之后立即生产分析报告,保存于data/mic目录,不过将会生成大量几兆文件,谨慎使用
--pct-touch:设置触摸事件的百分比,即手指对屏幕进行点击抬起(down-up)的动作
--pct-motion:设置移动事件百分比,这种事件类型是由屏幕上某处的一个down事件-一系列伪随机的移动事件-一个up事件,即点击屏幕,然后直线运动,最后抬起这种运动。
--pct-trackball:设置轨迹球事件百分比,这种事件类型是一个或者多个随机移动,包含点击事件,这里可以是曲线运动,不过现在手机很多不支持,这个参数不常用
--pct-syskeys:设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等
--pct-nav:设置基本的导航按键事件百分比,比如输入设备上的上下左右四个方向键
--pct-appswitch:设置monkey使用startActivity进行activity跳转事件的百分比,保证界面的覆盖情况
--ptc-anyevent 设置其它事件百分比
--ptc-majornav 设置主导航事件的百分比
三、monkey实战
APP压测期间出现exception、ANR时停止monkey执行
adb shell monkey -p XXX --throttle 500 -s 600 -v -v -v 1000 >XXX(电脑路径)
APP压测期间出现exception、ANR时忽略异常继续monkey执行
adb shell monkey -p XXX --throttle 500 -s 600 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000 >XXX(电脑路径)
项目特殊情况需要对指定模块进行monkey压测
monkey自身不支持对指定的功能进行长时间的稳定性测试,所以需要借助三方jar包,在此向大家介绍monkeyTest.jar包
jar包使用方式:
adb shell dumpsys activity | findstr "mFocusedActivity"
根据以上名称查看当前功能的Activity,将该页面配置至白名单,如下图所示
2.启动monkey执行
打开cmd命令窗口,进入当前jar包所在目录,执行java -jar monkeyTest.jar等待初始化完成, 再启一个cmd命令窗口,执行monkey命令即可
3.monkey测试报告
测试机执行monkey压测完成后,通过adb bugreport bugreport.txt导出相关日志,并以txt格式存储在电脑中。需要将该txt文件与jar存储在同一目录,继续执行java -jar chkbugreport.jar bugreport.txt即可在当前目录生成报告
报告中点击Errors列表即可查看APP运行中的报错或者crash情况,点击图中的link to log即可查看该报错发生前后执行的操作,日志中有相关记录
自动化脚本完成bugreport日志导出:
Python核心代码如下:
设置bat文件执行Python脚本:
Java核心代码如下:
设置bat文件执行Java脚本:
以上即完成了准备工作,接下来只需要在Windows下设置定时任务来执行脚本即可。
如何在windows设置定时任务,以Java为例,Python设置方式一样不再赘述。
在开始页面输入“任务”
点击任务计划程序按钮,然后选择创建任务
完成以上配置,点击确定按钮即可