昨天一个朋友说自己工作了好几年,但是依然只是会一些功能测试(手工),问有没有什么工具。其实工具永远都是辅助,首先要确定你要往哪个方向发展,然后由这个方向自会引申出很多工具,你再去专研工具,边专研边对这块方向深入,到时候,你就是前辈了,一通百通。
好了,下面来点干货,前两年在新浪博客里写过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,出现下面的内容即为环境配置成功
二、连接设备
1、首先通过USB线连上手机和电脑,确保手机的调试模式打开
2、cmd命令行窗口输入,adb devices,查看已连接的设备,如下图所示
注:可能是驱动的原因,有时候需要先打开手机助手(豌豆荚),连上手机。与adb.exe冲突,结束adb.exe进程。
其中,98AFBNM24J7R为已连接设备的名字。
3、指定设备安装测试包
adb -s 98AFBNM24J7R install ***.apk(写清楚apk的完整路径)
如图所示
注:有的人会出现以下问题:
这个是为什么呢,看看你连接的手机,因为安装的时候手机要允许。
三、执行Monkey
1、查看该包的packagename
aapt dump badging ***.apk(写清楚apk的完整路径),如图所示
http://blog.jianjiexuan.com/tools/android-sdk/82.html
2、最简单的monkey执行语句
adb -s 98AFBNM24J7R shell monkey -p <packagename>(即上一步查询的东西) -v 1000
这时的执行结果在命令行端显示
具体想扩展的直接百度就可以,我这里只给大家一个准确简单的完整流程。
3、存储结果在手机端
进入该设备的shell界面
adb -s 98AFBNM24J7R shell
执行:
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使用/作为路径分隔符)
2、查看结果
开发人员结合monkey打印的日志和系统打印的日志,结合测试中出现的问题。
- CRASH:即崩溃,应用程序在使用过程中,非正常退出。(Exception)
- ANR:Application Not Responding,等待时间过长,程序无响应
- oom:out of memory 超出内存(一般来说是图片过大或内存泄漏引起的,大部分情况是图片问题)
一个完整的基本流程已经结束了,如果还想深入的小伙伴可以继续研究,可参看其他文档。