系统环境:ubuntu17.10
一、Monkey 介绍
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。使用monkey进行压力测试,并结合monkey打印的日志和系统打印的日志,分析测试中的问题。Monkey测试的特点:
1、测试的对象仅为应用程序包。
2、Monky测试使用的事件数据流是随机的,不能进行自定义。
3、可以对MonkeyTest的对象的事件数量、类型、频率等进行设置。
二、基本用法
语法:
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。
切换目录:~$cd /home/Android/Sdk/builds-tools/
查看程序,如QQ:./aapt dump badging /home/wong/Downloads/qq.apk
(2)通过adb shell pm list packages 来查询已安装的包。
三、Monkey测试实例
1、用USB将手机连接上电脑
2、查看设备连接情况:
~$adb -d devices
List of devices attached
810EBMB3XAXL device
3、进入手机shell环境:
~$ adb -d shell
shell@m2note:/ $
4、对com.android.calculator2进行500次的压力测试
shell@m2note:/ $ monkey -p com.android.calculator2 -v 500
测试过程中,应用程序会不断地切换画面。
四、monkey命令参数
~$ adb shell monkey -help
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
COUNT
参数解释:
1 参数: -p
用此参数指定进行monkey测试的一个或多个包。如果不指定包,将允许系统启动设备中的所有APP。
* 指定一个包: adb shell monkey -p cn.emoney.acg 10
* 指定多个包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100
* 不指定包:adb shell monkey 100
2 参数: -v
用于指定反馈信息级别(详细程度不同):
-v: 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
-v -v:提供较为详细的日志,包括每个发送到Activity的事件信息
-v -v -v:最详细的日志,包括了测试中选中/未选中的Activity信息
3 参数: -s
4 参数: --throttle
用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
adb shellmonkey -p cn.emoney.acg --ignore-crashes 1000
测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止
adb shellmonkey -p cn.emoney.acg 1000
测试过程中,如果acg程序崩溃,Monkey将会停止运行
6 参数: --ignore-timeouts
用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000
7 参数: --ignore-security-exceptions
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。
adb shellmonkey -p cn.emoney.acg --ignore-security-exception 1000
8 参数: --kill-process-after-error
用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态
(注意:默认情况下,应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000
9 参数: --monitor-native-crashes
用于指定每种类别事件的数目百分比
--pct-touch{+百分比}
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
adb shell monkey -p cn.emoney.acg --pct-touch 10 1000
--pct-motion {+百分比}
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)
adb shell monkey -p cn.emoney.acg --pct-motion 20 1000
--pct-trackball {+百分比}
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000
--pct-nav {+百分比}
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
adb shell monkey -p cn.emoney.acg --pct-nav 40 1000
--pct-majornav {+百分比}
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
adb shell monkey -p cn.emoney.acg --pct-majornav 50 1000
五、monkey日志
使用以下这个命令提取日志时会有问题:
shell@m2note:/ $adb shell monkey -p 包名 -v 300 > ~/monkeytest.txt
会提示:cannot create ~/monkeytest.txt: read-only file system
原因:进入adb shell后再用monkey命令就会导出失败,主要原因是进入adb shell后就相当于进入linux的root下面,没有权限在里面创建文件。
正确提取日志的方法:直接使用monkey命令就没有问题
~$adb shell monkey -p 包名 -v 300 > /home/wong/Desktop/text.txt
六、Monkey测试结果分析
分析步骤:
1、定位monkey报错的地方
2、查看Monkey出错前的事件动作,并手动执行该动作
3、若以上都不能定位错误,则再执行的monkey命令,取相同的seed值(复现操作)。
技巧:
1、 ANR问题:在日志中搜索“ANR”
2、崩溃问题:在日志中搜索“Exception”
七、monkey还可以写成脚本,这部分大家去自己完成吧!
欢迎关注!
领取专属 10元无门槛券
私享最新 技术干货