Android Monkey压力测试环境搭建及使用

Monkey

一、Monkey测试原理:

Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

二、Monkey 测试的特点

Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性。
1、测试的对象仅为应用程序包,有一定的局限性。
2、Monky测试使用的事件数据流是随机的,不能进行自定义。
3、可对MonkeyTest的对象,事件数量,类型,频率等进行设置。

三、使用monkey的前提

1、准备一部安卓手机,Apple是不行的!
2、手机最好恢复为出厂设置的状态,如果能root就更好了
3、设置用成用不黑屏的状态,黑屏和锁屏会影响命令执行
4、手机不要设置锁屏和解锁密码,开机,常亮,没有人工操作,永远不黑屏锁屏
5、开启开发者选项,允许usb调试,如果有调试选项,记得选择MTP模式
6、PC电脑上安装adb tool相关工具
7、usb线将手机和电脑连接,弹出的提示信任的,选信任,提示允许usb调试的请允许调试
8、Dos窗口cd到你的adb目录下来执行monkey命令

Android Monkey压力测试环境搭建及使用

步骤:下载SDK -> 解压进入SDK Manager下载系统 -> 配置环境变量 -> 创建虚拟设备或连接真机 -> 进入命令模式按场景输入测试命令
软件开发工具包(缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。

参考博客:https://blog.csdn.net/zha6476003/article/details/79372684

真机测试

1、首先需要将手机连接到PC,测试连接是否正常,可在cmd里输入adb devices来进行验证;

在这里插入图片描述
2、因测试多针对一个特定的APP包,所以需要知道需要测试包的包名;可以直接问开发,也可以通过 adb shell pm list packages 列出所有包名来进行查找

(不确定包是否已安装,可以用adb shell pm list packages [options] 来进行确认,它的含义是列举出所有包含的package。 e.g. adb shell pm list packages com.taobao.taobao)

3、对特定APP包进行测试的命令为adb shell monkey -p <pakage.name>

4、安装apk程序(需要时)

将apk文件复制到android sdk对应platform-tools的目录下。
adb install 文件名.apk #安装方法
adb uninstall 包名 #卸载

Monkey参数

基本参数

1、-p <apackage.name>
作用:指定包名,Monkey将只访问这些包中的Activity。指定多个包,使用多个-p,一个-p后面接一个包名。
注:常用参数
例:adb shell monkey -p com.Android.browser -v 10

2、–v 表示反馈日志信息级别:Monkey中日志分别有三种级别:精简(默认)、普通、详细,上面运行的结果就是默认的精简。

语法格式是用 “-v” 来表示日志的级别:

-v 代表 精简;-vv 或者 -v -v 代表 普通;-vvv 或 -v -v -v 代表 详细。

注:常用参数

3、–throttle 用于指定用户操作(即事件)间的时延,单位是毫秒

例如:adb shell monkey -p com.Android.browser –throttle 1000 100    每次随机事件中间的间隔时间为1000毫秒,也就是1秒钟

注:常用参数

4、–pct-touch 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置。

注意percent代表了这个事件占到所有随机事件的百分比数,多个参数指定的时候,加起来的百分比数不能多于100。剩下的几个参数同理:

  --pct-motion <percent>     motion一般代表的是直线滑动,事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成;

  --pct-trackball <percent>   轨迹事件由一个或几个随机的移动组成,有时还伴随有点击;

  --pct-nav <percent>           早期Android手机上的up/down/left/right按键;

  --pct-majornav <percent>  引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键; 

  --pct-syskeys <percent>     这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键;

  --pct-appswitch <percent> 在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法;

–pct-anyevent 它包含了所有其它类型的事件,如:按键、其它不常用的设备按钮等等

例如:adb shell monkey -p com.tencent.mm --pct-touch 50 --pct-trackball 30 100    执行100次的随机事件中,有50%的touch事件和30%的轨迹球事件,其他事件随机比例分布。

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

例如:adb shell monkey -p com.tencent.mm –s 10 100    运行两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以说Monkey是伪随机的。

6、adb shell monkey --help 查看所有命令

调试用:

1、–ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
注:常用。

2、–ignore-timeouts
作用:通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
注:常用。

3、–ignore-security-exception
作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
注:常用。

monkey之monkey日志分析

参考https://www.cnblogs.com/aland-1415/p/6949964.html
adb shell monkey -p 应用程序包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 >D:\monkey_log\java_monkey_log.txt

说明:monkey作用包:应用程序包名

产生时间的序列的种子值:500

忽略程序崩溃、忽略超时、监视本地程序崩溃、详细信息级别是2、产生10000个随机事件
打开java_monkey_log.txt,查看测试结果,进行分析

初步分析方法:

(1)、找到是monkey里面的哪个地方出现错误

(2)、查看monkey里面出错前的一些事件动作,并手动执行该动作

(3)、若以上步骤还不能找到,可以使用之前执行monkey命令,再执行一遍,注意使用的seed值要一样

测试结果分析:

(1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

(2)、闪退问题(崩溃):在日志中搜索"crash"

(3)、异常:搜索"exception"

(4)、强制退出:搜索"force closed"
看前后执行事件进行复现
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;// Monkey finished代表执行完成。
Monkey执行中断,在log的最后也能查看到当前已执行的次数。

monkey内存泄露

参考https://blog.csdn.net/u011649536/article/details/49448107

1.内存泄露发现方法

执行monkey测试时有时会有内存泄露情况,可以进行排查

a.手机弹出out of memory对话框–基本确定有内存泄露

b.手机没有提示但是实际有内存泄露:排除方法通过logcat文件GC输出lgo信息,搜关键词GC,如果有下面四个中的一个,就可能存在内存泄露。(可以打开两个命令窗口,一个执行adb logcat,再执行monkey,待monkey结束后,ctrl+c中断log抓取)

GC_FOR_ALLOC, 因为在分配内存时内存丌够引发的

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

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

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

2.发现内存泄露–内存报告分析(利用hprof参数的内存快照生成内存报告)

在发现内存泄露后,可以执行相同的monkey,只需多加一个参数–hprof

adb shell monkey -p 包名 --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkey.txt

如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。(注: /data/misc 需要root权限,可

以在手机上安装个RE查看或通过手机助手查看)

ps:文件转换:配置monkey测试时的sdk-tools下查看是否hprof-conv命令,在命令行输入hprof-conv -help得知文件转化用法,直接转化就行,由.hprof转化成.conv格式。

转化后的文件用eclipse的Memory Analyzer tool(MAT)查看(此插件可以下载),可以点击 Reports->Leak Suspects链接来生成报告。

adb shell monkey -p com.taobao.taobao -v 100 >d:\monkey_log\log18.txt

adb shell monkey -p com.taobao.taobao --throttle 500 -v -v -v 100 > d:\monkey_log\log16.txt

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值