Android Monkey --script的使用

来源:互联网 发布:windows xp sp3 编辑:程序博客网 时间:2024/04/29 23:47

转自:http://blog.sina.com.cn/s/blog_6f561cc301012vzn.html


monkey是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。monkey 是一个脚本;

 在/system/bin目录下有一个monkey的shell脚本.内容如下:
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
exec app_process $base/bin com.android.commands.monkey.Monkey $*
exec 会运行起/system/framework/monkey.jar这只Java程序.后面我们还会用到这个脚本.

monkey源码:development\cmds\monkey\src\com\android\commands\monkey

1 adb shell monkey -help

行monkey可以采用两种方式:系统默认方式和script方式

 显示monkey帮助信息:如下:

sh-3.2# monkey -help
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]
              [--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]
              COUNT

对参数的分析:

-p <allowed-package-name>

如果用此参数指定了一个或几个包, Monkey 将只允许系统启动这些包里的 Activity 。如果你的应用程序还需要访问其它包里的 Activity( 如选择取一个联系人 ) ,那些包也需要在此同时指定。如果不指定任何包, Monkey 将允许系统启动全部包里的 Activity 。要指定多个包,需要使用多个 -p 选项,每个 -p 选项只能用于一个包。

-c <main-category>

如果用此参数指定了一个或几个类别, Monkey 将只允许系统启动被这些类别中的某个类别列出的 Activity 。如果不指定任何类别, Monkey 将选择下列类别中列出的 Activity : Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 。要指定多个类别,需要使用多个 -c 选项,每个 -c 选项只能用于一个类别。

调试

--v :令行的每一个 -v 将增加反馈信息的级别。 Level 0( 缺省值 ) 除启动提示、测试完成和最终结果之外,提供较少信息。 Level 1 提供较为详细的测试信息,如逐个发送到 Activity 的事件。 Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的 Activity 。

-s <seed> :随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。

--throttle <milliseconds>

在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。

--pct-touch <percent> 调整触摸事件的百分比 ( 触摸事件是一个 down-up 事件,它发生在屏幕上的某单一位置 ) 。

--pct-motion <percent>

调整动作事件的百分比 ( 动作事件由屏幕上某处的一个 down 事件、一系列 的伪随机事件和一个 up 事件组成 ) 。

--pct-trackball <percent>

调整轨迹事件的百分比 ( 轨迹事件由一个或几个随机的移动组成,有时还伴随有点击 ) 。

--pct-nav <percent>

调整“基本”导航事件的百分比 ( 导航事件由来自方向输入设备的 up/down/left/right 组成 ) 。

--pct-majornav <percent>

调整“主要”导航事件的百分比 ( 这些导航事件通常引发图形界面中的动作,如: 5-way 键盘的中间按键、回退按键、菜单按键 )

--pct-syskeys <percent>

调整“系统”按键事件的百分比 ( 这些按键通常被保留,由系统使用,如 Home 、 Back 、 Start Call 、 End Call 及音量控制键 ) 。

--pct-appswitch <percent>

调整启动 Activity 的百分比。在随机间隔里, Monkey 将执行一个 startActivity () 调用,作为最大程度覆盖包中全部 Activity 的一种方法。

--pct-anyevent <percent>

调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。

约束限制

--dbg-no-events

设置此选项, Monkey 将执行初始启动,进入到一个测试 Activity ,然后不会再进一步生成事件。为了得到最佳结果,把它与 -v 、一个或几个包约束、以及一个保持 Monkey 运行 30 秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof

设置此选项,将在 Monkey 事件序列之前和之后立即生成 profiling 报告。这将会在 data/misc 中生成大文件 (~5Mb) ,所以要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或发生任何失控异常时, Monkey 将停止运行。如果设置此选项, Monkey 将继续向系统发送事件,直到计数完成。

--ignore-timeouts

通常,当应用程序发生任何超时错误 ( 如“ Application Not Responding ”对话框 ) 时, Monkey 将停止运行。如果设置此选项, Monkey 将继续向系统发送事件,直到计数完成。

--ignore-security-exceptions

通常,当应用程序发生许可错误 ( 如启动一个需要某些许可的 Activity) 时, Monkey 将停止运行。如果设置了此选项, Monkey 将继续向系统发送事件,直到计数完成。

--kill-process-after-error

通常,当 Monkey 由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的 ( 成功的 ) 结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

--monitor-native-crashes

监视并报告 Android 系统中本地代码的崩溃事件。如果设置了 --kill-process-after-error ,系统将停止运行。

--wait-dbg

停止执行中的 Monkey ,直到有调试器和它相连接。

 [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]

该参数与-p只能选择其一,PACKAGE_BLACKLIST_FILE为一个可以是任何格式的文件;该文件中列表允许测试的activity的package名字,以行分隔分开;前缀为#

 如下:在/sdcard/新建mon.txt

内容如下:

#DefaultContainerService.apk
#DebugTool.apk
#DCSUtility.apk
#DCSStock.apk
#DCSImpl.apk
#CustomizationSetup.apk
#CustomizationSettingsProvider.apk
#ContactsProvider.apk
#CheckinProvider.apk
#CertInstaller.apk
#CalendarProvider.apk
#Calendar.apk
#Calculator.apk
#Browser.apk
#BrcmBluetoothServices.apk
#Bluetooth.apk
#ApplicationsProvider.apk
#AppSharing.apk
#Androidmarket.apk
#AccountSyncManager.apk
在命令行中执行: monkey --pkg-whitelist-file /sdcard/mon.txt -v -v -v 10000

[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
monkey 以script方式运行, 在android源码中MonkeySourceScript.java中:

/**
 * monkey event queue. It takes a script to produce events sample script format:
 *
 * <pre>
 * type= raw events
 * count= 10
 * speed= 1.0
 * start data &gt;&gt;
 * captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
 * captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
 * captureDispatchFlip(true)
 * ...
 * </pre>

 

monkey中提供的函数如下:

  1. DispatchPointer(long downTime,  long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)  
  2. DispatchTrackball(long downTime,  long eventTime, int action,  float x, float y, float pressure, float size, int metaState,  float xPrecision, float yPrecision, int device, int edgeFlags)    
  3. DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)     
  4. DispatchFlip(boolean keyboardOpen)    
  5. DispatchPress(int keyCode)    
  6. LaunchActivity(String pkg_name, String cl_name)  
  7. UserWait(long sleeptime)    
  8. LongPress(int keyCode) 

首先本地编写需要的测试的事件 命名为 monkey.script (文件格式无要求),将文件push到手机或模拟器的sdcard中

如: adb push  lujing/monkey.script  /sdcard/

然后执行脚本:

       adb shell monkey -v -f /sdcard/monkey.script

 

附 Example:

type= user
count= 49
speed= 1.0
start data >>
LaunchActivity(com.example.android.notepad, com.example.android.notepad.NotesList)
DispatchPress(KEYCODE_DPAD_DOWN)
LongPress(KEYCODE_DOWN)
DispatchPress(KEYCODE_BACK)

其中 type值可以任意,源码中没有对该值做任何处理。

       count值,在此无效,还是需要在命令行输入需要执行的次数。因为命令行的count值是必填项

 [--pct-appswitch PERCENT] [--pct-flip PERCENT]

app switch events percentage   keyboard flip percentage