Android App压力测试-Monkey(真机)

Posted on Posted in Android-SDK

昨天一个朋友说自己工作了好几年,但是依然只是会一些功能测试(手工),问有没有什么工具。其实工具永远都是辅助,首先要确定你要往哪个方向发展,然后由这个方向自会引申出很多工具,你再去专研工具,边专研边对这块方向深入,到时候,你就是前辈了,一通百通。

好了,下面来点干货,前两年在新浪博客里写过Monkey在模拟器上如何执行,今天从头到尾讲下在真机上如何运行。我的目的就是,你看了我的东西,是真的能够学会我所说的,不仅仅是知识的硬塞入。

首先,Monkey主要用于移动端的压力测试,在adb shell中,生成用户或系统的伪随机事件。做压力测试的目的就是提高产品的稳定性及留存率。

 什么时候用Monkey测试比较合适?

1)测试节点最好安排在功能系统测试通过,路径上没有问题的时候

2)测试时间最好安排在下班后的夜间进行,不占用上班时间,节约时间成本

Monkey测试涉及的核心:

1)ADB:Android Debug Bridge,安卓调试桥

2)MonkeyScript:一组可被Monkey识别的命令集合,可以完成重复固定的操作
当当当,下面进入正题

一、搭建Monkey的环境

1、下载安装sdk环境,不需要下载开发的api部分。

下载传送门:http://pan.baidu.com/s/1o80il2U

下载之后解压。

2、配置环境变量

在path变量值里加入Android-sdk中platform-tools和tools的目录路径,记得分号隔开。

3、验证是否配置成功

打开cmd命令行窗口,输入adb,出现下面的内容即为环境配置成功

monkey01

二、连接设备

1、首先通过USB线连上手机和电脑,确保手机的调试模式打开

2、cmd命令行窗口输入,adb devices,查看已连接的设备,如下图所示

注:可能是驱动的原因,有时候需要先打开手机助手(豌豆荚),连上手机。与adb.exe冲突,结束adb.exe进程。

monkey02其中,98AFBNM24J7R为已连接设备的名字。

3、指定设备安装测试包

adb -s 98AFBNM24J7R install ***.apk(写清楚apk的完整路径)

如图所示

monkey03

:有的人会出现以下问题:

monkey04这个是为什么呢,看看你连接的手机,因为安装的时候手机要允许。

三、执行Monkey

1、查看该包的packagename

aapt dump badging ***.apk(写清楚apk的完整路径),如图所示

 http://blog.jianjiexuan.com/tools/android-sdk/82.html

monkey05

2、最简单的monkey执行语句

adb -s 98AFBNM24J7R shell monkey -p <packagename>(即上一步查询的东西) -v 1000

这时的执行结果在命令行端显示

monkey06

具体想扩展的直接百度就可以,我这里只给大家一个准确简单的完整流程。

3、存储结果在手机端

进入该设备的shell界面

adb -s 98AFBNM24J7R shell

monkey08

执行:

 monkey -p <packagename>(即上一步查询的东西) -v 1000 > /mnt/sdcard/monkey.txt

加强综合版:有了这个基本可以说自己会monkey了(如果你看到这,可以加我微信了:jianjiexuan520

monkey -p ***** –ignore-crashes –ignore-timeouts –ignore-security-exceptions –monitor-native-crashes –pct-touch 50 –pct-motion 10 –pct-nav 10 –pct-majornav 10 –pct-appswitch 10 –pct-anyevent 10 –pct-syskeys 0 -v -v -v -s 123 –throttle 300 360000 2>/sdcard/yymonkey.log &

fuck,明明打的两个杠杠,显示出来的都是一个,为了避免误导大家,我顺便截个图,你们自己记得修改

命令说明:(具体详细解释可以看另一篇文章)

-p 包名:运行该程序

–ignore-crashes:当应用程序崩溃或发生任何失控异常时,Monkey将继续向系统发送事件,直到计数完成。

–ignore-timeouts :当应用程序发生任何超时错误,Monkey将继续向系统发送事件,直到计数完成。

–ignore-security-exceptions:当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将继续向系统发送事件,直到计数完成。

–monitor-native-crashes:监视并报告Android系统中本地代码的崩溃事件。

–pct-anyevent 10等:设定启动activity的百分比为10%(调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。)

-v -v –v:提供更加详细的信息。一个V为较少信息;二个为较详细信息;三个提示很详细信息。

-s 123:伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。(再次测试需要输入不同的数字,不然结果是一样的)

–throttle 300:在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度,如这里输入300就是为300ms,一般情况下是设置1000,为了发现更多的问题,我们加大了压力

360000:事件数设定为360000,大概可以保证晚上安心下班,明早看结果了。

0>(自定义路径):输入所有LOG记录

1>(自定义路径):输出所有LOG记录

2>(自定义路径) :输出错误LOG记录

:可以拔掉数据线再换个手机了~

四、结果分析

1、调取手机端执行结果到电脑上

adb pull 文件名 (写清楚文件在手机端的完整路径)  要储存在pc端的路径

例:

adb pull /sdcard/monkey.txt d:/  (注意这边的斜杠,反斜杠是不行,Unix使用/作为路径分隔符)

monkey07

2、查看结果

开发人员结合monkey打印的日志和系统打印的日志,结合测试中出现的问题。

  • CRASH:即崩溃,应用程序在使用过程中,非正常退出。(Exception)
  • ANR:Application Not Responding,等待时间过长,程序无响应
  • oom:out of memory 超出内存(一般来说是图片过大或内存泄漏引起的,大部分情况是图片问题)

一个完整的基本流程已经结束了,如果还想深入的小伙伴可以继续研究,可参看其他文档。

 

2 thoughts on “Android App压力测试-Monkey(真机)

发表评论

电子邮件地址不会被公开。 必填项已用*标注