老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
2016-01-04 16:52
295 查看
老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有一大部分命令在翻译后需要转换成对应的事件,然后放入到命令队列里面等待执行。Monkey在取出一个事件执行的时候主要是执行其injectEvent方法来注入事件,而注入事件根据是否需要往系统注入事件分为两种:需要通过系统服务往系统注入事件:如MonkeyKeyEvent事件会通过系统的InputManager往系统窗口注入按键事件来完成输入请求不需要通过系统服务往系统注入事件: 如MonkeyWaitEvent只是进行简单的睡眠等待
MonkeyEvent是所有Monkey事件的总称,其实它包含了多种事件,我们先看下类图:
图6-5-1 MonkeyEvent类族谱大家可以看到MonkeyEvent是一个抽象类,它最重要的地方是定义了injectEvent这个抽象方法。然后有一系列的子类继承该抽象类来实现其injectEvent接口,也就是去实现如何往系统注入事件来完成MonkeyRunner的请求了。所以如果这里要给Monkey事件做一个定义,我认为可以这样定义:Monkey事件是一个实现了injectEvent方法来处理不同的命令请求的类。但这里我们要注意并不是所有从MonkeyRunner过来的命令字串都会生成对应的事件的,请看下表:
命令字串 | 命令翻译类 | 目标事件类 | MR是否支持 | 注释 |
touch down x y | TouchCommand | MonkeyTouchEvent | 是 | x代表x坐标,y代表y坐标 |
touch up x y | TouchCommand | MonkeyTouchEvent | 是 | 同上 |
touch move x y | TouchCommand | MonkeyTouchEvent | 是 | 同上 |
tap x y | TapCommand | MonkeyTouchEvent | 是 | 同上 |
press name | PressCommand | MonkeyKeyEvent | 是 | Name代表按键名,如"MENU", "HOME", "SEARCH"等 |
key down name | KeyCommand | MonkeyKeyEvent | 是 | 同上 |
key up name | KeyCommand | MonkeyKeyEvent | 是 | 同上 |
getvar name | GetVarCommand | N/A(不会有对应事件,所以也不会加入事件队列,而是直接取得属性返回) | 是 | name 代表属性名 |
listvar | ListViewsCommand | 同上 | 是 | |
type line | TypeCommand | MonkeyKeyEvent | 是 | line 代表输入字串 |
wake | WakeCommand | N/A(不会有对应事件,所以也不会加入事件队列,而是直接PowerManager唤醒屏幕) | 是 | |
listViews | ListViewsCommand | N/A(不会生成事件也不会入事件队列) | 是 | |
queryview | QueryViewCommand | N/A(不会生成事件也不会入事件队列) | 是 | |
getRootView | GetRootViewCommand | N/A(不会生成事件也不会入事件队列) | 是 | |
getViewWithText | GetViewsWithTextCommand | N/A(不会生成事件也不会入事件队列) | 是 | |
done | N/A | N/A(不会生成事件也不会入事件队列) | 是 | 测试完成,Monkey收到命令后会停止Socket监听 |
quit | N/A | N/A(不会生成事件也不会入事件队列) | 是 | 测试请求退出,Monkey收到后不会停止Socket监听, |
flip open | MonkeyFlipEvent | MonkeyFlipEvent | 否 | MonkeyRunner不支持发送这两个命令 |
flip close | MonkeyFlipEvent | MonkeyFlipEvent | 否 | |
trackball dx dy | 否 | |||
deferredReturn | DeferReturnCommand | N/A(不会生成事件也不会入事件队列) | 否 | 这个命令比较特别,做的事情是等待一个命令完成然后执行另外一个命令。但是在MonkeyRunner框架中并没有支持。 |
注: MR代表MonkeyRunner |
MonkeyKeyEvent: 往界面输入键值,最终会通过InputManager往系统注入对应事件
这里要注意的是,其实并不是所有的事件注入都需要真的往系统窗口注入事件的,这个接口方法的名字我觉得Google 工程师起得不好,比如叫做handleEvent就不会造成混乱了(个人见解)。
相关文章推荐
- 老李性能测试分享
- 你想不到:咖啡馆里上工具课
- 移动端自动化测试开课了
- 老李分享:什么是好战略
- 性能调优案例分享:Mysql的cpu过高
- 性能测试分享:性能测试工具开发的案例分享(上)
- 性能测试分享:性能测试工具开发的案例分享(下)
- 性能测试培训:批量执行Jmeter脚本之ant调用 2
- 性能测试培训:分布式测试之jmeter1
- 老李案例分享:MAT分析应用程序服务出现内存溢出过程1
- 老李案例分享:MAT分析应用程序服务出现内存溢出过程2
- 老李案例分享:定位JAVA内存溢出 1
- 老李案例分享:定位JAVA内存溢出 2
- 性能测试培训: 建立压力模型
- 老李分享:你知道有哪些持续集成工具
- 老李分享知识:性能测试之TPS和吞吐率
- 老李分享知识:性能测试之吞吐量
- 性能测试培训:分析内训泄露的案例
- 自动化测试培训:qtp脚本获取获取汇率数据
- 性能测试培训:sql server性能测试分析局部变量的性能影响1