Android Monkey压力测试介绍

Monkey 是Android SDK提供的一个命令行工具, 可以简单、方便地运行在任何版本的Android模拟器和实体设备上,Monkey会发送伪随机的用户事件流,适合对app做压力测试

一、环境搭建

安装Android SDK并配置环境变量,下载adt-bundle-windows-x86_64-20140702.zip安装包,根据自己的系统下载64或32位的adt,下载好后进行解压,自己放到一个目录中,打开解压后的文件夹后发现里面有如下文件或文件夹,如图:

eclipse:这是ADT的压缩包自带的Eclipse,支持Android开发,不需要在配置,不过现在建议大家使用Android Studio

sdk:这是Android的SDK,我们配置环境变量就配置到这里

SDK Manager:用来管理SDK 更新和下载的一个管理器

接下来我们就来配置环境变量:

ANDROID_HOME这个环境变量指定要sdk这个文件夹,例如:ANDROID_HOME=D:\software\adt-bundle-windows-x86_64-20140702\sdk

PATH环境变量上增加如下值:

PATH=%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4.2;

 

配置好环境变量后,重新打开cmd,执行adb version,出现如下图所示代表配置正确

启动安卓模拟器或安卓手机,在cmd中输入adb devices,出现device证明成功

 

二、什么是Monkey

顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前乱敲键盘在测试,猴子什么都不懂, 只知道乱敲,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

 

三、Monkey 用来做什么

Monkey主要用于Android 的压力测试,自动的一个压力测试小工具,主要目的就是为了测试app是否会Crash

 

四、Monkey程序介绍

(1)Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
(2)Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;
(3)Monkey命令启动方式:
          a、可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
          b、在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试
          c、在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

 

五、Monkey 架构

Monkey 运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个像待测应用发送,随机按键消息的测试工具,验证待测应用在这些随机性的输入面前是否会闪退或者崩溃)

 

六、Monkey弱点

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界面的信息来执行验证操作

 

七、Monkey 参数大全

 

八、Monkey命令基本参数介绍

1、标准的monkey命令

     例如:adb shell monkey -v 500

               产生500次随机事件

2、四大类选项:常用选项、事件选项、约束选项、调试选项

     2.1 常用选项          

            --help 打印帮助信息
           -v 指定打印信息的详细级别,一个-v增加一个级别,默认级别为0,总共分3个级别,分别对应的参数如下表所示: 
                Level 0 : adb shell monkey -p com.shjt.map -v 100 # 缺省值,仅提供启动提示、测试完成和最终结果等少量信息 
                Level 1 : adb shell monkey -p com.shjt.map -v -v 100 # 提供较为详细的日志,包括每个发送到Activity的事件信息
                Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 # 最详细的日志,包括了测试中选中/未选中的Activity信息

     2.2 事件选项

            -s 指定产生随机事件种子值,相同的种子植产生相同的事件序列,实例:
                monkey测试1:adb shell monkey -p com.shjt.map –s 10 100
                monkey测试2:adb shell monkey -p com.shjt.map –s 10 100             

             --throttle 每个事件的间隔时间(毫秒),用于指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息

               示例:adb shell monkey -p com.shjt.map --throttle 3000 100

           --pct-touch 指定触摸事件的百分比

           --pct-motion 指定滑动事件的百分比

           --pct-trackball 指定轨迹球事件的百分比

           --pct-nav 指定导航事件的百分比(up/down/left/right)

           --pct-majornav 指定主要导航事件的百分比(back key、menu key)

           --pct-syskeys 指定系统按键事件的百分比(Home、Back、startCall、endCall、volumeControl)

           --pct-appswitch 指定activity之间的切换的百分比

           --pct-anyevent 指定任意事件的百分比

     2.3 约束选项

           -p 指定有效的package,如果不指定包, 则对系统中所有package有效

                 指定一个包:adb shell monkey -p com.shjt.map 100   

                 指定多个包:adb shell monkey -p fishjoy.control.menu  –p com.shjt.map  100

           -c activity必须至少包含一个指定的category,才能被启动,否则启动不了

     2.4 调试选项

           --dbg-no-events 初始化启动的activity,但是不产生任何事件

           --hprof 指定该项后在事件序列发送前后会立即生成分析报告

           --ignore-crashes 忽略崩溃

           --ignore-timeouts 忽略超时

           --ignore-security-exceptions 忽略安全异常

           --kill-process-after-error 发生错误后直接杀掉进程

           --monitor-native-crashes 跟踪本地方法的崩溃问题

           --wait-dbg 知道连接了调试器才执行的monkey测试

 

九、Monkey 实例

用monkey命令对上海公交app进行性能测试

adb shell monkey –p com.shjt.map –-throttle 100 –-pct-touch 70 –-pct-motion 30 –v –v 1000 > c:\monkey.txt

--pct-touch 70 --pct-motion 30,一个代表点击,一个代表滑动,两个加起来是100,执行1000次,代表不会进行其他事件操作,如轨迹事件(--pct-trackball),导航事件(--pct-nav)等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)

 

adb shell monkey –p com.shjt.map –s 100 --ignore-crashes --ignore-timeouts --monitor-native-crashes –v –v 1000 > monkey.log

 

十、Monkey 查看包名

手机中安装apk包名查看器,aapt命令查看

 

十一、Monkey  日志分析

正常情况,如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间; # Monkey finished代表执行完成

异常情况
Monkey测试出现错误后,一般的分析步骤,看Monkey的日志(注意第一个switch以及异常信息等)
1. 程序无响应的问题: 在日志中搜索"ANR"
2. 崩溃问题:在日志中搜索"Exception"(如果出现空指针,NullPointerException)肯定是有bug
Monkey执行中断,在log最后也能看到当前执行次数

 

十二、必须重视Crash

虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException,都是可以在用户使用时出现的, 何时出现只是时间问题,理论上来说,Monkey所有的Crash都需要在发布前修复掉

 

十三、monkey运行脚本

脚本执行命令:

monkey -f <filename> count,例如monkey -f monkey.script 1

posted @ 2019-08-13 14:26  laosun0204  阅读(174)  评论(0编辑  收藏  举报