Android稳定性测试工具Monkey的使用

发表于:2017-1-16 13:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:无嘴小呆子    来源:51Testing软件测试网采编

  停止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
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号