monkey
1. monkey基础知识
monkey概况、常用参数、11大事件、环境搭建,以及monkey命令行使用方法
money是Google提供的稳定性测试小工具,可运行在模拟器或真机。他项系统发送伪随机的用户事件,模拟用户的按键输入、触摸屏输入、手势输入等,从而对正在运行的应用程序进行压力测试。
目的是看设备多长时间会出现异常,并观察系统的稳定性和容错性能
monkey是Android系统自带的,其启动脚本是位于Android系统的/system/bin目录下的monkey文件,其jar包是位于Android系统的/system/framework目录的Monkey.jar,
查看monkey文件
whyred:/system/bin $ ls -l monkey
-rwxr-xr-x 1 root shell 268 2009-01-01 00:00 monkey
whyred:/system/bin $ cat monkey
启动文件的代码
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
for a in "$@"; do #打印命令行参数
echo " bash arg:" $a
done
#根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行对应的事件
exec app_process $base/bin com.android.commands.monkey.Monkey "$@"
2. monkey测试的基本方法
常规的稳定性测试、自定义脚本的稳定性测试、结合常用辅助命令的monkey测试,以及monkey日志的分析方法
3. 介绍monkey的原理,包括代码框架和代码逻辑分析
4. monkey使用的进阶篇
通过截图改造和Wi-Fi监控改造2个实际案例,介绍了如何通过修改monkey源码达到优化monkey工具的目的
adb shell monkey -help
1. COUNT 不可为空
adb shell monkey 10
2.[-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
这个参数是设定一个或几个包,Monkey将只允许系统启动这些包的活动。指定多个包时,需要使用多个-p,每个-p选项只能用于一个包。如果不指定,monkey将随机启动app。
#指定一个应用
adb shell monkey -p com.cubic.autohome 1000
#指定多个应用,汽车之家和UC浏览器
adb shell monkey -p com.cubic.autohome -p com.UCMobile 1000
如果应用隐藏了启动Activity,可以使用monkey -p启动。uiautomator2的就是这么做的
3. [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
指定意图的分类,这样monkey只会启动可以处理这些种类的意图的活动。如果没有设置用于指定某个类,Monkey就默认执行Intent.Category_LAUNCHER和Intent.Category_MONKEY。可以使用多个-c选项,但是每个-c命令选项只能用于一个类。
4.-v 打印信息的详细级别
-v 0级:打印测试时执行的一些发送给被测试的Activity的事件
-v -v 1级:增加了那些Activity被选中,将在信息被输出出来
-v -v -v 2级:那些应用已经安装了但是却没有被选中的信息也被输出出来
5.-s SEED]
伪随机数生成器的种子值,如果用相同的随机种子值,前后两次执行将会生成相同的时间序列.
注意:如果要得到seed值,需要加-v参数查看
6. --throttle MILLISEC 毫秒
这个参数是设定在两个事件之间插入一个固定延时,它可以减缓Monkey的执行速度。如果不指定,Monkey将不会被延迟,事件将尽可能快的被执行
adb shell monkey -p com.UCMobile --throttle 3000 100
7.--pct-touch PERCENT
设定触屏事件生成的百分比,触屏事件是一个手指按下、抬起的手势。
adb shell monkey --pct-touch 50 -p com.cubic.autohome --throttle 3000 100
8.--pct-motion PERCENT
设定滑动事件生成的百分比,滑动事件是从一个坐标按下到另一个坐标抬起的手势
adb shell monkey --pct-motion 50 -p com.cubic.autohome --throttle 3000 100
9.--pct-trackball PERCENT
设定轨迹球事件生成的百分比。轨迹球是包含一系列随机移动和单机事件的事件
10.--pct-nav PERCENT
设置基本的导航事件的百分比,基本导航事件包括模拟方向性设备输入向上、向下、向左、向右的事件
11.--pct-majornav PERCENT
设定主要导航事件的百分比,主要导航事件如back键、home键、menu键
12.--pct-syskeys PERCENT
设定系统按键事件的百分比,系统按键是指这些按键通常被保留,由系统使用,如home、back、拨号、挂断、音量控制键。
13.--pct-appswitch PERCENT
这个参数是设定启动活动事件的百分比。在随机的一定间隔后,monkey就会执行一个startActivity()函数尽可能多的覆盖包中全部活动
14.--pct-anyevent PERCENT
设定其他类型事件的百分比,如普通的按键消息,不常用的设备按钮事件等。
15.--dbg-no-events
若指定了该参数,monkey将会执行初始启动,进入到一个测试Activity,不会再进一步生成事件。
16.--hprof
monkey会在发送事件序列的前后,生成性能分析报告。通常会在/data/misc/目录下生成一个文件
17.--ignore-crashes
通常情况下,monkey会在待测应用程序崩溃或发生任何异常后停止运行。若指定了该参数,则monkey将会在产生异常后,继续向系统发送事件,直到事件全部完成
adb shell monkey -p com.UCMobile --ingore-crashes 100
18.--ignore-timeouts
--ignore-timeouts|通常情况下,当应用程序发生任何超时错误(应用ANR)时,monkey将会停止运行。若指定了该参数,monkey将会在产生错误信息后,继续向系统发送事件,直到指定的事件全部完成
19.--ignore-security-exceptions
通常情况下,monkey会在被测应用程序发生权限方面的错误时停止运行。若指定了该参数,则monkey将继续想系统发送事件,直到指定的事件全部完成
20.--kill-process-after-error
通常情况下,monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项,它将会通知系统停止发生错误的进程。
adb shell monkey -p com.UCMobile --kill-process-after-error 100 -v
21.--monitor-native-crashes
监视由Android系统本地代码部分引起的崩溃,若同时指定了--kill-process-after-error参数,则整个系统将会关机
22.--wait-dbg
启动monkey后,先中断其运行,等待调试器和它相连接
23.--ignore-native-crashes
24.--match-description TEXT
25.--pct-flip PERCENT
26.--pct-pinchzoom PERCENT
27.--pct-permission PERCENT
28.--pkg-blacklist-file PACKAGE_BLACKLIST_FILE
29.--pkg-whitelist-file PACKAGE_WHITELIST_FILE
30.--setup scriptfile
31.[-f scriptfile [-f scriptfile] ...]
32.--port port
33.--randomize-throttle
34.--profile-wait MILLISEC
35.--device-sleep-time MILLISEC
36.--randomize-script
37.--script-log
38.--bugreport
39.--periodic-bugreport
40.--permission-target-system
monkey -p com.UCMobile--ignore-timeouts --ignore-security-exceptions --pct-trackball 0 --pct-nav 0 --pct-majornav 0 --pct-anyevent 0 -v -v -v --throttle 500 1200000000 > /data/local/tmp/monkeySC.log 2>&1 &