MonkeyScript是什么
MonkeyScript是monkey的脚本语言,是一组可以被Monkey识别的命令集合,可以帮助我们完成一系列被固定的重复性操作。
为什么要使用MonkeyScript
Monkey测试太过于随机、对主要测试模块没有针对性、执行过多无意义操作等,虽然Monkey可以忽略各种异常,但Money进程容易挂掉,对测试结果有较大的影响。针对以上问题,MonkeyScript可以让用户制定专属的脚本,更加有针对性测试对应模块。
MonkeyScript使用场景
1)模块需要自动化测试;
2)改善和优化Monkey测试;
3)需要针对功能制定测试脚本;
在什么时候用MonkeyScript
1)当模块进行了一轮Monkey测试后再按模块主要功能制定针对性测试脚本进行测试;
2)当模块是关联型模块,例如:手机中的密码保险箱,这种类型的模块存在关联性,需要和其他模块关联测试,除了模块本身的主要功能,还要制定和其他模块关联场景测试脚本;
怎样使用
基本命令
运行脚本命令
1 | adb shell monkey -f <scriptfile> <event-count> |
1)scriptfile:script后缀脚本文件
2)event-count:脚本运行次数
使用adb命令将脚本push至手机中
1 | adb push D:\pdf\monkey\monkey.script /sdcard/ |
执行monkey命令,比如执行2次
1 | adb shell monkey -f /sdcard/monkey.script 2 |
脚本格式
Monkey的Script有一个固定编码格式要求,文件头如:
1 | Start of Script |
启动测试程序
1 | 启动应用跳转至目标界面 |
常用API
1、点击事件(DispatchPointer)
DispatchPointer 命令用于向一个指定的坐标位置,发送单个手势消息,一般用它来模拟点击的操作。
1 | DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags) |
1)只需要关注action 、 x 、y 三个参数即可;
2)action :事件是按下还是抬起,0 表示按下,1 表示抬起;
3)x、y:表示当前事件触发的X轴和Y轴的坐标;
也就是说,两个 DispatchPointer 命令加在一起,分别表示 按下 和 抬起 ,这表示一次点击操作,其余的参数,统一设置为 0 即可。
2、按键事件(DispatchKey)
DispatchKey 主要是用于发送一些 Android 标准的 EventKey 按键消息。但是需要写对应的值。
1 | DiapatchKey ( downTime ,eventTime ,action ,code ,repeat ,metaState ,device ,scancode) |
1)只需要关注,action、code、repeat即可;
2)action : 消息的类型。0 表示按下,1 表示抬起;
3)code:按键的值。参考KeyEvent;
4)repeat:按键重复的次数;
具体的键值,可以通过官网查询:https://developer.android.com/reference/android/view/KeyEvent.html
3、轨迹球(DispatchTrackball)
DispatchTrackball 命令用于像一个指定位置发送单个轨迹球的消息。它的方法前面也与 DispatchPointer 一样。
4、 旋转屏幕(RotateScreen)
RotateScreen 命令用于发送旋转测试设备屏幕方式的事件。
1 | RotateScreen ( rotationDegree , persist) |
1)rotateDegree:旋转的角度;
2)persist:是否保持旋转前的状态。0 为不保持,1 为保持;
rotateDegree,可配置的角度可以参考 android.view.Surface里的常量进行配置,可选的角度有 4 个:ROTATION_0、ROTATION_90、ROTATION_180、ROTATION_270
5、软键盘开关(DispatchFlip)
DispatchFlip 命令用于打开或者关闭软键盘。
1 | DispatchFlip (keyboardOpen) |
1)其中的参数,true 表示打开,false 表示关闭;
6、键盘事件(DispatchPress)
DispatchPress 命令用于模拟敲击键盘的事件。
1 | DispatchPress( keyName ) |
7、启动Activity(LaunchActivity)
LaunchActivity 命令用于打开任意应用的一个页面,但是前提条件是打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开。
1 | LaunchActivity ( pkg_name , act_name ) |
1)打开的 App 的包名;
2)打开的 Activity 的名称;
8、等待(UserWait)
UserWait 命令用于让脚本中断执行一段时间。因为是脚本执行,多个事件之间执行的速度会非常的快,有时候我们需要等待一些事件触发之后的结果返回,需要等待一段时间之后,再继续执行脚本,这个时候就可以使用 UserWait 。
1 | UserWait ( sleepTime ) |
1)sleepTime 的单位是毫秒;
9、输入字符串(DispatchString)
DispatchString 命令用于向 Shell 输入一个字符串。
1 | DispatchString( input ) |
- input 就是一个字符串即可,但是 MS 对中文的支持并不好,所以尽量输入英文的测试数据;
10、长按(LongPress)
LongPress 命令用于模拟长按时间,标准为长按 2s 。它是一个无参的方法,直接调用即可。
11、运行 Shell 命令(RunCmd)
RunCmd 命令用于在设备上运行 shell 命令。当然这些 shell 命令必须是当前待测试设备支持的 shell 命令。
1 | RunCmd ( cmd ) |
1)参数 cmd 就是需要执行的 shell 命令;
12、手指单击(Tap)
Tap 命令用于模拟一次手指单击事件。
1 | Tap( x ,y ,tapDuration) |
1)tapDuration 参数,表示当前单击的持续时间,可选参数;
13、唤醒设备并解锁(DeviceWakeUp)
DeviceWakeUp 命令可以唤醒设备,并进行解锁。当然需要是一个无加密的设备才可以,有数字密码或者图形密码,都会导致失败。
14、等待5s(ProfileWait)
ProfileWait 命令和 UserWait 类似,但是它已经设定好等待的时长,就是 5s ,直接调用即可。
15、长按消息(PressAndHold)
PressAndHold 命令用于模拟一个长按事件,和 LongPress 类似,但是它是可以定制长按时长的。
1 | PressAndHold( x, y, pressDuration) |
16、拖拽(Drag)
Drag 命令用于模拟一个按住拖拽的动作。
1 | Drag( xStart, yStart, xEnd, yEnd, stepCount) |
1)前面四个参数分别表示了事件开始的坐标点,和结束的坐标点;
2)stepCount ,因为拖拽事件是一组连续的事件,这个参数可以指定当前拖拽事件,是由多少个小事件组成的,越多,越连贯;
17、缩放事件(PinchZoom)
PinchZoom 命令用于模拟缩放手势。
1 | PinchZoom( pt1xStart, pt1yStart, pt1xEnd, pt1yEnd, pt2xStart, pt2yStart, pt2xEnd, pt2yEnd, stepCount) |
它的参数分别表示了两个手指的开始位置和结束位置,并且设定了完成了多少次缩放操作。
例子示范
1、打开UI Automator View这个工具,点击左上的手机图标;
2、可获取当前手机屏幕图,选择屏幕图中的控件,则会在右侧展示这个控件对应的布局信息和一些属性信息;
3、比如这个选择了Receiver广播,右侧信息告诉这个位于RecyclerView中,是其中的一个item并且是个TextView控件,而bounds[48,377][325,442]这项属性告诉这个TextView的边框位置左上角起始点是(48,377),右下角结束点是(325,442);
4、之前提到的轨迹球事件、点击事件需要中这个范围选取一个点来操作,即参数x,y。比如选择点(100,400),这个点位于这个TextView之内;
5、参照如上的图,我们现在需要通过monkey script来模拟操作一系列事件
1)打开这个应用;
2)点击Receiver广播;
3)点击REGISTER A RECEIVER;
4)编辑框输入Hello;
5)点击SEND A RECEIVER;
6)点击UNREGISTER A RECEIVER;
7)点击CLEAR清空编辑框;
8)返回退出回到首页;
脚本实现
1 | typ=user |
补充说明
Automator View工具部署的坑比较多,经过摸索最后采用手机设备自带的开发者模式中的输入-指针位置可以定位到坐标,这样更快更准确得到坐标。
附录二《KEYCODE列表》
附录一《API源码》
1 | /* |
- 本文作者: 小邓同学
- 本文链接: https://dyasher.github.io/2022/10/18/MonkeyScript——自动化测试进阶/
- 版权声明: 该文章版权归作者DYaher所有,未经授权其他任何机构和个人不得以盈利为目的非法转载和使用。违反此声明者,本人将依法追究其法律责任。