【Monkey 测试】【我把猴子搞定了】
一、Monkey测试原理
Monkey Test是一种基于Android 的Linux内核提供API对手机进行自动化事件模拟的工具,原生集成在Android系统里,无需额外安装。如果不要进行复杂的日志操作,是不需要使用者有任何编程能力的,虽然前期环境配置较多,但是配置好后一劳永逸,且没有android系统版本的限制,从android 2.3一直到7.1.1都支持。
它向系统发送伪随机(有序的随机事件)的用户事件流(如按键输入、触摸屏输入、手势输入等,可以通过Monkey 参数来控制百分比),随机模拟人工操作、多次模拟事件来测试应用的负荷程度,实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
二、环境搭建
1. 配置 java 环境:下载并安装jdk 包配置环境变量:添加系统变量 JAVA_HOME配置path 变量(编辑-新建) %JAVA_HOME%bin验证方法:cmd 命令窗口中输入 “java” ,显示版本信息及用法则配置成功
2. 配置Android 开发环境 sdk 环境:下载并安装 sdk 包配置环境变量:添加 ANDROID_HOME 配置path 变量 %ANDROID_HOME%tools 如果是2.3版本,想在任意命令行上执行adb命令,还需要在path中加入%ANDROID_HOME%\platform-tools,即%ANDROID_HOME%\tools与%ANDROID_HOME%\platform-tools同时加入path中,tools目录运行android命令,platform-tools目录运行adb命令验证方法:cmd 命令窗口中注入 “adb”,显示adb版本及用法则配置成功
三、测试准备及验证
- 连接adb
①真机adb连接
1.手机通过 USB 或 wifi 连接电脑
2. 打开“开发者选项”-打开usb相关项(注意usb配置问题,vivo x9Plus 需点击usb配置为 MIDI ) 备注:小米手机的打开方式。打开“设置”“关于手机”“MIUI版本”对该项连续点击7次,点击完后会提示你进入了开发者模式。
3. 在root权限下才能执行monkey 命令,否则会提示权限,且执行不成功(设置次数很大时也立即中断) 手机root通过第三方软件,如一键root、root 大师等app,以及刷机(谨慎)
4. 执行adb devices ,验证手机是否连接成功,成功会显示
C:\Users\97655>adb devices
List of devices attached
e4b54822 device
②模拟器 adb连接1.同手机操作,打开 “开发者选项”,默认root权限2.cmd窗口 输入命令连接模拟器:adb connect 127.0.0.1:模拟器端口号(百度可查)3.输入命令: adb devices 验证
- 获取软件包名
① cmd 命令窗口执行命令:adb shell pm list packages
C:\Users\97655>adb shell pm list packages
package:com.android.cts.priv.ctsshim
package:com.vivo.weather.provider
package:com.qualcomm.qti.auth.sampleextauthservice
② cmd 窗口执行: adb shell - su (获取root权限)- cd /data/data/ - ls
3.计算并编写monkey 命令
① 确定执行延迟时间、执行次数、seed 值、事件百分比等参数
② 新建空 txt 文本,用于本地记录monkey 日志
③ txt 文档中编写命令 : 如adb shell monkey -p ym.app.vrm -s 500 –throttle 450 –ignore-crashes –ignore-timeouts –monitor-native-crashes -v -v 200000 > E:\Work\monkey.txt
四、Monkey 测试执行
①在monkey执行前,开启cmd窗口执行日志获取命令adb logcat -v time>E:\Work\Logcat.txt②新开 cmd 窗口,执行monkey 命令,执行前优化手机,清理后台进程等adb shell monkey -p ym.app.vrm -s 500 --throttle 450 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 200000 > E:\Work\monkey.txt
常见问题可解(后续更新):
a、测试时随即操作,wifi关闭
b、app退出
c、减少旋转/滑屏/菜单等系统操作事件
五、Monkey 测试终止
monkey 测试过程中,即使拔掉 usb 线,断掉与电脑的连接,测试也不会停止,如果已经拔掉,adb 连接中断后,只能强制关机来终止测试
方法一:
使用命令杀掉进程
adb shell ——> ps ▏grep monkey ——> kill Pid(进程号)
方法二:
强制关机,长按电源键超过8s(monkey测试过程中会影响关机操作,所以要长按超过8s,关机重启后停止)
六、Monkey测试命令详解
*adb shell monkey -p 包名 -v 次数 //命令基本语法,后可接多个参数,如下:
*
-p com.hytera //应用的包名,monkey会通过包名来找到应用,启动activity执行monkey测试;
–pct-touch 40 //触摸事件占比40%
–pct-motion 25 //手势事件占比25%
–pct-appswitch 10 //Activity切换事件占比10%
–pct-rotation 5 //将横竖屏切换事件调整到5%
–pct-pinchzoom 5//将双指缩放调整占比到5%
-s 12358 //指定命令执行的seed值(随机指数),每个值对应的事件流是唯一的,如果需要复现,这个值就必须一致,才能完全模拟相同的事件流。
–throttle 400 //控制monkey每个操作之间的时间间隔,固定延迟400ms
–ignore-crashes //日志中记录crash但是monkey测试继续
–ignore-timeouts //日志记录anr,继续执行monkey测试
-v 指定log级别,默认级别为level 0 ,V个数越多日志级别程度越高,详细程度越高。为了方便问题定位,一般级别设置为level 2 -v-v-v
500000 //随机事件数
-hprof 查看内存泄漏
#monkey测试过程中可以另起一个cmd窗口做一些辅助测试
获取logcat日志信息
adb shell logcat -v time > log.txt
获取内存信息
adb shell dumpsys meminfo <进程名>
获取CPU消耗信息
adb shell top -n 1 | find “进程名”
获取电量信息
adb shell dumpsys battery
获取GPU信息
adb shell dumpsys gfxinfo <进程名>
获取流量信息
adb shell cat /proc/uid_stat/<被测应用的uid>/tcp_rcv
查看被测应用的进程id
adb shell ps | grep <被测应用的包名>
查看被测应用的用户id
adb shell cat /proc/$pid/status
切换wifi状态
adb shell am
获取当前的网络状态
adb shell ifconfig wlan0
——保存monkey日志的几种方式————-
1.保存到PC中
adb shell monkey [option] > path
2.保存到手机中
adb shell -> monkey [option] > /mnt/sdcard/filename
3.运行日志和异常日志分别保存
monkey [options] 1> path1 2> path2
monkey自定义脚本编写模板,将脚本放在手机中;文件格式没有要求
-f scriptfile
eg:
adb push monkey.sh /sdcard/data/
adb shell monkey -f /sdcard/data/monkey.sh -v 1 // 1表示执行1次。
参考自链接:https://blog.csdn.net/weixin_38021928/article/details/80328813