monkey
monkey 是一个运行在模拟器或者Android设备中可以产生类似用户点击、触摸、手势以及一些系统级的伪随机事件流的程序。
我们可以通过命令让monkey向模拟器或者Android设备发送伪随机事件流来对我们开发的APP进行压力测试。
monkey的基本用法:
adb shell monkey [options] <event-count>
adb shell monkey 为固定语句,<event-count> 这里是指让monkey向系统发送多少次伪随机事件,重点和关键在[options]选项中,这就引出了我们下面要介绍的
monkey 命令
Category | Option | Description |
---|---|---|
General |
--help |
prints a simple usage guide. |
-v |
Each -v on the command line will increment the verbosity level. Level 0 (the default) provides little information beyond startup notification, test completion, and final results. Level 1 provides more details about the test as it runs, such as inpidual events being sent to your activities. Level 2 provides more detailed setup information such as activities selected or not selected for testing. | |
Events |
-s <seed> |
Seed value for pseudo-random number generator. If you re-run the Monkey with the same seed value, it will generate the same sequence of events. |
--throttle <milliseconds> |
Inserts a fixed delay between events. You can use this option to slow down the Monkey. If not specified, there is no delay and the events are generated as rapidly as possible. | |
--pct-touch <percent> |
Adjust percentage of touch events. (Touch events are a down-up event in a single place on the screen.) | |
--pct-motion <percent> |
Adjust percentage of motion events. (Motion events consist of a down event somewhere on the screen, a series of pseudo-random movements, and an up event.) | |
--pct-trackball <percent> |
Adjust percentage of trackball events. (Trackball events consist of one or more random movements, sometimes followed by a click.) | |
--pct-nav <percent> |
Adjust percentage of "basic" navigation events. (Navigation events consist of up/down/left/right, as input from a directional input device.) | |
--pct-majornav <percent> |
Adjust percentage of "major" navigation events. (These are navigation events that will typically cause actions within your UI, such as the center button in a 5-way pad, the back key, or the menu key.) | |
--pct-syskeys <percent> |
Adjust percentage of "system" key events. (These are keys that are generally reserved for use by the system, such as Home, Back, Start Call, End Call, or Volume controls.) | |
--pct-appswitch <percent> |
Adjust percentage of activity launches. At random Intervals, the Monkey will issue a startActivity() call, as a way of maximizing coverage of all activities within your package. | |
--pct-anyevent <percent> |
Adjust percentage of other types of events. This is a catch-all for all other types of events such as keypresses, other less-used buttons on the device, and so forth. | |
constraints |
-p <allowed-package-name> |
If you specify one or more packages this way, the Monkey will only allow the system to visit activities within those packages. If your application requires access to activities in other packages (e.g. to select a contact) you'll need to specify those packages as well. If you don't specify any packages, the Monkey will allow the system to launch activities in all packages. To specify multiple packages, use the -p option multiple times — one -p option per package. |
-c <main-category> |
If you specify one or more categories this way, the Monkey will only allow the system to visit activities that are listed with one of the specified categories. If you don't specify any categories, the Monkey will select activities listed with the category intent.CATEGORY_LAUNCHER or Intent.CATEGORY_MONKEY. To specify multiple categories, use the -c option multiple times — one -c option per category. | |
Debugging |
--dbg-no-events |
When specified, the Monkey will perform the initial launch into a test activity, but will not generate any further events. For best results, combine with -v, one or more package constraints, and a non-zero throttle to keep the Monkey running for 30 seconds or more. This provides an environment in which you can monitor package transitions invoked by your application. |
--hprof |
If set, this option will generate profiling reports immediately before and after the Monkey event sequence. This will generate large (~5Mb) files in data/misc, so use with care. See Traceview for more information on trace files. | |
--ignore-crashes |
Normally, the Monkey will stop when the application crashes or experiences any type of unhandled exception. If you specify this option, the Monkey will continue to send events to the system, until the count is completed. | |
--ignore-timeouts |
Normally, the Monkey will stop when the application experiences any type of timeout ERROR such as a "Application Not Responding" dialog. If you specify this option, the Monkey will continue to send events to the system, until the count is completed. | |
--ignore-security-exceptions |
Normally, the Monkey will stop when the application experiences any type of permissions error, for example if it attempts to launch an activity that requires certain permissions. If you specify this option, the Monkey will continue to send events to the system, until the count is completed. | |
--kill-process-after-error |
Normally, when the Monkey stops due to an error, the application that failed will be left running. When this option is set, it will signal the system to stop the process in which the error occurred. Note, under a normal (successful) completion, the launched process(es) are not stopped, and the device is simply left in the last state after the final event. | |
--monitor-native-crashes |
Watches for and reports crashes occurring in the Android system native code. If --kill-process-after-error is set, the system will stop. | |
--wait-dbg |
Stops the Monkey from executing until a debugger is attached to it. |
这个表是Google 官网中介绍monkey命令给出的,google 对monkey命令分了四类:
1. 基本配置选项,如设置事件的数量、查看帮助信息等。
2. 操作的约束,如通过包名限制哪些应用可以被测试。
3. 事件的类型和频率,如点击事件占比多少、触摸事件又占多少以及事件之间的间隔时间等。
4. 调试选项,如是否忽略crashes、ANR等。
下面以测试小例子的形式对上面的命令进行详细讲解:
adb shell monkey 或者 adb shell monkey -help
查看help得到的monkey选项命令比google官网中的要多一些,主要是一些更高级的命令,如通过脚本文件进行monkey测试等。
adb shell monkey -p your.package.name 500
作用:-p 为约束命令,作用是约束只对某个应用进行测试,your.package.name是你要进行测试的应用包名,如果要对多个应用进行测试可以使用多个-p
例:adb shell monkey -p com.android.settings 500 对系统设置应用进行monkey测试发送500个随机事件
adb shell monkey -p com.android.settings -p com.android.calculator2 500 对系统设置应用和计算器应用进行monkey测试共发送500个随机事件
注:如果不使用-p约束,如 adb shell monkey 500 那么将会对手机中的所有应用进行随机测试共发送500个随机事件
-v
adb shell monkey -v 500
作用:命令行中的每个-v都将增加测试信息的详细级别
Level 0 (默认)提供了很少的信息除了启动通知,测试完成,和最终结果。-v
Level 1 提供了更详细的测试运行,如个别事件被发送到您的Activity。 -v -v
Level 2 提供了更详细的设置等信息如Activity选中或未选中的测试信息。 -v -v -v
根据您对测试结果要求的详细程度来确定您用几个 -v,一般会用-v -v -v 最详细的输出到指定文件中,方便查找bug的原因。
-s <seed>
adb shell monkey -s 8888 -v -v -v 500
作用:伪随机数生成器的种子值,如果用相同的种子值再次运行monkey,将生成相同的事件序列。(该种子值对于Bug复现至关重要)注:如果不指定种子值,系统会随机生成一个种子值,在出现Bug时该种子值会和Bug信息一起被输出,这也是为了便于复现该Bug
--throttle <milliseconds>
adb shell monkey --throttle 300 -v 500
作用:在事件之间插入特定的延时时间(单位毫秒),这样做可以延缓monkey执行事件的速度,默认没有延时,monkey会以最快速度将指定的事件个数执行完。注:建议使用该参数,经验值300,这是模拟人操作的速度
--pct-touch <percent>
adb shell monkey --pct-touch 50 -v -v 500
作用:指定touch(触摸)事件的百分比,touch事件是由一个DOWN和一个UP组成,按下并抬起即是一个touch事件注:若不指定任何事件的百分比,系统将随机分配各种事件的百分比
--pct-motion <percent>
adb shell monkey --pct-motion 100 -v -v 500
作用:指定motion(手势)事件百分比,motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成
注:移动事件是直线移动
--pct-trackball <percent>
adb shell monkey --pct-trackball 20 -v -v 500
作用:指定trackball(轨迹球)事件的百分比,滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件注:移动事件可以是曲线移动
下面几个事件与上面的类似,这里集中介绍
--pct-nav <percent>
指定基本的导航事件百分比。导航事件由方向输入设备的上下左右按键所触发的事件组成,即四个方向键
--pct-majornav <percent>
指定主导航事件百分比。这些导航事件通常会导致UI界面发生变化,如5-way键盘的中间键,返回按键、菜单按键
--pct-syskeys <percent>
指定系统事件百分比。这些按键通常由系统保留使用,如Home、Back、Start Call、End Call、音量调节
--pct-appswitch <percent>
指定Activity启动的百分比。在随机的时间间隔中,monkey执行startActivity()方法,最大程度地覆盖应用中全部的Activity
--pct-anyevent <percent>
指定其他事件的百分比。包含所有其他事件,如按键、其他在设备上不常用的按钮等
--ignore-crashes
adb shell monkey --ignore-crashes -v -v 500
作用:忽略crashes,测试过程中发生crashes继续进行测试直到执行完指定的事件数,如果不忽略遇到crashesmonkey测试会停止--ignore-timeouts
adb shell monkey --ignore-timeouts -v -v 500
作用:忽略ANR,测试过程中发生ANR继续进行直到执行完指定的事件数,如果不忽略遇到ANR测试也会终止结合上面的介绍下面写一个比较全面的monkey测试命令
adb shell monkey -v -v -v -s 8888 --throttle 300 --pct-touch 30 --pct-motion 25 --pct-appswitch 25 --pct-majornav 5 --pct-nav 0 --pct-trackball 0 -p com.wwdy.app 10000 >D:\monkey.txt
这是一个比较完整的monkey测试命令,3个-v显示最详细的测试信息,指定种子值为8888,指定触摸事件占30%、手势事件占25%、Activity跳转占25%、主导航占5%、方向导航0%、轨迹球0%,剩下的15%随机分配给其它未指定的事件,约束只测试包名为com.wwdy.app的应用,指定事件数为10000次,输出的测试信息保存到D盘的monkey.txt文件中。由于10000次耗时太长,这里改成10次执行该命令向大家解释一下测试结果信息。(正式测试可改成10000甚至更多次)
其实我们重点关注的还是有没有Bug,一般来说如果Event injected 个数与我们指定测试的事件数相同则没有遇到Bug(前提没有设置--ignore -crashes和--ignore -timeouts),在最后结束时可以看到// Monkey finished。
相关阅读
什么是 Android-x86 对于 Android,相信大家应该是非常熟悉的!对整天使用 Android 的手机我们而言,想不知道 Android 都不可能。但是
Android EditText 通过TextWatcher实现自动补全的注意
Android EditText 通过TextWatcher实现自动补全的注意点 我的博客文章对应地址 背景 需求想要实现输入框在用户输入了一定文本
Android 颜色渲染(五) LinearGradient线性渲染
Android 颜色处理(五) LinearGradient线性渲染 相信很多人都看过歌词同步的效果, 一是竖直方向的滚动,另一方面是水平方面的歌
android中wrap_content、fill_content、match_content
wrap_content: 表示大小刚好足够显示当前控件里的内容 设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容
近日网速还算可以,于是乎决定下载一下Android源代码以供在家研究学习。下载之前先认识一下repo,整个Android源码是由很多个git项目