深入了解Android自动化测试-2.monkey脚本

monkey脚本编写

1.monkey API详解

1.轨迹球事件

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)

记住action,x,y三个参数即可!   action 0为按下(KeyDown)  1代表弹起(KeyUp)

DispatchTrackball(5109520,5109520,0,1150,330,0,0,0,0,0,0,0)

DispatchTrackball(5109520,5109520,1,1150,330,0,0,0,0,0,0,0)

-------------------------------------------------------------------------------------

long downtime,键最初呗按下的事件

long eventTime,事件发生的时间

int action,动作:ACTION_DOWN=0, ACTION_UP=1,ACTION_MULTIPLE=2

int code,键值,参见附录

int  repeat,重复次数

int metaState,当前按下的meta键的标识

int device,时间发生的设备ID

int scancode,上报点的信息

2.输入字符串事件

DispatchString(String text)      ex:Dispatch(abcd)表示输入字符串abcd

3.点击事件

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)

4.启动应用

LauncherActivity(String pkg_name,String c1_name)    ex:LauncherActivity(com.android.browser,com.android.browser.BrowserActivity) 这样就可以启动浏览器(BrowserActivity)这个应用了

5.等待事件

UserWait(long sleeptime)      ex:UserWait(3000)  单位为ms

6.按下键值

DispatchPress(int keyCode)

7.长按键值

LongPress(int keyCode)

8.发送键值

DispatchKey(long downTime,long eventTime,int action,float x,float y,float pressure,float size,int metaState,float xPrecision,float yPrecision,int device,int edgeFlags)

9.开关软键盘

DispatchFlip(boolean keyboardOpen)


2.monkey脚本编写

1.了解下Monkey脚本编写规范

/**

* monkey event queue,It takes a script to produce events sample script format:

*

* <pre>

* type = raw events

* count = 10

* speed = 1.0

* start data >>

* captureDispatchPointer(5109520,5109520,0,230,75429,458,1814..........)

* captureDispatchKey(5113146,5113146,0,20,0,0,0,0)

* captureDispatchFlip(true)

* ...

* </pre>

* /

--------------------------------------

* type = raw events   指明脚本类型,一般不用更改

* count = 10               脚本执行次数,但是发现改成任何值都只执行1次,monkey命令可以指定执行次数,所以这里也不用更改

* speed = 1.0            命令执行速度,这里改动无影响,速率也可通过monkey命令行指定

* start data >>           相当于一个入口,说明脚本从下面开始执行


2.编写一个简单脚本

1)打开BU盾本应用

2)在文本框1中输入数字111,在文本框2中输入字母aaa

3)点击提交


# start Script

type = user

count = 10

speed = 1.0

start data>>

*********************

1.如何查看包名?

adb shell     is data/data   发现budgen包名为“com.xuben.hellobugben”

2.如何查看应用名?

logcat | busybox grep START(确切的说是应用主界面名)

adb shell    logcat | busybox grep START

*********************

LaunchActivity(com.xuben.hellobugben,com.xuben.hellobugben.ChangeActivity)      #启动Bugben应用

captureDispatchPointer(10,10,0,327,231,1,1,-1,1,1,0,0)   #选中文本框

captureDispatchPointer(10,10,1,327,231,1,1,-1,1,1,0,0)   #选中文本框

$adb shell 后通过getevent命令进行:该坐标需要进行进制转换和分辨率调整

captureDispatchString(111) #确定输入内容:确定文本框1内容

captureDispatchPress(66)   #确定输入内容:发送Enter键使输入内容从软键盘到文本框中 KEYCODE_ ENTER= 66


captureDispatchPointer(10,10,0,327,375,1,1,-1,1,1,0,0)   #选中文本框

captureDispatchPointer(10,10,1,327,375,1,1,-1,1,1,0,0)   #选中文本框

captureDispatchString(aaa) #确定输入内容:确定文本框1内容

captureDispatchPress(66)   #确定输入内容:发送Enter键使输入内容从软键盘到文本框中 KEYCODE_ ENTER= 66

UserWait(500)  #等待500毫秒

captureDispatchPointer(10,10,0,555,999,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,1,555,999,1,1,-1,1,1,0,0)

************************************************完整脚本**********************************************************

# start script

type = user

count = 10

speed = 1.0

start data >>

LaunchActivity(com.xuben.hellobugben,com.xuben.hellobugben.ChangeActivity)

UserWait(5000)


captureDispatchPointer(10,10,0,327,231,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,0,327,231,1,1,-1,1,1,0,0)

captureDispatchString(111)

captureDispatchPress(66)

captureDispatchPointer(10,10,0,327,375,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,0,327,375,1,1,-1,1,1,0,0)

captureDispatchString(aaa)

captureDispatchPress(66)


captureDispatchPointer(10,10,0,500,600,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,1,500,600,1,1,-1,1,1,0,0)


captureDispatchPointer(10,10,0,327,744,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,1,327,744,1,1,-1,1,1,0,0)

UserWait(500)

captureDispatchPointer(10,10,0,555,999,1,1,-1,1,1,0,0)

captureDispatchPointer(10,10,1,555,999,1,1,-1,1,1,0,0)

以上代码另存为 input_bugben文件(monkey对文件格式无要求,可随意存储为像 .txt.文档)

adb push input_bugben /mnt/sdcard/

然后运行:::: adb shell monkey -v -f /mnt/sdcard/input_bugben 10     #运行该脚本10遍


3.坐标获取与转换(getevent&input keyevent)

1.getevent

$ adb shell getevent

     device name    type     code        value

/dev/input/event1: 0003   0030   000000c8

/dev/input/event1: 0003   0032   00000005

/dev/input/event1: 0003   0035   00000169

/dev/input/event1: 0003   0036   0000046c

/dev/input/event1: 0000   0000   00000000    

........


type/code/value 源码:kernel/include/linux/input.h

# define ev_syn(同步时间)      0x00    表示一组完整事件已经完成

define ev_key(Keyboard)     0x00

define ev_rel(相对坐标)        0x00

# define ev_abs(绝对坐标)      0x00

--------------

/*

 *Synchronization events.

*/

# define SYN_REPORT              0

# define SYN_CONFIG               1

# define SYN_MT_REPORT      2

--------------

0030:主接触面的长轴      0032:接触工具的长轴       0035:椭圆中心绝对坐标X      0036:椭圆中心绝对坐标Y

0035   0036  对应的是  169  46c:  该坐标点为Value为16进制的坐标值,10进制为(361,1132)该如何转换坐标呢?

$ adb shell getevent -p   找到当前设备,getevent显示 device name 为 /dev/input/enent1   对应的设备号:add device 4


code 0035/0036  X坐标 min为0 max为640     Y坐标 min为0 max位200   通过Android VNC Server源码 可反向退出如下计算公式

X = (x-xmin) * (getevent 十进制值 * 设备分辨率宽度) / ([0035max]-[0035min])

Y = (y-ymin) * (getevent 十进制值 * 设备分辨率高度) / ([0035max]-[0035min])


2.input keyevent

了解常用键值表,根据表格输入即可

$ adb shell input keyevent [key value]

$ adb shell input keyevent 82     查到menu的键值为82

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值