基于STF/ATXServer2 移动设备管理平台的搭建

公司主要业务包含游戏AI及自动化测试 , 我们的AI团队需要利用移动设备对游戏内AI机器人的表现做一些持续性跟踪优化 , 自动化测试团队这边对于游戏的UI自动化测试开发工作也在不断向前推进 , 两者对于移动设备的使用都是必要的 。
由于移动设备资源有限 , 存在频繁互借 , 忘记归还等情况 。为了解决管理和调用问题 , 我们做了一些深入调研 , 最后了解到 , 可以采用开源框架STF或者是ATXServer2来解决 , 将有限的资源达到最大化的输出 。下面会对通过这两种方式搭建移动设备管理平台做个简单的介绍 , 同时 , 也做个简单的比较 , 大家可以根据公司业务情况对其进行选择 。
1. 基于STF搭建移动设备管理平台1.1 STF介绍及优劣势分析

  • STF是最早的远程真机调试平台 , 现在所有的远程真机调试其实都是借鉴了它的实现思想 。
  • 优势:支持Android/ target=_blank class=infotextkey>安卓2.3-10.0系统(10.0系统为目前最新)通过浏览器远程控制 , 支持远程鼠标键盘对真机进行操作远程复制粘贴功能快照截图应用包及文件的上传/下载功能支持远程端浏览器进行真机访问操作日志输出及错误日志输出打印脚本运行(可实现后续的自动化测试)开发人员进行远程debug功能提供设备机的CPU , 内存 , 电量等性能的监测固化测试机器的系统版本 , 系统设置 , 不被篡改
  • 劣势:仅支持安卓手机远程控制 , IOS不支持(需要二次开发)并不能很好兼容国内各种各样的安卓定制化手机 , 可能会遇到STF.APK无法正常安装到手机或者无法正常自动启动服务的情况 。
1.2 架构介绍(Nodejs+Angularjs+Rethinkdb)STF的核心功能可以理解为:“同步图像” + “点击” 。前者使用minicap完成 , 后者依赖minitouch 。
具体结构看下图:
基于STF/ATXServer2 移动设备管理平台的搭建

文章插图
 
设备端
  • STF在会在android设备上安装minicap和minitouch 。使用minicap来捕获屏幕 , 使用minitouch来触发多点触控事件 , 并通过adb使用socket在服务端和设备端进行数据传输 。
  • STF还会在android设备上安装STFService.apk , 它在设备后台运行 , 提供了一组socket api可以用来监控和执行不同的action 。同理 , 它也是通过adb和服务端通信 , 不过它使用的是protocal buffer数据格式 。
  • minirev , 直接从Android设备的端口转发本地服务 , 即便不在一个网段 。
服务端
  • STF的服务端由多个不同的独立的 , 基于nodejs的微服务组成 , 这些服务之间是通过ZeroMQ通信 。服务端可以进一步分成Provider 层和Application层 。
Provider 层
  • Provider层(stf-provider)主要负责和设备之间进行通信 。
  • 通过adb来监控设备状态 , 当有新的设备连接 , 或者有设备断开则会立刻监控到 。
  • 如果是新的connect设备 , 则provider会folck一个新的nodejs进程(stf-device) ,  这个进程主要负责与该设备的所有通信 。
  • stf由两个部分组成 , 分别是stf-provider和adb 。
  • 需要注意的是 , provider层的服务需要跑在物理机上 , 所有的设备需要连着这台物理机 。
Application 层
  • Application层则是由stf -api、stf -app和stf -auth等微服务组成 , 这些微服务组成了一个完整的STF 。
  • 从部署的角度来看 , 这些服务可以跑在任意地方 , 唯一的要求就是 , 这些服务能够通过网络和provider通信 , 这也就是意味着他们需要在同一个网段上 。
Client 层
  • 使用Angular JS实现
  • 通过websocket与服务进行通信
1.3 环境搭建强烈建议在centos下利用Docker搭建 , 相信我 , 这绝对是最优且最简单的方式 。
(1)安装docker服务
  • 进入docker官网下载对应docker安装包进行安装
  • 命令行执行docker version检查是否安装成功
(2)利用docker拉取镜像文件
  • 开启docker服务
  • 拉取docker镜像文件
docker pull devicefarmer/stf:latestdocker pull sorccu/adb:latestdocker pull rethinkdb:latestdocker pull openstf/ambassador:latestdocker pull Nginx:latest


推荐阅读