Monkey随机性能压测初探(一)

Monkey介绍

Monkey程序由Android系统自带,是Android SDK提供的一个命令行工具, 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流,通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试,检测多长时间发生异常、会Crash、以及内存泄露检测可称为随机测试或稳定性测试。

Monkey 命令启动方式:  

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

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

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

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值,如果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毫秒

每个事件的间隔时间3000毫秒

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

 

实时测试

1、配好sdk、adb环境

2、手机连接电脑,开启开发者模式和调试模式

3、adb devices查看设备连接情况

4、进入要测试的app,查看包名

adb shell dumpsys window | findstr mCurrentFocus

adb shell dumpsys window w |findstr \/ |findstr name=

5、向app发送一些事件

向app发送10个随机事件,adb shell monkey -p com.rabbit.doctor -v 10    仅提供启动提示、测试完成和最终结果等少量信息

向app发送10个随机事件,adb shell monkey -p com.rabbit.doctor -v -v 10  提供较为详细的日志,包括每个发送到Activity的事件信息

向app发送10个随机事件,adb shell monkey -p com.docrab.pro -v -v -v 10  最详细的日志,包括了测试中选中/未选中的Activity信息

指定一个seed值-s 10,相同的seed值执行的操作相同   adb shell monkey -p com.rabbit.doctor -v -s 10 10

向app发送100个随机事件,每个事件间隔3秒 adb shell monkey -p com.docrab.pro --throttle 3000 -v -v -v  50

向app发送10个随机事件,并保存至路径下adb shell monkey -p com.rabbit.doctor -v 10 >c:\monkeylog.txt

向指定设备device压测   adb -s emulator-5554 shell monkey -p your.www.com -v 500  -s 加 device   emulator-5554 

6、测试结果展示

C:\Windows\system32>adb shell monkey -p com.docrab.pro -v 100                     //p表示指定测试程序,v表示monkey生成的详细随机事件名,100事件数

:Monkey: seed=1510018290134 count=100               //开始未指定时,随机生成的seed值

:AllowPackage: com.docrab.pro                 //包名

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// 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%                    //表示跳转到com.example.android.apis 里面的ApiDemos这一个Activity里。

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity;end

        // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity } in package com.docrab.pro

:Sending Touch (ACTION_DOWN): 0:(501.0,218.0)

      // Injection Failed

:Sending Touch (ACTION_UP): 0:(492.16553,221.75143)

     // Injection Failed

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)              //发送的一些动作,如点击按下,点击放开,移动。

:Sending Trackball (ACTION_UP): 0:(0.0,0.0)

:Sending Touch (ACTION_DOWN): 0:(462.0,51.0)

:Sending Touch (ACTION_UP): 0:(377.56924,0.0)

:Sending Trackball (ACTION_MOVE): 0:(1.0,-1.0)

:Sending Touch (ACTION_DOWN): 0:(451.0,1139.0)

:Sending Touch (ACTION_UP): 0:(445.72433,1140.6277)

:Sending Touch (ACTION_DOWN): 0:(717.0,464.0)

:Sending Touch (ACTION_UP): 0:(720.0,483.52737)

:Sending Trackball (ACTION_MOVE): 0:(-4.0,3.0)

:Sending Trackball (ACTION_UP): 0:(0.0,0.0)

:Sending Touch (ACTION_DOWN): 0:(684.0,69.0)

:Sending Touch (ACTION_UP): 0:(691.5189,169.68057)

:Sending Touch (ACTION_DOWN): 0:(376.0,1005.0)

:Sending Touch (ACTION_UP): 0:(382.10815,1030.8892)

Events injected: 100                                          //完成次数

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0             //丢弃的,键=0,指针=2,轨迹球=0,翻转=0。

## Network stats: elapsed time=327ms (0ms mobile, 0ms wifi, 327ms not connected)      //花费时间

// Monkey finished            //完成

 

Monkey日志分析

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

2、异常情况    

Monkey 测试出现错误后,一般的分析步骤 

看Monkey的日志 (注意第一个swith以及异常信息等)

          1. 程序无响应的问题: 在日志中搜索 “ANR”,ANR: Application Not Responding 应用程序无响应。ANR一般有以下三种类型:

                          1:KeyDispatchTimeout(5 seconds) --主要类型:按键或触摸事件在特定时间内无响应

                          2:BroadcastTimeout(10 seconds):BroadcastReceiver在特定时间内无法处理完成

                          3:ServiceTimeout(20 seconds) --小概率类型:Service在特定的时间内无法处理完成

                         

此外当ANR问题发生后我们可以使用adb pull命令(此命令无需root权限)从被测设备的/data/anr目录下导出名为traces.txt的对应log文件。例子: adb pull /data/anr/traces*.txt > C:\   

            2. 崩溃问题搜索 “CRASH”     

             3、异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视,肯定有bug)。

             

               4、内存泄露问题搜索"GC"(需进一步分析)

                      1、当手机提示Out of Memory(内存不足)时基本确定有内存泄露的问题。

                      2、当查看logcat时有GC字段,可能有内存泄露问题。

                与GC相关的字段有如下四个:

                GC_FOR_ALLOC 在分配内存时内存不够引发

                GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用

                GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发

                GC_BEFORE_OOM, 表明在虚拟机抛出内存不够异常OOM之前,执行最后一次回收内存垃圾

 当出现内存泄露问题时可以加上--hprof参数再执行一次monkey测试,便可获得对应的profiling报告。

如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。【/data/misc  需要root权限,可以在手机上安装个RE查看或通过手机助手查看

                

BUG实例1:

BUG实例2:

 

 

adb指令:

关闭adb服务  adb kill-server

开启adb服务  adb start-server

上传文件:
adb push <本地文件><远程路径> 例:adb push d:\3.txt storage/sdcard

下载文件:
adb pull <远程路径><本地路径> 例:adb pull storage/sdcard/3.txt d:\

输出调试的信息:adb bugreport

 

android list targets  #显示系统中全部android平台

adb install -r 应用程序.apk  #安装apk程序

adb push D:Test.apk/syste/app/   #安装apk程序

adb push D:file.txt/system/temp/   #向手机写入文件

adb pull /system/temp/ D:file.txt  #从手机获取文件

adb logcat  #查看日志

adb logcat | find "com.rabbit.doctor" >c:\hello.txt  #记录日志到电脑上

adb logcat -v time >  d:/sss.log   #当前日志输出到d盘的sss.log中

 

打印日志保存下来

adb logcat | find "com.koubeigongzuo.ck" >C:/logg.txt

实时监控对应app日志

adb logcat | find "com.koubeigongzuo.ck"

实时监控对应app报错日志

adb logcat *:E | find "com.koubeigongzuo.ck"

显示所有优先级大于等于错误(Error)的日志

adb logcat *:E

显示所有优先级大于等于严重错误的日志

adb logcat *:F

查看安卓版本号

adb shell pm dump com.koubeigongzuo.ck | findstr "versionName

apk的应用信息、版本信息

adb shell dumpsys package com.koubeigongzuo.ck

获取应用执行时的内存等相关信息

adb shell dumpsys meminfo com.koubeigongzuo.ck

点击

adb shell input tap 250 250

滑动

adb shell input swipe 250 250 300 300

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大力测试进阶之路

打赏博主喝瓶水吧!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值