Monkey压力测试
一、什么是Monkey
Monkey是Android SDK附带的一个工具,一个做app压力测试的工具,通过某些Linux命令,产生一定数量或一定时间内的随机模拟用户操作的事件, 如点击、按键、手势等, 以及一些系统级别的事件。通常也称随机测试或者稳定性测试。
二、测试环境搭建
安装Android SDK 并配置环境变量即可。可参考:JDK与adb/android环境变量配置完整教程
三、测试步骤
1、本地创建白名单文件,如:whitelist.txt,将包名添加到该文件中
如:com.ubtechinc.cruzr.advert
com.ubtechinc.cruzr.aiui
com.ubtechinc.cruzr.behavior
com.ubtechinc.cruzr.calendar
com.ubtechinc.cruzr.clock
com.ubtechinc.cruzr.coreservices
com.ubtechinc.cruzr.cruzralbum
com.ubtechinc.cruzr.cruzrbootwizard
com.ubtechinc.cruzr.dance
com.ubtechinc.cruzr.freeguide
com.ubtechinc.cruzr.introduce
com.ubtechinc.cruzr.launcher
com.ubtechinc.cruzr.launcher2
com.ubtechinc.cruzr.map
com.ubtechinc.cruzr.music
com.ubtechinc.cruzr.navigation
com.ubtechinc.cruzr.pccontrolstub
com.ubtechinc.cruzr.power
com.ubtechinc.cruzr.servicesupport
com.ubtechinc.cruzr.systemupdate
com.ubtechinc.cruzr.syswarn
com.ubtechinc.cruzr.timer
com.ubtechinc.cruzr.user
com.ubtechinc.cruzr.video
com.ubtechinc.cruzrpowersettings
com.ubtechinc.cruzrrosexceptionstats
com.ubtechinc.settings
2、电脑连接到设备,将测试应用白名单push到Android系统,如:
adb push d:/Monkey/whitelist.txt /mnt/sdcard/data/whitelist.txt
3、登录adb:adb shell
4、调用Monkey命令
monkey --pkg-whitelist-file /mnt/sdcard/data/whitelist.txt -s 101 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 50000 |logcat -v time&>/mnt/sdcard/data/monkey_1019.log
参数说明:
--pkg-whitelist-file /mnt/sdcard/data/whitelist.txt //测试应用白名单
--s 50 //种子序列,出问题需要用相同种子值进行复现;没测出问题,下次需要重新修改种子值再跑
--pct-touch 70 //触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
--pct-motion 20 //动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)
--pct-trackball 10 //表示调整轨迹球事件的百分比(轨迹球事件由一个或多个随机移动组成,有时还伴随有点击)
--throttle 300 //毫秒,操作延时
--ignore-crashes //忽略无响应,继续执行
--ignore-timeouts //忽略Crash继续执行
--monitor-native-crashes //用于指定是否监视并报告应用程序发生崩溃的本地代码
--ignore-security-exceptions //表示当应用程序遇到任何类型的权限错误时,Monkey将停止,例如,如果它尝试启动需要某些权限的活动。如果指定此选项,则Monkey将继续向系统发送事件,直到计数完成
-v 日志等级, 通过-v参数可以指定打印信息的详细级别,多一个-v多一个级别
级别 |
表示 |
描述 |
0 |
-v |
打印最基本的事件 |
1 |
-v-v |
更全面的信息,如增加了那些Activity被选中 |
2 |
-v-v-v |
日志记录最全面的信息 |
50000 //事件数量
> monkey_1019.log //日志保存本地SD卡
--kill-process-after-error //当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态
--monitor-native-crashes //表示Android系统原生代码中的监视和报告崩溃。如果设置了-kill-process-after-error,系统将停止
--wait-dbg //表示停止执行中的Monkey,直到有调试器和它相连接
tips:
1) 若只跑指定的几个包,可以不设置白名单,直接执行指令(-p部分添加要执行的包):
adb shell
monkey -p com.ubtechinc.cruzr.music -p com.ubtechinc.cruzr.video -s 50 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --monitor-native-crashes -v -v -v 10000&>/mnt/sdcard/data/ monkey_1019.log
2)不指定应用,跑安卓系统
adb shell
monkey -s 68 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --monitor-native-crashes -v -v -v 50000 &>/sdcard/monkey/ monkey_1019.log
3)指定黑名单,不执行该应用
a. 创建黑名单文件blacklist.txt
b. push黑名单到Android系统:adb push d:/Monkey/whitelist.txt /mnt/sdcard/data/blacklist.txt
c. 执行的时候增加--pkg-whitelist-file /mnt/sdcard/data/ blacklist.txt
四、导出日志及日志分析
1、导出日志到本地:
adb pull /mnt/sdcard/data/ monkey_1019.log E:\Cruzr\Monkey\log\ monkey_1019.log
2、日志分析
1)无响应问题可以在日志中搜索 “ANR”,崩溃问题搜索 “CRASH”, 如果碰到这两类问题,抓取日志同时,需要提供traces.txt,具体存放目录可询问开发
2)内存泄露问题搜索"GC"(需进一步分析),异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需重视)
(Monkey日志内容分析:
一般测试结果分析-搜索关键字:
1.程序无响应,ANR问题:在日志中搜索“ANR”
2.崩溃问题:在日志中搜索“CRASH”
3.其他问题:在日志中搜索”Exception”
4.ForceClosed 和程序异常退出问题:在日志中搜索"Fatal"
5.搜索“system error”)
五、如何中断测试
1、登录adb :adb shell
2、查看进程号:ps | grep monkey
3、kill掉w进程:kill <进程号>
操作说明:(单独一个文件夹复制过来的,仅供参考)
Cruzr Monkey测试操作说明 monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 88 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 800 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 50000
1、将测试应用白名单push到Android系统,如:
adb push d:/monkey/whitelist.txt /mnt/sdcard/monkey/whitelist.txt
2、登录adb
adb shell
3、调用Monkey
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 53 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 100000 &>/mnt/sdcard/monkey/b0f1ecac466e_0806-001.log
参数说明:
--pkg-whitelist-file /mnt/sdcard/data/whitelist.txt //测试应用白名单
-s 50 //种子序列(不同的随机操作系列),出问题需要用相同种子值进行复现;没测出问题,下次需要重新修改种子值再跑
--pct-touch 70 //触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
--pct-motion 20 //动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)
--pct-motion 20 “基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
--throttle 500 //毫秒,操作延时
-ignore-crashes //忽略无响应,继续执行
--ignore-timeouts //忽略Crash继续执行
--monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码
-v 日志等级
500000 //事件数量
>>/mnt/sdcard/data/b0f1ecac46a3_0319-001.log //标准输出日志保存本地SD卡
&>/mnt/sdcard/data/b0f1ecac46a3_0319-001.log //标准输出和标准错误输出日志保存到本地SD卡
-v -v -v 500000 |logcat -v time &>/mnt/sdcard/hly-0414-002.log //输出日志带时间戳
4、导出日志
adb pull /mnt/sdcard/monkey/b0f1ec8c21b7_0327-001.log d:/Monkey/b0f1ec8c21b7_0327-001.log
单个应用跑Monkey
adb shell monkey -p com.ubtechinc.cruzr.timer -s 50 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --monitor-native-crashes -v -v -v 100000>d:/monkey/ test.log
多个应用跑Monkey
adb shell monkey -p com.ubtechinc.cruzr.timer -p com.ubtechinc.cruzr.launcher -s 50 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --monitor-native-crashes -v -v -v 100000>d:/monkey/test.log
待确认:
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 55 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 300 --monitor-native-crashes -v -v -v 50000 &>/mnt/sdcard/monkey/fss0324-006.log
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 55 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 30000 &>/mnt/sdcard/monkey/fss0326-003.log