monkey简略:

1
2
monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备)。
它会向系统发送随机事件流(即随机模拟用户各种操作:点击、滑动、AP切换等),对单个程序或者整个系统进行压力测试。

monkey脚本:

1
2
3
4
5
6
脚本优势:简单、快捷、不需要借助任何工具,可以做简单的性能测试
脚本缺点:只能简单实现坐标、按键等基本操作(根据像素点来进行操作)
#头文件、控制monkey发送消息的参数
type = raw events
count = 10
speed = 1.0
Api 说明
LaunchActivity(pkg_name,activity) 启动应用的Activity
Tap(x,y,tapDuration) 模拟单击事件.tapDuration为点击的持续时间,此参数可冒略
RotateScreen(rotationDegree,persist) 旋转屏幕,rotationDegree为旋转角度,1代表90度:persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变
DispatchPress(keyName) 按键
DispatchFlip(true/false) 打开或者关闭软键盘
RunCmd(cmd) 在设备上运行 shell 命令
PressAndHold(x,y,pressDuration) 模拟长按事件
DispatchString(input) 输入字符串
DeviceWakeUp() 唤醒屏幕
UserWait(sleepTime) 让脚本中断一段时间

adb获取系统已安装的apk文件:

1
2
1.第三方app:adb shell /data/app/目录下apk pull出来
2.系统app:adb shell /system/app/目录下apk pull出来

monkey脚本编写步骤:

1
2
3
4
5
6
7
8
9
10
1:确定步骤,如下:
获取包名和activityname
通过SDK自带的aapt工具
一步一步的在手机上操作,并获取像素点
利用工具(SDK自带uiautomatorviewbat或者开发者选项中的坐标位置
要仔细的检查下,是否脚本上的每一步都跟你的手动操作都对应
检查脚本,跑一下脚本。
2:运行脚本
将文件放到手机中:adb push 本地monkey脚本文件 /data/local/tmp
运行文件:adb shell monkey -f 手机文件地址/文件名称 数量

脚本示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//myMonkey.txt文件内容:
#头文件、控制monkey发送消息的参数
type = raw events
count = 10
speed=1.0
#以下monkey命令
start data >>
#打开测试应用程序
LaunchActivity(com.android.browser,com,android.browser.BrowserActivity)
#让浏览器将页面加载出来,所以我们的脚本需要等待一段时间
UserWait(3000)
#点击浏览器网址
Tap(367,109)
#输入www.ningmengban.com
DispatchString(www.ningmengban.com)
#输入enter键
DispatchPress(KEYCODE ENTER)
#输入Home键返回到桌面
DispatchPress(KEYCODE HOME)

获取手机当前显示的界面的包名:adb shell dumpsys activity | find “mFocusedActivity”

命令帮助:adb shell monkey –help

monke常见参数:

-p:

1
2
3
4
5
用于约束限制,用此参数指定一个或多个包( Package,即App名字)。指定指定包之后Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP
命令 :
adb shell monkey -p com.lemon.lemonban 1000
说明 :
com.emon.lemonban 为包名,1000是事件计数(即让Monkey程序模拟1000次随机用户事件)

-s:

1
2
3
4
5
6
用于指定伪随机数生反工seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同
命令 :
Monkey测试1 : adb shell monkey -p com.lemon.lemonban -s 101 100 提前指定
Monkey测试2 : adb shell monkey -p com.lemon.lemonban -s 101 100
说明 :两次测试的效果是相同的,因为模拟的用户操作序列( 每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。
操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的,

-v

1
2
3
4
5
6
7
8
总共分3个级别日志级别(正常使用3个-v)
-v 用于指定反馈信息级别( 信息级别就是日志的详细程度) Level0
说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息
-v -v 日志级别 Level 1
说明 :提供较为详细的日志,包括每个发送到Activity的事件信息
-v -v -v日志级别 Level 2说明:最详细的日志,包括了测试中选中/未选中的Activity信息
命令 : adb shell monkey -p com.lemon.lemonban -v 100
说明: com.emon.lemonban 为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)

–throttle

1
2
用于指定用户操作( 即事件)间的时延,单位是毫秒
命令 : adb shell monkey -p com.lemon.lemonban --throttle 3000 100

–randomize-throttle

1
2
3
在事件之间插入随机延迟,随机延迟范围为0到throttle设置的时间,单位为毫秒
命令 : adb shell monkey -p com.lemon.lemonban --throttle 5000 --randomize-throttle
说明: 执行一百次monkey随机事件,每次事件的间隔在0到5000毫秒之间不固定

–pkg-whitelist-file

1
2
3
4
5
白名单,后面接txt文件(要执行测试的多个包名,多个包名换行保存即可)
1)第一步把你设置的白名单的包名写到一个txt文档里面,记得路径和文档名字都是英文!D:whitelist.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

1
2
黑名单,后面接txt文件
命令 : adb shell monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt 100

日志输出到指定路径

1
2
> 后面加输出的路径即可;
命令:adb shell monkey -p com.lemon.lemonban 1000 > D:/monkey_log.txt

monkey其他常见参数

名称 说明
–pct-touch 调整点击事件的百分比,down-up,编号为0(100为百分之百)
-pct-motion 调整移动事件的百分比,直线滑动,编号为1
-pct-pinchzoom 调整两指缩放压缩手势的百分比,比如放大缩小手势操作,编号为2
-pct-trackball 调整轨迹球时间百分比,不常用,编号为3 现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数
-pct-rotation 调整旋转事件的百分比,横屏竖屏,编号为4
-pct-nav 调整导航事件的百分比,编号为5,包括上下左右,如方向输入设备的输入 )老手机的上下左右键,智能机上没有
-pct-majornav 调整主要导航事件的百分比,编号为6,例如中间键、回退键、菜单键
-pct-syskeys 调整”系统”按键事件的百分比,编号为7,这些按钮一般专供系统使用,如Home, Back,Start Call, End Call,音量控制
-pct-appswitch 调整app切换事件的百分比,编号为8
-pct-flip 调整键盘唤出隐藏的百分比,编号为9
-pct-anyevent 跳转除上面事件外,其它事件的百分比,编号为10,如按键、其他在设备上不常用的按钮等