一:简介
Monkey测试是Android平台自动化测试的一种手段, 通过Monkey程序模拟用户触摸屏幕、滑动,Trackball(轨迹球)、按键等操作来对设备上的程序进行压力测试, 检测程序多久的时间会发生异常(奔溃,闪退,无响应(性能方面的bug)等)。
monkey是命令行工具,是安卓系统自带的一个脚本,通过adb工具在PC端调用
缺点:Monkey虽然可以根据一个指定的命令脚本发送按键消息, 但其不支持条件判断, 也不支持读取待测界面的值来执行验证操作。
作用:monkey可以用来做随机测试,压力测试、自动化测试、稳定性测试,冒烟测试。
monkey什么时候用?等产品稳定了, 没有特别多的bug时候, 一般会用monkey去测试待测应用的稳定性、健壮性(是否会发生闪退、崩溃);整机测试。
monkey是压测手机app的稳定性,不是对服务器
附加:
(1)
可以找到monkey脚本在哪里
查看调用的jar包
从上面看出:monkey是装载电脑上面的,它本身就存在于每一个安卓系统中,它有monkey这样一个脚本,去调用这个jar包(理解可能还不够深入)
(2)日志和执行事件数放最后,要不可能会报错
二:常见参数
(1)-p
用于约束限制, 用此参数指定一个或多个包(Package, 即App名字) 。
指定指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包, Monkey将允许系统启动设备中的所有APP
adb shell monkey -p com.eg.android.AlipayGphoneRC 1000
#抖音(测试)
adb shell monkey -p com.ss.android.ugc.aweme 1000
#1000是事件计数(即让Monkey程序模拟1000次随机用户事件)
#指定2个: -p A包 -p B包
注入事件1000次,还有一些日志
分析日志参考:https://www.cnblogs.com/fighter007/p/8439309.html
(2)-s
用于指定伪随机数生成器的seed值, 如果seed相同, 则两次Monkey测试所产生的事件序列也相同的
命令:
Monkey测试1:adb shell monkey -p 包名 -s 101 100 提前指定
Monkey测试2:adb shell monkey -p 包名 -s 101 100
说明:
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作, 即一个序列) 是一样的。
操作序列虽然是随机生成的, 但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
(3)-v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别
-v:日志级别Level 0
说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息
-v -v:日志级别Level 1
说明:提供较为详细的日志, 包括每个发送到Activity的事件信息
-v -v -v:日志级别Level 2
说明:最详细的日志, 包括了测试中选中/未选中的Activity信息
命令:adb shell monkey-pcom.lemon.lemon ban-v 100
(4)事件时延
--throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
命令:adb shell 包名 --throttle 3000 100
--randomize-throttle
在事件之间插入随机延迟, 随机延迟范围为0到throttle设置的时间, 单位为毫秒
命令:adb shell 包名 --throttle 3000 --randomize-throttle 100
说明: 每次事件的间隔在0到3000毫秒之间不固定
备注:执行一百次monkey随机事件
(5)白/黑名单
--pkg-whitelist-file 白名单, 后面接txt文件
1) 第一步把你设置的白名单的包名写到一个txt文档里面, 记得路径和文档名字都是英文
2) 把这个文件拉到我们的安卓机中去, 放到/data/local/tmp下面
adb push d:\whitelist.txt /data/local/tmp
命令:adb shell monkey --pkg-whitelist-file /data/local/tmp/whitelist.txt 100
--pkg-blacklist-file黑名单, 后面接txt文件
命令:adb shell monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt 100
注意:包名换行
(6)保存日志
在后面加上空格 > 目录
(7)百分比事件
#100%的点击事件
--pct-touch 100
#可以组合,同样方式拼接就行了
#怎么中途停止
1;ctrl+z
2:adb shell
#查看进程
3:ps
4:kill 进程端口
常用的是1,2,3,5,6,7(因为是从0开始的,都-1就行)
1:触摸(--pct-touch)
#按下/抬起
Touch(ACTION_DOWN)和Touch(ACTION_UP)
2:手势(--pct-motion)
#直线滑动操作
#按下、随机移动、抬起,在手机看到是一个没有拐弯的直线操作(比如上滑列表下滑列表)
ACTION_DOWN、ACTION_MOVE、ACTION_UP
3:二指缩放(--pct-pinchzoom)
#放大缩小手势操作
起始(两个手指同时点下):ACTION_DOWN、ACTION_POINTER_DOWN
中间(两个手指进行直线滑动):ACTION_MOVE
结束(两个手指同时放开):ACTION_UP
4:轨迹(--pct-trackball)
现在比较少了
5:屏幕旋转(--pct-rotation)
#横屏、竖屏
其中degree:旋转方向,0表示90度,1表示180度,2表示270度,3表示360度
6:基本导航事件(--pct-nav)
#指定方向设备的上下左右按键操作(现在手机比较少了)
key(ACTION_DOWN)、Key(ACTION_UP)
7:主要导航事件(--pct-majornav)
#如中间键、回退键、菜单键
如Home键
key(ACTION_DOWN)、Key(ACTION_UP)
8:系统按键(--pct-syskeys)
#如Home键、返回键、音量键等
key(ACTION_DOWN)、Key(ACTION_UP)
9:启动Activity事件(--pct-appswitch)
#手机上每一个界面就是一个Activity
10:键盘事件(--pct-flip)
#点击输入框、键盘弹起、点击输入框外区域、键盘回收等
11:其他类型事件(--pct-anyevent)
#如按键、其他不常用的设备上的按钮等
(8)忽略事件
#忽略某些事件
--ignore [事件类型]
#指定某些操作的百分比
--pct [操作类型]
#--ignore在monkey的执行过程中,忽略部分引起monkey停止的事件,如:
crashes:应用奔溃
timeouts:ANR application not responding:应用未响应
security:安全验证
native:系统奔溃
如:忽略奔溃:--ignore-crashes
三:日志分析
拿抖音测试一下
adb shell monkey -p com.ss.android.ugc.aweme -v -v -v 1000 > d:\log2.txt
这些事件组成了一个猴子,Seeded: 1592550640194,如果要复现bug可以使用它
对按键想了解可以搜下:Android KEYCODE键值对应大全
看日志的时候,主要关注timeouts、error、ANR、exception,crash,通过ctrl+f去查看
四:简单脚本编写
#头文件信息
#类型
type = raw events
#执行1次
count = 1
#速度
speed = 1.0
#启动
start data >>
#括号里面是包名,这里我用抖音测试
LaunchActivity(com.ss.android.ugc.aweme)
#点击事件,这里的定位我随便写的
Tap(73,1247)
UserWait(5000)
Tap(600,1200)
UserWait(5000)
Tap(620,12)
UserWait(5000)