如何android稳定性测试,Android稳定性测试工具Monkey的使用

停止Monkey

对于正在运行的monkey应用。如果我们想要停止monkey测试可以如下命令。

$ adb shell

shell@lte26007:/ $ top | grep monkey

26194  0   0% S    10 461848K  23012K     shell    com.android.commands.monkey

26194  0   0% S    10 461848K  23012K     shell    com.android.commands.monkey

26194  0   0% S    10 461848K  23012K     shell    com.android.commands.monkey

$ kill -9 26194 $ kill -9 26194

在这里是通过杀死正在运行的monkey的进程来终止monkey的测试。

如何编写Monkey脚本

我们了解了一些Monkey的基本命令以后,但这通过这些命令运行Monkey测试所有的事件都是随机的,只会在手机屏幕进行随机点击。那么我们如何使用monkey做到自动填写,选择,提交呢?在这就来看一下如何编一个Monkey脚本。

常用Monkey Api介绍

1.启动应用

LaunchActivity(String pkg_name, String cl_name)

启动应用的Activity。参数为包名和启动的Activity。

2.轨迹球事件

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)。如果使用这个方法实现点击事件,这个方法就应该成对出现,先传入0,然后在传入1。对于x,y就是定位的坐标点。下面列出其中参数含义。

long downTime:键最初被按下时间

long eventTime:事件发生时间

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

float x:x坐标

float y:y坐标

float pressure:当前事件的压力,值为0~1

float size:触摸的近似值,范围为0~1

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

float xPrecision:x坐标精确值

float yPrecision:y坐标精确值

int device:事件来源,范围0~x,0表示不来自物理设备

int edgeFlags:坐标是否超出了屏幕范围

3.输入字符串事件

DispatchString(String text)

输入一个不加引号的字符串

4.点击事件

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

与轨迹球事件类似

5.等待事件

UserWait(long sleeptime)

6.按下事件

DispatchPress(int keyCode)

7.单击事件

Tap(int x,int y)

8.长按事件

LongPress()

9.发送键值

DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)

10.开关软键盘

DispatchFlip(boolean keyboardOpen)

编写Monkey脚本

在写Monkey脚本之前首先看一下怎么获取包名和应用名,已经怎么怎么获取点击坐标。

获取包名和应用名

1.查看包名

$ adb shell

# ls data/data

2.查看应用(主界面)名

$ adb shell

# logcat | grep START

以QQ为例看一下输出结果

LiJiangdongdeMacBook-Pro:~ lijiangdong$ adb shell

shell@lte26007:/ $ su

root@lte26007:/ # logcat | grep START

I/libmc   ( 9161): received event[index:0,mask:0x80,name:SYSTEM_RESTART@1487131192515.txt]

D/MSF.C.NetConnInfoCenter(18238): receive broadcast Intent { act=android.intent.action.MEDIA_SCANNER_STARTED dat=file:///system/media flg=0x10 cmp=com.tencent.mobileqq/.msf.core.NetConnInfoCenter }

D/MSF.C.NetConnInfoCenter(18238): receive broadcast Intent { act=android.intent.action.MEDIA_SCANNER_STARTED dat=file:///storage/emulated/0 flg=0x10 cmp=com.tencent.mobileqq/.msf.core.NetConnInfoCenter }

D/AndroidRuntime(19635): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<

I/ActivityManager(17556): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mobileqq/.activity.SplashActivity bnds=[34,466][170,602]} from pid 17844

从cmp=com.tencent.mobileqq/.activity.SplashActivity这句话可以看出QQ应用的主界面名为SplashActivity。

获取点击坐标

$ adb shell getevent

之后我们手指在屏幕上操作就可以看到输出的事件信息。下面看一下输入信息。

/dev/input/event1: 0003 0039 00003809

/dev/input/event1: 0003 0035 00000172

/dev/input/event1: 0003 0036 000002aa

/dev/input/event1: 0001 014a 00000001

/dev/input/event1: 0000 0000 00000000

/dev/input/event1: 0003 0039 ffffffff

/dev/input/event1: 0001 014a 00000000

/dev/input/event1: 0000 0000 00000000

(DeviceName)  (Type)(Code)(Value)

当Code出现0030和0032时,表示有触屏事件发生,而0035和0036出现时则代表实际触屏时的绝对坐标x,y。比如这里点172和2aa,这个是16进制,对应10进制为370和682。

Monkey脚本

上面api明白以后Monkey脚本的编写就很简单了,下面就以QQ为列变了一段monkey脚本。对于头文件是必须的。Monkey脚本是没有文件格式限制的。

#头文件信息

type=raw events

count=10

speed=1.0

start data >>

#具体的脚本内容

LaunchActivity(com.tencent.mobileqq,com.tencent.mobileqq.activity.SplashActivity)

UserWait(1000)

DispatchPointer(10,10,0,165,189,1,1,-1,1,1,0,0)

DispatchPointer(10,10,1,165,189,1,1,-1,1,1,0,0)

UserWait(1000)

DispatchString(1234567)

DispatchFlip(false)

UserWait(5000)

Tap(359,257)

上面这段脚本执行的命令是:启动QQ->点击搜索->输入1234567->点击QQ号为1234567的人。下面就来看一下如何执行这段脚本代码。

$ adb push monkey_test /mnt/sdcard/

$ adb shell monkey -f /mnt/sdcard/monkey_test 1

总结

在这里介绍了Monkey的使用,对于我们的应用通过monkey进行压力测试,也能够发现众多的ANR以及Crash。对于Monkey也有一定缺点的,它是不支持截屏,录制回放等操作的。

22/2<12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值