稳定性测试:通过在主流真机终端上,模拟真人对App的操作行为,支持自动登陆、运行时间可配置,有效点击覆盖更全更深,从而发现程序的Crash及ANR,一般使用monkey对应用程序进行稳定性测试。
monkey:Android SDK自带的命令行测试工具,向设备发送伪随机事件流,可以在模拟器里或实际设备中运行,它向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等,实现对正在开发的应用程序进行压力测试。
优势
- 脱离Case的依赖
- 可封装自动化执行
- 可封装后作为客户端性能测试的驱动
缺点
- 完全随机,不可控
- 不支持IOS系统
monkey测试步骤:
- Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中存放路径是:/system/bin/monkey;
- 通过在CMD窗口中执行: adb shell monkey{+命令参数}来进行Monkey测试;
- 基本的命令如下:
$ adb shell monkey [options] <event-count> //options
$ adb shell monkey -p your.package.name -v 500 //举例:向指定包发送500个伪随机事件
$ adb shell monkey --ptc-touch //触摸事件百分比
$ adb shell monkey --ptc-motion //动作事件百分比
$ adb shell monkey --ptc-trackball //轨迹球事件百分比
$ adb shell monkey --ptc-nav //基本导航事件百分比
$ adb shell monkey --ptc-majornav //主导航事件百分比
$ adb shell monkey --ptc-syskeys //按键事件百分比
$ adb shell monkey --ptc-appswitch //启动时间百分比
$ adb shell monkey --ptc-anyevent //其他类型事件的百分比,包括keypress、不常用button以及其他未提及事件
monkey注入事件机制:
- Monkey注入系统事件是通过framework层的hidenApi获取系统服务;
- 触摸事件:包括屏幕以及物理键的触摸,滑动,点击事件,Monkey通过InputManager.getInstance().injectInputEvent(keyEvent, int);构造对应的事件,然后调用该接口执行事件;
- 调用Android系统组件的事件,Monkey通过IActivityManager实例来获取activity的系统服务,从而启动某个activity;
- window事件:指操作Window的事件,Monkey通过获取IWindowManager实例开启系统窗口服务,并执行窗口事件;
monkey的组织结构
- Monkey的核心类是Monkey.java,MonkeyEventSource.java,MonkeyEvent.java