小言_互联网的博客

Android Monkey 压力测试(一)

307人阅读  评论(0)

   Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,如:模拟用户触摸屏幕、滑动Trackball、按键等操作,适合对app做压力测试,检测程序多久的时间会发生异常,所有的事件都是随机产生的,不带任何人的主观性。

目录

一、环境搭建

二、Monkey简介

三、Monkey 架构

四、Monkey 参数大全

 五、Monkey 实例

六、Monkey 日志分析

七、杀monkey进程

八、必须重视Crash


一、环境搭建

  1. 安装 Android SDK 并配置环境变量

  2. 手机通过usb连接电脑,自动安装usb驱动,连接成功

  3. 验证adb命令能否运行

  pc端进入cmd命令行---进入C:\tmg目录下--运行adb shell,出现$符号证明adb命令运行成功,进入shell模式

    

  4. 手机设置

      手机屏幕超时设置为从不关闭,防止手机进入锁屏状态。

       如:进入设置-显示--屏幕待机--设置为从不关闭

二、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 参数大全

​ 

基本参数:

-p <允许的包名列表>         

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

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

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

-v        

用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分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信息

-s(随机数种子)            

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

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   

--ignore-crashes --ignore-timeouts

--ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。

 五、Monkey 实例

adb shell monkey -p 包名 -v 运行次数

例一:adb shell monkey –p com.huanxi.video –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >c:\monkey.txt

例二: monkey  -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &

    2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东东的日志一并输入到指定的文件中。

    最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。

六、Monkey 日志分析

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

2.异常情况

     Monkey 测试出现错误后,一般的分析步骤
     看Monkey的日志 (注意第一个swith以及异常信息等)
       1. 程序无响应的问题: 在日志中搜索 “ANR”
       2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug

Monkey 执行中断, 在log最后也能看到当前执行次数

3. 重现bug:monkey日志搜索关键词ANR exception,将之前的事件重新操作,尤其是seed值要一模一样,如monkey -p 包名 -v seed 0 500

在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。

首先我们需要查看Monkey测试中是否出现了ANR或者异常,无响应问题(ANR问题):在日志中搜索“ANR ”(此处有空格), 崩溃问题:在日志中搜索“Exception”,快速定位到关键事件信息 。然后查看Monkey里面出错前的一些事件动作,并手动执行该动作,找出重现步骤,给开发。

4.分析

无响应问题搜索”ANR”
奔溃问题搜索”CRASH”
内存泄漏问题搜索”GC”,并进一步分析
异常问题搜索”Exception”,如出现NullpointerException,则出现空指针,需要重视
有这类的情况再进行具体分析

七、杀monkey进程

  如果想中断运行中的monkey CTRL+C

  adb shell ps | grep monkey  返回进程号

  adb shell kill [刚才查到的进程号]

八、必须重视Crash

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

九、获取包名

adb shell pm list package -f #显示所有apk包名包括系统

adb shell dumpsys window w | findstr \/ | findstr name= #会显示正打开的程序

Monkey 深入参考:
详细教程一
详细教程二


转载:https://blog.csdn.net/yxxxiao/article/details/101538022
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场