暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用monkey对android app进行压力测试

WTech 2018-05-01
459

系统环境:ubuntu17.10


一、Monkey 介绍

Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。使用monkey进行压力测试,并结合monkey打印的日志和系统打印的日志,分析测试中的问题。Monkey测试的特点:
1、测试的对象仅为应用程序包。
2、Monky测试使用的事件数据流是随机的,不能进行自定义。
3、可以对MonkeyTest的对象的事件数量、类型、频率等进行设置。

二、基本用法

语法:


$ adb shell monkey [options]

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。

例:启动指定的应用程序,并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500

查看应用包名package和入口activity名称的方法:
(1)使用aapt工具,查询apk文件的包名及其他相关信息:

切换目录:~$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

用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
Monkey 测试1:adb shell monkey -p cn.emoney.acg -s 10  100
Monkey 测试2:adb shell monkey -p cn.emoney.acg –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列是一样的。

4 参数: --throttle<毫秒>

用于指定用户操作(即事件)间的时延,单位是毫秒;
adb shell monkey -p cn.emoney.acg --throttle 5000 100

5 参数: --ignore-crashes

用于指定当应用程序崩溃时(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

用于指定是否监视并报告应用程序发生崩溃的本地代码。

adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000

10 参数: --pct-{+事件类别}{+事件类别百分比}

用于指定每种类别事件的数目百分比
--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还可以写成脚本,这部分大家去自己完成吧!


欢迎关注!


文章转载自WTech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论