目录
1.Monkey是什么?
- Monkey是Android中附带的一个工具,可以运行在模拟器里或实际设备中。
- 他向系统发送伪随机的用户事件流(如键盘输入、触摸屏输入、手势输入等),实现对正在开发的应用陈旭进行压力测试,存放在手机的/system/framework/
2.Monkey组成
- 基本配置选项,如设置测试的事件数量
- 运行约束选项,如设置只对单独的一个包进行测试
- 事件类型和频率
- 调试选项
3.Monkey测试的目的
- 进行压力测试
- 然后开发人员结合monkey打印的日志和系统打印的日志,发现测试中出现的问题。
- 特点:Monkey测试,所有的事件都是随机产生的,不带任何主观性。
4.Moneky运行环境搭建
- 下载sdk安装包配置sdk的环境变量,具体请参考https://editor.csdn.net/md/?articleId=100120319
- 下载JDK,配置JDK环境变量,具体请参考:https://mp.csdn.net/postedit/104103560
5.Monkey执行前准备命令:
- 打开手机的开发者调试工具,用usb数据线链接你的手机;
- 通过USB将手机连接电脑。
- windows+r 输入cmd进入dos命令行;
- 输入adb devices ;
- 再输入 adb shell pm list packages 查看你的手机所有的安装包;输入 adb shell pm list packages -3 查看手机上所有的第三方安装包,尽量让测试机少安装第三方软件,这样可以尽快的找到想要的安装包名称;
- Monkey命令
- adb shell monkey 400:对手机上任意应用进行随机操作
- adb shell monkey -p com.songqin.sqoa 400:对松勤OA进行400次事件的monkey测试
- adb shell monkey -p com.songqin.sqoa -p com.songiqn.sqjy 400 :对松勤OA和松勤教育共执行400次monkey测试,数量随机分配
- 结果如图:
-
Event percentages(事件百分比):
0:触摸事件百分比,参数--pct-touch
1:滑动事件百分比,参数--pct-motion
2:缩放事件百分比,参数--pct-pinchzoom
3:轨迹球事件百分比,参数--pct-trackball
4:屏幕旋转事件百分比,参数--pct-rotation
5:基本导航事件百分比,参数--pct-nav
6:主要导航事件百分比,参数--pct-majornav
7:系统事件百分比,参数--pct-syskeys
8:Activity启动事件百分比,参数--pct-appswitch
9:键盘翻转事件百分比,参数--pct-flip
10:其他事件百分比,参数--pct-anyevent
-
-
[--throttle MILLISEC]:事件最大延迟时间 单位是毫秒:用于模拟用户操作间隔时间
-
count(执行测试次数)
-
[-v [-v] ...]:表示日志的详细程度 ,最多-v -v -v,一般用两个.
-
[-s SEED]:种子值,序列号,作用
-
开发可以通过相同的seed值进行复现和解决bug
-
测试:可以通过相同的seed对bug进行验证
-
原则:项目开始执行monkey测试的时候到monkey测试结束的时候seed保持一致
-
相同的seed值表示操作的动作和顺序是一致的
-
-
[--ignore-crashes] [--ignore-timeouts] [--ignore-security-exceptions]
-
如果使用了该参数:在测试过程中如果遇到了crash.anr等情况,monkey是继续执行,直到事件次数结束.必要的情况下,是结束app的进程,重新打开接着开始
-
如果不使用该参数:测试过程中发生crash,anr等情况,Monkey测试就会停止,保持在发生问题的界面
-
-
--kill-process-after-error:测试中发生问题后,停止Monkey测试,保持在发生问题的界面 (一般用不到)
-
[--monitor-native-crashes] :监控本地的crash,抓取由于执行过程中引起的手机上其他任意应用发生问题的记录 [--ignore-native-crashes]:忽略本地crash
-
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
设定执行过程操作事件百分比,一般情况下为默认.
6.工作中具体使用
- 命令:adb shell monkey -p 包名 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -s 360 -v -v --throttle 450 350000 >D:\log\monkeylog.txt
- 重定向--用于保存
7.Moneky结果分析
- Monkey的日志分析
- Monkey错误图片:
- 正常的结果:// Monkey finished elapsed time=25352ms 共耗费时间
- crash: //CRASH 包名
- ANR:
//NOT RESPONDING:包名
ANR in 包名 - 异常中断:没有上述三种关键字显示
- 其他异常:关机:温度过高--->temperature/电量过低-->batterylevel=0
重启:Reboot:monkey测试中发生了问题:monkey中断/不中断/logcat停止了,手机亮屏
tcdump:黑底蓝字--->app测试中几乎没有
- adb logcat日志的分析:
- 两个cmd,一个执行monkey命令,一个执行adb logcat
- 命令:adb logcat -v time >D:\log\logcat.txt
- 不会自动停止,只能第二天上班手动停止( ctrl+c)
- 步骤
- 先查看monkey结果,如果Monkey结果正常,那么都不用看了
- 如果Monkey结果也有问题,根据关键字,在logcat中搜索,查到响应的位置
- CRASH:logcat中显示为:fatal exception
- ANR:logcta中显示为:ANR
- 复制关键信息前后两行,附在bug的描述中
- .logcat日志打包附在bug的附件中
8.Monkey执行的前提条件:
- 手机设置常亮,锁屏关闭
- 电量在90以上
- 其他设置要设置好,wifi,数据网络,进程该关闭就关闭
- app登录,数据创造,必要的情况,打开app一个页面
- 执行命令之后少等一会,如果在可见之内发现退出账号,可以尝试换一个seed值操作
9.Monkey的bug描述
- 标题:[monkey][crash/anr/关机]XX应用执行monkey是发生FATAL EXCEPTION: main
- 前提:Monkey前提
- 步骤:
1.连接手机
2.执行命令:命令
3.查看结果
4.关键字:
06-17 23:53:54.162 E/AndroidRuntime( 3375): FATAL EXCEPTION: main
06-17 23:53:54.162 E/AndroidRuntime( 3375): Process: edu.yjyx.student, PID: 3375 - 实际结果:执行Monekey 发生xxxx
预期结果:执行monkey,没有异常发生