什么是monkey script
Monkey script是按照一定的语法规则编写有序的用户事件流并适用于monkey命令工具的脚本。
前面monkey 测试基本是简单的,在使用中很多地方都用不上,比如我要指定输入text文本进行登陆时。
在 monkey 的源码 MonkeySourceScript.java 中找到了一小段注释,里面给了一个不到 10 行例子:
/**
* monkey event queue. It takes a script to produce events
*
* sample script format:
* type= raw events
* count= 10
* speed= 1.0
* start data >>
* captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,
* 0.06666667,0,0.0,0.0,65539,0)
* captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
* captureDispatchFlip(true)
* ...
*/
上面我们可以看到有个固定格式:
type指明类型
count说明执行次数,但是这里改成任何值都执行一次,monkey命令可以指定执行次数,这里也就无所谓了
speed命令执行速率。改动无影响,可以通过monkey命令行指定。
以上三个参数改动都没什么影响,一般不做改动。
start data >>相当于一个入口,说明脚本从下面开始执行
用法:
adb shell monkey -f <script file> <运行脚本的次数>
例如,我们放一个脚本到 /sdcard/monkey.script,然后运行:
adb shell monkey -f /sdcard/monkey.script 10,那么这个脚本里面指定的动作就会被执行10次。
整理的脚本函数列表:(简单介绍下Monkey的API)
//点击事件
DispatchPointer(long downTime, long eventTime, int action,
float x, float y, float pressure, float size, int metaState,
float xPrecision, float yPrecision, int device, int edgeFlags)
// 轨迹球事件 (用来做点击事件,action)
DispatchTrackball(long downTime, long eventTime, int action,
float x, float y, float pressure, float size, int metaState,
float xPrecision, float yPrecision, int device, int edgeFlags)
//输入字符串事件:
DispatchString(String text)
//发送键值:
DispatchKey(long downTime, long eventTime, int action, int code,
int repeat, int metaState, int device, int scancode)
// 打开软键盘
DispatchFlip(boolean keyboardOpen)
// 按下键值: 66表示回车,(意思将软键盘的字输入到指定的文本框中)
DispatchPress(int keyCode)
// 启动应用:
LaunchActivity(String pkg_name, String cl_name)
//等待事件:
UserWait(long sleeptime)
// 长按键值
LongPress(int keyCode)
例子:
type = user
count =10
speed =1.0
start data >>LaunchActivity(com.ringo.bugben,com.ringo.bugben.MainActivity)
# 点击文本框1
captureDispatchPointer(10,10,0,210,200,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,210,200,1,1,-1,1,1,0,0)
# 确定文本框1内容
captureDispatchString(Hello)
# 点击文本框2
captureDispatchPointer(10,10,0,210,280,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,210,280,1,1,-1,1,1,0,0)
# 确定文本框2内容
captureDispatchString(Ringo)
# 点击加粗
captureDispatchPointer(10,10,0,210,420,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,210,420,1,1,-1,1,1,0,0)
# 点击大号
captureDispatchPointer(10,10,0,338,476,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,338,476,1,1,-1,1,1,0,0)
# 等待500毫秒
UserWait(500)
# 点击提交
captureDispatchPointer(10,10,0,100,540,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,100,540,1,1,-1,1,1,0,0)
上面点击按钮坐标点可以借助,android sdk 里面UI界面分析工具“uiautomatorviewer” ,在下载的sdk 下面“sdk\tools”中
使用方式请百度一下。我不多做解释
想要更多的编程学习资料,请关注微信公众号:IT010101