来阿里巴巴本地生活已经将近两年,主要针对移动专项做相关的技术建设,调研和业务推广等工作。大公司有大公司的好处,小公司也有小公司的优势。在阿里这个庞大的集团下,本地生活能得到很多技术支持,当然也会限制我们不让自行研发测试工或是平台,主要防止重复造轮子。如果有需求,就从集团寻找解决方案。所以我做的移动专项的很多工作都是引入集团的方案,测试平台,在本地生活这边落地。
这种工作模式显然不符合我的气质,不管集团的测试平台,工具,方案如何牛X,我也只是一个使用者嘛,没有什么提升,这显然是不对的。于是就在全面配合业务测试工作,解决其工作中遇到的痛点的前提下,了解公司移动专项相关的技术,从网上查找类似的方案进行研究,从而吃透这方面的技术。移动专项大部分测试方案是基于手机管理平台的,手机管理平台是将很多测试机进行统一管理,通过技术手段实现对手机设备的合理分配和管理。如果再加上与测试方案的结合,测试用例,测试计划的管理,就是移动测试平台。
一,STF手机测试平台
集团的移动测试平台由于各种权限的限制,无法拿到源码,不能进行相关技术的分析。在调研了网上的方案后,发现成熟的手机管理方案有STF和ATXServer2。STF是最早的远程真机调试平台,现在所有的远程真机调试其实都是借鉴了它的实现思想。在不对STF做二次开发的前端下,通过启动STF来管理手机设备,通过Spring boot对STF的接口做二次封装以供手机测试平台使用。前端使用Vue来做页面交互等相关事情,也逐步实现手机测试平台的部分功能。当然,在不对STF做二次开发的情况下,是无法支持iOS设备的。随着对测试平台功能的研究的深入,在对手机设备调试这块遇到了如下问题:
经过各种调试,发现只能修改STF的代码才能解决这个问题,就暂时不处理。后来又调研了一下Scrcpy,此工具也可以通过上述方法来实现手机的调试,同时不占用STF的socket端口号,但是Scrcpy将帧编码h264前端解码比较复杂,暂时也就放弃了。
二,ATXServer2基本介绍
ATXServer2其实是在STF基础上,使用Python3+NodeJS+rethinkdb搭建的一个设备管理平台,功能和STF差不多,但是可以实现IOS设备远程控制。Android的远程控制主要还是基于 minicap+minitouch+atx-agent;IOS的远程控制主要还是基于appium fork的WebDriverAgent,因为appium在WDA中增加了MJPEG Server,所以让远程投屏成为了可能。(不过只支持iOS 12.0以上)
项目:Github地址:https://github.com/openatx/atxserver2
平台框架图如下所示:
三,ATXServer2环境搭建
AtxServer2环境可以通过docker部署,也可以通过源码进行部署。Docker部署方案如果有需要,可以自动查寻相应的部署方案,本文介绍MAC系统下源码部署方案。
1,安装rethinkdb服务
A,使用brew安装,命令如下:
$ brew install rethinkdb
B ,查看安装结果:
$rethinkdb -v
rethinkdb 2.4.0 (CLANG 11.0.0 (clang-1100.0.33.16))
C, 启动rethinkdb服务
$ rethinkdb --bind all --cache-size 8192 --http-port 8090
2,安装布署AtxServer2
A,先将代码clone到本地
$ git clone https://github.com/openatx/atxserver2.git
B,安装依赖,到根目录执行
$ pip3 install -r requirements.txt
C,启动
启动atxserver服务,进入atx2所在目录并执行
$ python3 main.py
设置监听端口
$ python3 main.py --port 4000 # 默认监听的就是这个地址
启动之后,局域网浏览器打开:http://宿主机IP地址:4000, 完成认证之后就可以顺利的看到设备列表页了。不过目前还是空的,什么都没有。
3,Android设备的接入
A, 安卓设备接入。这时需要用到另外一个项目 atxserver2-android-provider 这个项目运行需要Python3.6+和NodeJS(官网强调node必须使用node8);
B,先将代码clone到本地,
$ git clone https://github.com/openatx/atxserver2-android-provider.git
C,安装依赖,到atxserver2-android-provider根目录执行
$ pip3 install -r requirements.txt
D, 检查移动设备连接
$ adb devices -l
List of devices attached
e316685a device usb:338886656X product:angler model:Nexus_6P device:angler transport_id:1
E,启动Provider服务连接宿主机,进入到atxserver2-android-provider根目录执行
$ python main.py --server 宿主机IP地址:4000
Provider可以通过adb track-devices自动发现已经接入的设备,当手机接入到电脑上时,会自动给手机安装minicap,minitouch,atx-agent,app-uiautomator-[test].apk,whatsinput-apk。
F,浏览器输入 宿主机IP地址:4000 访问ATX server2设备管理系统,设备列表展示如下:
单击相应的手机列表前面的”点击使用”,可以打开手机调试页面,如下所示:
4,iOS设备的接入
i OS设备的接入,需要使用atxserver2-ios-provider:https://github.com/openatx/atxserver2-ios-provider,同时需要安装libimobiledevice和配置WebDriverAgent,同时也涉及到开发者证书,此处就不过多介绍了,有需要的同学请参考:https://sutune.me/2019/08/10/atx-2-install/
AtxServer2提供了API以便通过接口操作平台上的设备,接口文档请参考 :https://github.com/openatx/atxserver2/blob/master/API.md,我们在开发测试平台的时候,可以通过平台语言,如java的httpclient来封装对相关接口的操作函数,进而实现对手机设备的申请,任务的分发和收集等工作,此处就不过多展开。如果有需要,可以参考:ATX2入门进阶应用:https://sutune.me/2019/08/11/atx2-use/
因为ATXServer2也是通过minicap和minitouch来对手机设备进行调试的,所以我启动了ATXServer2服务后,又调试了一下先前写的通过minicap,minitouch调试手机的功能。结果证明,不会出现STF那种socket端口冲突的问题,可以解决先前开发手机测试平台的调试功能。
通过对集团对应的测试平台的对应开源方案的介绍,逐步加深对公司技术财富的内化,从而提升自己相应方面的能力。我想这也是进入一家公司,除了拿到每个月固定的工资之外,又一笔重要的财富。希望通过介绍我自己的经历,对现在努力工作的你能起到一定的提醒作用。