本篇我们将讲述常用的五个Monkey API。目的在于完成一个简单的测试脚本。
(一)五个常用API
(1)如何开启Activity
开启一个Activity需要两个参数:Package和Activity
LaunchActivity(com.breakloop.butterknifedemo,com.breakloop.butterknifedemo.MainActivity);
(2)如何选择控件
控件的选择包括两个Event,EVENT_DOWN和EVENT_UP。
因此需要调用两次API,来选中控件。
先看一下API
DispatchPointer(downTime, eventTime,action, x, y, pressure, size, metaState, xPrecision, yPrecision,device, edgeFlags)
API有13个参数,但我们只关注第三,四,五个。
注:对于其他参数的含义,感兴趣的同学可以google一下。
action即为Event,EVENT_DOWN为0,EVENT_UP为1。
而x,y则是我们在上一博文中所讲的坐标。
(3)如何输入数据
DispatchString(str)
注:API中直接输入String数值即可,无需带双引号“”
(4)按下键值
DispatchPress(key_code)
具体key_code值,可以android developer。常用键,例如回车,值为66。
通常在输入数据后,都需要回车,以保住数据确实被输入至控件中(针对输入法)。
(5)等待
UserWait(ms)
单位为毫秒。通常用在耗时操作后,以等待操作完成,例如启动activity,或数据输入。
(二)脚本头,注释
Monkey的脚本头如下
# Start of Script
type= user
count= 1
speed= 1.0
start data >>
“type”为脚本类型,可以自定义,无有效意义。
“count”为脚本的执行次数。但修改也无效。
“speed”为执行速度。但修改也无效。
“start data >>”之后将为脚本主体(APIs)。
脚本使用“#”进行单行注释
(三)编写脚本
我们利用前两部分的知识,对APP进行测试。
需求:
(1)启动activity
(2)输入数据
(3)点击按钮
首先,通过getevent获取控件坐标绝对值,并进行转换。
EditView(376,1119)
Button Show(555,1538)
Button A(127,774)
Button B(394,781)
Button C(747,808)
Button D(986,791)
直接上脚本
#Monkey Script
type = user
speed = 1
count = 1
start data >>
#Open Activity
LaunchActivity(com.breakloop.butterknifedemo,com.breakloop.butterknifedemo.MainActivity)
UserWait(500)
#Select Edit
DispatchPointer(0,0,0,376,1119,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,376,1119,0,0,0,0,0,0,0)
UserWait(500)
#Input Content
DispatchString(12345678)
#UserWait(500)
#Confirm Input in Flip
#DispatchPointer(0,0,0,989,1726,0,0,0,0,0,0,0)
#DispatchPointer(0,0,1,989,1726,0,0,0,0,0,0,0)
#UserWait(500)
#Close Flip
#DispatchPointer(0,0,0,1012,1093,0,0,0,0,0,0,0)
#DispatchPointer(0,0,1,1012,1093,0,0,0,0,0,0,0)
DispatchFlip(false)
UserWait(500)
#Click Button Show
DispatchPointer(0,0,0,555,1538,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,555,1538,0,0,0,0,0,0,0)
UserWait(500)
#Click Button A
DispatchPointer(0,0,0,127,774,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,127,774,0,0,0,0,0,0,0)
UserWait(500)
#Click Button B
DispatchPointer(0,0,0,394,781,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,394,781,0,0,0,0,0,0,0)
UserWait(500)
#Click Button C
DispatchPointer(0,0,0,747,808,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,747,808,0,0,0,0,0,0,0)
UserWait(500)
#Click Button D
DispatchPointer(0,0,0,986,791,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,986,791,0,0,0,0,0,0,0)
UserWait(500)
将脚本保存为script,文件无后缀名。
(四)执行脚本
需要将脚本拷贝至设备,才能执行。
C:\Users\XXXX>adb push C:\D\Monkey\script data/data/com.breakloop.butterknifed
emo
C:\D\Monkey\script: 1 file pushed. 0.1 MB/s (1300 bytes in 0.009s)
C:\Users\XXXX>adb shell monkey -f data/data/com.breakloop.butterknifedemo/scri
pt -v 1 >C:\D\Monkey\Log.txt
// Shell command input text 12345678 status was 0
C:\Users\XXXX>
显示效果如下:
(五)总结
常见的Monkey API还有很多,但相对不常用。例如
LongPress(Key_code)//长按
DispatchTrackball()//轨迹球
DispatchKey//发送键值
DispatchFlip(isOpen)//开关软键盘
至此,Monkey API部分完结。
我们不必纠结于掌握的Monkey API过少,因为Monkey是最基本的测试工具(相当于CMD)。经过多层的封装后,其交互会更为友好。之后,我们会总结MonkeyRunner(相当于VS),相对Monkey,它的使用将更为方便。