Android Monkey 压力测试二

 Google公司考虑到我们的需要,开发出了Monkey这个工具。但在很多人的印象中,Monkey测试就是让设备随机的乱点,事件都是随机产生的,不带任何人的主观性。很少有人知道,其实Monkey也可以用来做简单的自动化测试工作。

Mokey基本功能介绍
首先,介绍下Monkey的基本使用,如果要发送500个随机事件,只需运行如下命令:
adb shell monkey 500

插上手机运行后,大家是不是发现手机开始疯狂的运行起来了。So Easy!
在感受完Monkey的效果后,发现这“悟空”太调皮了,根本招架不住啊!是否有类似“紧箍咒”这种约束类命令,让这只猴子在某个包或类中运行呢?要想Monkey牢牢的限制在某个包中,命令也很简单:
adb shell monkey –p your-package-name 500

-p后面接你程序的包名。多想限制在多个包中,可以在命令行中添加多个包:
adb shell monkey –p your-package1-name –p your-package2-name 500

这样“悟空”就飞不出你的五指山了。
Mokey编写自动化测试脚本
若控制不住“悟空”,只让它随机乱点的话,Monkey是替代不了黑盒测试用例的。我们能不能想些办法,控制住“悟空”让他做些简单的自动化测试的工作呢?下面来看一下,如何用Monkey来编写脚本。
先简单介绍下Monkey的API,若有需要详细了解的小伙伴,可自行百度或谷歌一下查阅哈。
(1) 轨迹球事件:DispatchTrackball(参数1~参数12)
(2) 输入字符串事件:DispatchString(String text)
(3) 点击事件:DispatchPointer(参数1~参数12)
(4) 启动应用:LaunchActivity(String pkg_name, String class_name)
(5) 等待事件:UserWait(long slee ptime)
(6) 按下键值:DispatchPress(int keyCode)
(7) 长按键值:LongPress(int keyCode)
(8) 发送键值:DispatchKey(参数1~参数8)
(9) 打开软键盘:DispatchFlip(Boolean keyboardOpen)
了解完常用API后,我们来看一下Monkey脚本的编写规范。Monkey Script是按照一定的语法规则编写的有序的用户事件流,使用于Monkey命令工具的脚本。Monkey脚本一般以如下4条语句开头:

# Start Script
type = user    #指明脚本类型
count = 10     #脚本执行次数
speed = 1.0    #命令执行速率
start data >>  #用户脚本入口,下面是用户自己编写的脚本

下面来看一个简单应用的实战,实现的效果很简单,就是随便输入文本,选择选项再进行提交,提交后要验证提交后的效果。



# Start
Script
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)

将上述代码另存为HelloMonkey文件,然后将该脚本推送到手机的sd卡里。

adb push HelloMonkey /mnt/sdcard/

然后运行:

adb shell monkey -v -f /mnt/sdcard/HelloMonkey 1

脚本后面的数字1表示运行该脚本的次数。小伙伴们可以安装附件里的Bugben.apk再执行下脚本感受下哦!

Monkey工具总结

Monkey可以编写脚本做简单的自动化测试,但局限性非常大,例如无法进行截屏操作,不能简单的支持插件的编写,没有好的办法控制事件流,不支持录制回放等。我们在平时的使用中,关注较多的是利用好Monkey的优势,如不需源码,不需编译就可以直接运行。


虽然说我们知道Monkey是monkey.jar相手机发送伪随机事件流,但是通过对monkey的API研究发现,我们可以通过-f这个参数来实现monkey执行脚本。


在monkey的源码中我们可以看到以下例子:

[java]  view plain  copy
  1. /**  
  2.  * monkey event queue. It takes a script to produce events  
  3.  *   
  4.  * sample script format:  
  5.  *      type= raw events  
  6.  *      count= 10  
  7.  *      speed= 1.0  
  8.  *      start data >>  
  9.  *      captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,  
  10.  *          0.06666667,0,0.0,0.0,65539,0)  
  11.  *      captureDispatchKey(5113146,5113146,0,20,0,0,0,0)  
  12.  *      captureDispatchFlip(true)  
  13.  *      ...  
  14.  */    

由此可知,我们可以通过编写script来实现使用monkey进行指定操作。

首先,我们需要获取被测程序的包名和lanch activity。

然后我们需要编写一个script脚本,具体如下:

[javascript]  view plain  copy
  1. type= point  
  2. count= 4  
  3. speed= 1.0     
  4. start data >>     
  5. LaunchActivity(com.jason.test,com.jason.test.MainActivity)  
  6.   
  7. captureDispatchPointer(0,0,0,524,390,0,0,0,0,0,0,0);  
  8. captureDispatchPointer(1,1,1,524,390,0,0,0,0,0,0,0);   
  9. UserWait(300);  
  10. captureDispatchPointer(0,0,0,231,648,0,0,0,0,0,0,0);  
  11. captureDispatchPointer(1,1,1,231,648,0,0,0,0,0,0,0);  
  12. UserWait(300);  
  13. captureDispatchPointer(0,0,0,698,231,0,0,0,0,0,0,0);  
  14. captureDispatchPointer(1,1,1,698,231,0,0,0,0,0,0,0);  
  15. UserWait(300);  
  16. captureDispatchPointer(0,0,0,100,200,0,0,0,0,0,0,0);  
  17. captureDispatchPointer(1,1,1,100,200,0,0,0,0,0,0,0);  

此例仅用了点击事件,API中还有其他比较常用的事件,如:DispatchKey(按手机硬件)、DispatchTrakball(轨迹球)等。

上例中有几个重要参数需要解释一下:

DispatchPointer(downTime, eventTime,action, x, y, pressure, size, metaState, xPrecision, yPrecision,device, edgeFlags);  

其中action=0时为按下,action=1时为移动,action=2时为抬起,action=3时为取消。x、y为坐标点。pressure为压力值类型为float,size为点击范围大小类型为float。device为deviceID。

其他的参数仍然在研究中。

写好以上脚本后,将脚本放置到/sdcard/monkey.script

然后输入命令:

adb shell monkey -f /sdcard/monkey.script -v 1

其中1为执行脚本次数。


参考:

http://blog.csdn.net/scjie168/article/details/52415397

http://blog.csdn.net/jason_src/article/details/20121107

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值