在上一个系列中我们分析了 UiAutomator 的核心源码,对 UiAutomator 是怎么运行的原理有了根本的了解。今天我们会开始另外一个在安卓平台上基于 UiAutomator 的新起之秀--Appium 的源码分析之旅。
本文在真个系列中会扮演一个简介的角色,不会分析任何的代码,只会先给大家一个基本的印象,方便大家在持有这个印象的基础上往下和本人一块分析。
我们先看一下本人大概一个月之前刚接触 appium 时整理的一个高层架构图
下面一部分就是蓝色的就是 bootstrap 所在的位置,可以看到它是运行在我们的安卓目标测试机器端的,它会监听 4724 端口获得命令然后 pass 给 UiAutomator 来做处理。
那么我们应该怎么来给 bootstrap 做一个定义呢?我不知道官方有没有做一个定义,但是按照我自己的语言,我会这样来定义它:
Bootstrap 是 Appium 运行在安卓目标测试机器上的一个 UiAutomator 测试脚本,该脚本的唯一一个测试方法所做的事情是在目标机器开启一个 socket 服务器来把一个 session 中 Appium 从 PC 端过来的命令发送给 UiAutomator 来执行处理。
这个定义说明了 bootstrap 在 appium 和 uiautomator 中究竟处于一个什么样的角色:
首先,它是一个 uiautomator 的测试脚本,它的入口类 Bootstrap 继承于 UiAutomatorTestCase,所以 UiAututomator 可以正常运行它,它也可以正常的使用 uiautomator 的方法,这个就是 appium 的命令可以转换成 uiautomator 的命令的关键
其次,它是一个 socket 服务器,它专门监听 4724 端口过来的 appium 的连接和命令数据,并把 appium 的命令转换成 uiautomator 的命令来让 uiautomator 进行处理
最后,它处理的是 appium 从 pc 端过来的命令,而非一个文件。这在初次接触 appium 的朋友是很容易困惑的,以为 appium 是整个脚本文件发送到目标机器再由 bootstrap 进行分析处理的,事实并非如此
上面寥寥几句道出了 bootstrap 的定义,那么往下我们就继续寥寥几行的把 bootstrap 这个 jar 包的关键类以及它的关键方法和相应的本人的一些说明给列出来,给大家现有一个 draft idea 每个类大概是怎么一回事,这样我们往下的文章就比较好说,大家也比较好理解了。
这里类在我们往下的分析文章中会做进一步的阐述,所以在这里你只需要由一个 rough 的 idea 这些类大概是怎么一回事就可以了。
本来想画一个类图来描述 bootstrap 的架构的,但通过以上的类表可以看出来 bootstrap 里面的关键类基本没有真正用到面向对象中的继承,因为它们基本上都没有父类。其实我们也可以理解,每个类都不算复杂做的事情都不是很多,就算稍微需要做多点事情,组合其他的类来做就好了。
所以这里我也放弃给大家提供类图了,就提供我自己手画的(还是那句话,本人的 macbook pro 上没有安装相应的收费流程图软件)一个以处理 appium 从 pc 端过来的 click 命令的流程为例子的顺序图,大家先有一个初步的 idea,看不明白也没有关系,我后面会另外开一篇文章专门来描述这个流程以把所有的关键类给串起来的。
作者:天地会珠海分舵
http://techgogogo.com
http://blog.csdn.net/zhubaitian