老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。

事件源代表要注入系统的命令事件数据是从哪里过来的。这一小节我们不会对事件源的实现进行深入的分析,因为下一章会做这个事情。这里大家对事件源有个基本概念就足够了。

对Monkey来说,事件的来源可以有多个地方,比如我们用它来做随机压力测试的时候由Monkey自身生成的各种随机事件,又或者作为MonkeyRunner测试框架一部分时从USB/TCP过来的命令,这里我们对USB/TCP过来的事件来源统称为网络事件源。不同的事件源会有不同的类来做相应的实现:

  • MonkeySourceNetwork: 事件是从网络MonkeyRunner客户端过来的,处理的是界面控制操作相关的事件,比如press等

  • MonkeySourceNetworkVars: 事件也是从网络如MonkeyRunner过来的,处理的是获取系统属性这个getProperties这个事件

  • MonkeySourceNetworkViews:事件也是从网络如MonkeyRunner过来的,处理的是控件相关的事件

  • MonkeySourceRandom:事件是从monkey内部生成的随机事件集,也就是我们通过命令行启动monkey测试目标app的常用方式

  • MonkeySourceRandomScript: 上面的随机内部数据源也可以通过指定setup脚本来创建

  • MonkeySourceScript: 用户也可以遵循一定的规则编写monkey脚本来驱动monkey进行相关测试,与上面不同的是它不再是随机的

前面的三个事件源是跟我们的MonkeyRunner框架相关的,下一章我们会针对其进行详细分析,在这里我们只需要知道这些事件源代表了事件的不同的来源,然后主要就是处理下面两个事情就好了:

  • 从指定的源获取事件

  • 把命令翻译成monkey事件然后放到命令队列中,事件源的所有事件都是通过命令队列来管理起来的,有事件产生的时候就会往队列里面放,处理完事件后就会把该事件从命令队列中去掉

那么我们继续往下分析Monkey类的run方法,去了解下Monkey在启动的过程中是怎么去根据不同的情况去初始化不同的事件源的。

代码5-6-1 Monkey - run 初始化事件源

      /**
* Run the command!
*
* @param args The command-line arguments
* @return Returns a posix-style result code. 0 for no error.
*/
private int run(String[] args) {
...//省略其他事件源初始化代码
} else if (mServerPort != -1) {
try {
mEventSource = new MonkeySourceNetwork(mServerPort);
} catch (IOException e) {
System.out.println("Error binding to network socket.");
return -5;
}
...
}

run方法前面省略的一大段代码的作用简要来说就是根据不同的情况来初始化不同的事件源,比如如果在启动Monkey的时候指定了” -f scriptfile”且指定了一个脚本文件的话,那么就初始化MonkeySourceScript事件源。但这些在这里其实都不重要,因为它们跟Monkey作为MonkeyRunner的服务没有很大关系,MonkeyRunner启动Monkey使用的命令是”monkey -port 12345”。 所以这里真正的重点是第514-516行的代码,如果启动Monkey的时候指定了”-port”这个参数的话,初始化的就是MonkeySourceNetwork这个事件源,专门用来从网络上获取事件。

也许大家在这里会有疑问,网络来的事件源不是还有MonkeySourceNetworkViews和MonkeySourceNetworkVars吗?怎么这里没有看到呢?其实这两个类提供的主要是静态方法,没有必要初始化,当MonkeySourceNetwork需要用到它们的时候会在内部调用它们的方法。

老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源的更多相关文章

  1. 老李推荐:第5章7节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles

    老李推荐:第5章7节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles   poptest是国内唯一一家培养测试开 ...

  2. 老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本

    老李推荐:第5章3节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

  3. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用   上一节我们描述了monkey的命令处理入口函数run是如何调用optionP ...

  4. 老李推荐:第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览

    老李推荐:第5章2节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动流程概览   每个应用都会有一个入口方法来供操作系统调用执行,Monkey这个应用的入口方法就 ...

  5. 老李推荐:第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介

    老李推荐:第5章1节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 官方简介   在MonkeyRunner的框架中,Monkey是作为一个服务来接受来自Monkey ...

  6. 第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  7. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  8. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

  9. 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

    老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer   poptest是国内唯一一家培养 ...

随机推荐

  1. MS office2010 ppt自动放映的设置方法

    在菜单“幻灯片放映”-“排练时间”,进入演示,然后设置每张幻灯片需要等待的时间后,手动切换到下一张(如图),一直放映结束,会提示你是否保存排练时间.然后在菜单“幻灯片放映”-“设置放映方式”,里面选择 ...

  2. 【异构计算】在Windows下使用OpenCL配置

    前言 目前,NVIDIA 和 AMD 的 Windows driver 均有支持OpenCL(NVIDIA 的正式版 driver 是从自195.62 版开始,而 AMD则是从9.11 版开始).NV ...

  3. GDOI2015 解题报告

    首先嘛现在发现题目这么水我还啥都没想出来正是呵呵了.接下来就口胡下GDOI的题解吧 PS:代码什么的要请联系我 题目:快戳我 Day1: T1:这个嘛,可以先找到起点所能到达的每个点然后判断该点能否到 ...

  4. 【转载】HTTP Cookie学习笔记

    什么是cookie? cookie是什么?是饼干,小甜点? No! No! No! 我今天要总结的cookie并不是你所想的小甜心,我这里要说的cookie是Web开发中的一个重要的"武器& ...

  5. 新学到的xss姿势,分享一下

    在js中有一种神奇的对象叫做window 当页面中包含如类似的 <script>var c = urlQuery("callback"); var r = JSON.p ...

  6. mysql数据库封装和 分页查询

    1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...

  7. axios全攻略

    随着 vuejs 作者尤雨溪发布消息,不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解.本来想在网上找找详细攻略,突然发现,axios 的官方文 ...

  8. MINA、Netty、Twisted一起学(十一):SSL/TLS

    什么是SSL/TLS 不使用SSL/TLS的网络通信,一般都是明文传输,网络传输内容在传输过程中很容易被窃听甚至篡改,非常不安全.SSL/TLS协议就是为了解决这些安全问题而设计的.SSL/TLS协议 ...

  9. 【转】44款Java 网络爬虫开源软件

    原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time 极简网络爬虫组件 WebFetch WebFetch 是无依赖极简网页 ...

  10. FineUIMvc随笔 - 动态创建表格列

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 用户希望实现动态创建表格列,在 WebForms 中,我们通过在 Page_Init 中创建列来实现: 但是在 MVC ...