Monkey测试

2017-09-22  本文已影响291人  黄海佳

一、Monkey简介

monkey文档官方网址

Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),适合对app做压力测试,主要目的就是为了测试app 是否会Crash。

  • Monkey程序由Android系统自带,使用Java诧言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
  • Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

如果你是一个android开发人员,当你把自己的环境搭建好之后,这个东西已经存在了,直接可以使用。

(一)、Monkey 命令启动方式

1)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

2)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

3)在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

(二)、Monkey 参数

测试例子(com.haijia.test 是测试的应用包名):

adb shell monkey –p com.haijia.test –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >d:\monkey.txt
-v : 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:
 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息   
Level 0  :  adb shell monkey -p com.haijia.test -v 100              

 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 1  :  adb shell monkey -p com.haijia.test -v  -v 100         

// 最详细的日志,包括了测试中选中/未选中的Activity信息
Level 2  :  adb shell monkey -p com.haijia.test -v  -v  -v 100     

-throttle <毫秒>

用于指定事件之间的间隔时间 ,单位是毫秒;如果指定这个参数,monkey会尽可能快的 生成和发送消息。 示例:

adb shell monkey -p pkgname --throttle 3000 100  
-s(随机数种子)

用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:

adb shell monkey -p pkgname –s 10 100                

-p <允许的包名列表>

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。

指定一个包:adb shell monkey -p pkgname 100   

指定多个包:adb shell monkey -p pkgname1  –p pkgname2  100  
touch:设置触摸事件
adb shell monkey -pct-touch :指定touch事件的百分比percent 
motion:设置动作事件
adb shell monkey -pct-motion :指定motion事件的百分比percent 
trackball:设置轨迹球事件
adb shell monkey -pct-trackball :指定轨迹球事件百分比percent 
nav:导航事件设置
adb shell monkey -pct-nav :指定基本导航事件百分比percent 
majornav:设置主要导航事件
adb shell monkey -pct-majornav :设定主要导航事件百分比percent,兼容中间键,返回键,菜单按键 
syskeys:设置事件
adb shell monkey -pct-syskeys :设定系统事件百分比percent,比如HOME,BACK,拨号及音量调节等事件。
appswitch:启动Activity事件
adb shell monkey -pct-appswitch :设定启动activity的事件百分比percent 
anyevent:不常用事件设置
adb shell monkey -pct-anyevent :设定不常用事件地百分比
syskeys:设置事件
adb shell monkey -pct-syskeys :设定系统事件百分比percent,比如HOME,BACK,拨号及音量调节等事件。
crashes :程序崩溃事件设置
adb shell monkey -ignore-crashes :忽略崩溃和异常事件 
timeouts:超时事件设置
adb shell monkey -ignore-timeouts :忽略超时事件 

(三)关于测试命令

1、adb install xx.apk:

把指定的安装包apk文件安装到测试设备中。

2、adb shell monkey:

给指定的设备发送压力测试,number是要测试的次数。执行这个命令的效果就相当于有个手指在你的手机上乱点。

adb shell monkey -p com.xx.xx 10
3、adb shell monkey -p pkgname:

同上面效果一样,只是对指定包名(pkgname)apk进行测试。

4、查看adb 版本
adb version
5、查看当前可用设备
adb devices
6、查看monkey 帮助
adb shell monkey -help
7、--ignore-crashes 运行中忽略crash,遇到crash依然把后面的事件跑完
adb shell monkey --ignore-crashes -v 100
8、--ignore-timeouts 运行中忽略ANR,遇到ANR依然把后面的事件跑完
adb shell monkey --ignore-timeouts -v 100
9、--ignore-native-crashes 忽略monkey本身的异常,直到事件执行完毕
adb shell monkey --ignore-native-crashes -v 100
10、运行并生成.txt的日志文件
adb shell monkey -p com.xxxx.xxx.xxx -v -v -v 1000 > Desktop/monkeytestOne.txt

(四)Monkey 日志分析

生成的文件大致如下(Monkey finished 代表执行完成):
:Monkey: seed=1506157309339 count=500
:AllowPackage: com.haijia.test
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
//   - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.contacts.activities.DialtactsActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.deskclock.AlarmsMainActivity (from package com.android.deskclock)
//   - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)

// Seeded: 1506157309339
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: -0.0%
//   6: 25.0%
//   7: 15.0%
//   8: 2.0%
//   9: 2.0%
//   10: 1.0%
//   11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.haijia.test/com.stub.plugin.Stub01;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/com.stub.plugin.Stub01 } in package com.haijia.test
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/.activity.GuideActivity } in packagecom.haijia.test
    // activityResuming(com.haijia.test)
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Touch (ACTION_UP): 0:(250.74362,575.5601)
Sleeping for 0 milliseconds
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.haijia.test/com.stub.plugin.Stub01;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.haijia.test/com.stub.plugin.Stub01 } in package com.haijia.test
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
    // Allowing start of Intent { cmp=com.haijia.test/.activity.LoginByPhoneActivity } in package com.zcya.vtsp
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-2.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,1.0)
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
    // activityResuming(com.zcya.vtsp)
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_MOVE): 0:(389.88348,823.37866)
Events injected: 500
:Sending rotation degree=0, persist=false
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.zcya.vtsp/.activity.GuideActivity } in package com.zcya.vtsp
:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=4983ms (0ms mobile, 0ms wifi, 4983ms not connected)
// Monkey finished

异常情况

Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)

  1. 程序无响应的问题: 在日志中搜索 “ANR”
  2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug。

另外附上小米的测试命令例子

adb shell monkey -v –throttle 300 –pct-touch 30

–pct-motion 20 –pct-nav 20 –pct-majornav 15 –pct-appswitch 5

–pct-anyevent 5 –pct-trackball 0 –pct-syskeys 0 -p ‘%s’ 1000
上一篇 下一篇

猜你喜欢

热点阅读