monkey特征:
- 随机测试,不带任何主观性(不能指定操作测试场景)
- 只能安卓使用,iOS不适用(安卓系统自带的工具,iOS没有)
- 模拟用户操作(比如:点击,输入,滑动,及系统命令(截图,声音......))
使用场景:
在功能性测完后,保证应用程序的健壮性和稳定性
开发人员可以结合monkey打印的日志和系统打印的日志,发现测试种出现的问题
monkey介入阶段:
- 功能基本稳定
- 项目验收前
- 最后一轮测试的回归前
(长期测试,开发初期不适用)
环境:
需要下载的工具:Android SDK
链接:AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载
下载后解压,并配置环境变量,怎么配置环境变量,可以网上百度,有很多(直接搜索Android SDK环境配置)
配置成功后:adb会出现adb版本
如果出现:不是内部命令之类的提示,说明没有配置好环境变量
monkey使用:
adb shell monkey(打印monkey的用法)
相关参数:
-p:指定包名
-s:指定seed值
-v:打印日志
--pct-touch:设置触摸事件百分比
......
示例:
指定应用随机操作:-p
获取当前应用的包名:adb shell dumpsys window w|findstr \/|findstr name=
指定应用随机操作:adb shell monkey -p 包名 100
指定两个应用随机操作:adb shell monkey -p 包名 -p 包名 100
打印monkey操作日志:-v(-v:日志;-v -v:详细日志;-v -v -v:非常详细日志)
打印谷歌浏览器monkey100条命令的操作日志:adb shell monkey -p 包名 -v 100
可以指定seed值:adb shell monkey -s 12345 -p 包名 -v 100
事件执行百分比
monkey 事件:
0.触摸事件:--pct-touch
1.手势事件:--pct-motion
2.二指缩放事件:--pct-pinchzoom
3.轨迹事件:--pct-trackball
4.屏幕旋转事件:--pct-rotation
5.运行时权限开关事件(新增事件):--pct-permission
6.基本导航事件:--pct-nav
7.主要导航事件:--pct-majornav
8.系统按键事件:--pct-syskeys
9.启动Activity事件:--pct-appswitch
10.键盘事件:--pct-flip
11.其他类型事件:--pct-anyevent
可以根据应用场景设置事件占比(场景:比如游戏,触摸占比较高,可以设置触摸事件占比多一些)
adb shell monkey -s 12345 -p 包名 -v --pct-touch 60 100(触摸事件占比60%)
有时候会在执行20条命令后遇到崩溃,删除的场景,命令就会卡在这,如果还想执行剩下的命令,就需要设置遇到此场景,跳过,执行后面的命令
这里不详细讲了(附上一个链接,这个博主有详细讲解):monkey工具介绍及用法 - 唐三通 - 博客园 (cnblogs.com)https://www.cnblogs.com/JcHome/p/8280116.html
示例:
adb shell monkey --ignore-crashes -p com.xxx.xxx 5000
设置等待时间:
adb shell monkey -s 12345 -p 包名 -v --pct-touch 60 --throttle 300 100
分析log
正常的log末尾提示:Monkey finished
异常log,比如崩溃,闪退,提示:monkey aborted due to error.
无响应
参考这个博主写的adb命令:
adb安卓monkey测试及log日志分析,可以查看这个博主写的:(4条消息) adb 安卓monkey测试以及log日志分析_shawn xie123的博客-CSDN博客_monkey跑10万次要多久hhttps://blog.csdn.net/xiezhiming1234/article/details/82121232
monkey测试常被问道的问题:
- monkey测试怎么做?
- monkey是针对什么测试?
- monkey测试哪些事件?
1.参考: 简单答案:就是一条命令(很简单) 其他答案:连接手机-使用adb shell monkey命令执行操作,当然可以根据需求,设置指定的参数,比如指定设备,执行app包,显示日志,指定seed(随机数种子)等等,执行100或者1000条命令 2.参考: monkey是针对应用的稳定性、健壮性测试 3.参考: monkey不能指定事件,它是随机操作的,不能指定它操作场景,但是可以设置事件执行百分比,monkey有12个事件,可以根据app的需求,设置触摸事件百分比或者其他事件百分比,执行后看app有没有crash或者anr发生
打印日志文件
先在D盘中建立文件夹,例如:monkey_log,然后输入下方的命令
示例:adb shell monkey -p 应用程序包名 -s 124535 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 >D:\monkey_log\java_monkey_log.txt
adb shell monkey -p 应用程序包名 -s 124535 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v --throttle 500 10000 >D:\monkey_log\java_monkey_log.txt
说明:monkey作用包:应用程序包名
产生时间的序列的种子值:124535
指定send值、忽略程序崩溃、忽略超时、监视本地程序崩溃、详细信息级别是2、每条命令等待500毫秒、产生10000个随机事件
测试结果分析(关键词搜索):
- ANR问题(程序无响应):在日志中搜索“ANR"(application no response)
- 闪退问题:在日志中搜索"crash"
- 异常:搜索"exception"
- 强制退出:搜索"force closed"
- error、timeout
建议:测试某app时,杀掉其他应用进程
提示:
1、:Sending Flip keyboardOpen=false
Got IOException performing flipjava.io.FileNotFoundException: /dev/input/event0: open failed: EACCES (Permission denied)
// Injection Failed(这些可能是monkey自己报错,不用管)
2、一般,0 CRASH, 0 ANR 是测试标准
3、执行失败输入的相应结果
// 显示Monkey 执行失败
** Monkey aborted due to error.
// 执行的事件数量
Events injected: 8
// 旋转的角度为0
:Sending rotation degree=0, persist=false
// 丢失的事件数量,按键0,提示0,轨迹球0,翻转0,旋转0
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
// 网络状态,移动网络 0ms,Wi-Fi 0ms,无网 405ms
## Network stats: elapsed time=405ms (0ms mobile, 0ms wifi, 405ms not connected)
// 提示在执行到第8 个事件时出现Crash ,以及所使用的随机种子值
** System appears to have crashed at event 8 of 10 using seed 1454215444564
4、crash分析
需要详细的日志分析可以看看这位大佬的分享