Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;
通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按的操作;
Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法;
Monkey 程序是 Android 系统自带的,由 Java 语言写成,在 Android 文件系统中的存放路径是: /system/framework/monkey.jar;
Monkey 程序需要通过 adb 来运行。
1、用户量比较大
2、用户的时间比较长
压力测试、稳定性测试
压力测试:在一定时间内进行大量操作
稳定性测试:趋势
进行monkey测试的阶段
功能基本稳定,项目验收前
操作:随机的,针对整机,模拟人操作(调节亮度、声音、去截屏设置)、伪随机(有逻辑)
monkey位置:系统中文件夹,/system/bin/monkey
monkey优点:
1)一条语句就是一个自动化脚本
2)有log输出
3)速度可控
4)长时间测试稳定(adb稳定)
缺点
1)无法回溯路径
2)log信息量巨大,难以排查bug
1、基本环境准备
1)电脑设置
jdk、sdk准备好
环境变量 java --version
sdk压缩,解压缩即可使用 adb version
2)手机端
打开开发者模式->USB调试
3)手机(模拟器)连接adb成功
adb连接成功 adb devices
2、执行monkey测试
整机测试,200是count(必填)
adb shell monkey 200
1)连接模拟器
192:~ yingyan$ adb connect 127.0.0.1:62001
2)查看是否成功
192:~ yingyan$ adb devices
List of devices attached
127.0.0.1:62001 device
3)执行monkey测试
查看monkey相关参数
192:~ yingyan$ adb shell monkey
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--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]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
COUNT
具体例子
1、针对整机进行200次事件操作
adb shell monkey 200
如何看包名?
-s 系统
-3 客户
192:~ yingyan$ adb connect 127.0.0.1:62001
connected to 127.0.0.1:62001
#查看报名 adb shell pm list packages
192:~ yingyan$ adb shell pm list packages -3
package:com.sankuai.meituan
package:com.mt.mtxx.mtxx
package:com.tencent.mobileqq
点击哪个就显示哪个包名(有时app卡死,不建议用)
adb shell am monitor
2、对指定应用进行200次的事件操作
192:~ yingyan$ adb shell monkey -p com.sankuai.meituan 200
3、忽略参数
[–ignore-crashes]
[–ignore-timeouts]
如果使用该参数,则执行中发生了崩溃或者anr的问题,会结束app,重新启动执行操作,继续之前的事件数,而且会在日志中记录该问题。
[–ignore-security-exceptions] 安全证书
4、序列
[-s SEED]序列值、种子值 如果两次monkey命令执行一样的seed值,那么表示操作的流程是一样的,但是操作的界面或者对象是否一样就不能保证
[-v [-v] …] 日志的级别程度 -v -v -v 最详细的日志体现
5、延迟时间(两个操作的间隔时间,模拟人操作要有停顿)
[–throttle MILLISEC] 延迟时间,单位:毫秒 450
工作中的事件数 35万次 +延迟时间,8-10小时
例子:
adb shell monkey + 行为参数 + “>” + {日志保存路径}
adb shell monkey -p com.xxx.myapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > d:\mylog.log
结果分析
1、//monkey finished表示测试成功,其他情况都是失败,需要提交bug
1)crash崩溃 logcat
2)anr 无响应 adb shell /data/anr/traces.txt
3)monkey测试没有完成,异常中断
4)关机
5)重启reboot
2、结果查看
1)进行mokey测试,可以看到进行事件的百分比(这个需要开发文档查看)比如:tag、touch…
bug提交:专项测试
标题:[monkey][CRASH/anr/重启/关机]app在执行mongkey测试是发生问题
步骤
1、准备
2、命令
3、查看结果
预期结果
执行monkey无异常
实际结果
日志信息[来源于logcat]
fatal、exception、reboot、oom、anr
03-02 21:54:39.508 I/art ( 5815): Wrote stack traces to ‘/data/anr/traces.txt’
发现anr,需要把数据pull到本地,然后再给开发定位
192:~ yingyan$ adb pull /data/anr/traces.txt /Users/yingyan/Desktop/adb/log/
/data/anr/traces.txt: 1 file pulled, 0...ed. 41.3 MB/s (294529 bytes in 0.007s)
部分参考:https://blog.csdn.net/weixin_37124805/article/details/122846710?ops_request_misc
推荐:看详细参数解析,可以看上面链接