老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源
老李推荐:第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原理分析-启动运行: 初始化事件源的更多相关文章
- 老李推荐:第5章7节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles
老李推荐:第5章7节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles poptest是国内唯一一家培养测试开 ...
- 老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本
老李推荐:第5章3节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动脚本 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionP ...
- 老李推荐:第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览
老李推荐:第5章2节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动流程概览 每个应用都会有一个入口方法来供操作系统调用执行,Monkey这个应用的入口方法就 ...
- 老李推荐:第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介
老李推荐:第5章1节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 官方简介 在MonkeyRunner的框架中,Monkey是作为一个服务来接受来自Monkey ...
- 第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...
- 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 poptest是国内唯一 ...
- 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer poptest是国内唯一一家培养 ...
随机推荐
- JS作用域理解
1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 遇到重名,只留下一个: 如有重名变量和函数,留下函数: 如有两个 ...
- 我的JS 中级学习篇
在codefordream上进入中级学习后,感觉立马从js的基础学习往前跳了好远,上面的东西好像都是第一次看到一样.这时候才发现,说来也曾接触过js,但是这时候才发现对js的认识就停在知道两点:js中 ...
- [转]部署Let’s Encrypt免费SSL证书&&自动续期
最近公司网站要用https,从自己摸索到找到国内的免费证书到选购正式的收费证书,最后老板说:太贵!不要.一脸懵逼的听老板提到Let's Encrypt证书,没办法,用呗.之前是有一些了解,国外发布的一 ...
- unity脚本的运行顺序以及单例的实现
unity引擎把所有脚本先行编译后,在运行的时候一批,一批的函数进行执行. unity脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到 Awake ->OnEable-> St ...
- 使用splice实现高效的代理服务器
很多网络应用场景下, 当原设备与目标设备无法直接建立连接时,这时就需要一台代理服务器进行中转.代理服务器只需要将来自源设备的报文 原封不动的转发给目标设备,而并不需要知道报文的具体内容.在这种情况下, ...
- 如何把函数都用promise方式实现?
如何把函数都用promise方式实现? 我觉得这是一个好问题.当前在我所在的公司,只要用 NodeJS 进行开发,从框架到具体的应用实例到工具,已经全部迁移到以 promise 为中心开发方式.带来的 ...
- 【转】jqGrid学习之参数
jqGrid参数 名称 类型 描述 默认值 可修改 url string 获取数据的地址 datatype string 从服务器端返回的数据类型,默认xml.可选类型:xml,local,json, ...
- 项目架构开发:数据访问层之Query
接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操 ...
- Android SDK教程
Android SDK 网络问题解析 Android 客户端网络不稳定,会导致App 有时候无法及时收到 Push 消息. 很多开发者认为这是因为 JPush 推送不稳定.延迟,甚至有时候认为 JPu ...
- ycsb对hbase性能测试的研究
ycsb对hbase性能测试 1.ycsb安装 下载ycsb软件 wget https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4. ...