关于人工智能:移动设备管理平台的搭建基于STFATXServer2

54次阅读

共计 5606 个字符,预计需要花费 15 分钟才能阅读完成。

本文首发于: 行者 AI

公司次要业务蕴含游戏 AI 及自动化测试,咱们的 AI 团队须要利用挪动设施对游戏内 AI 机器人的体现做一些持续性跟踪优化,自动化测试团队这边对于游戏的 UI 自动化测试开发工作也在一直向前推动,两者对于挪动设施的应用都是必要的。

因为挪动设施资源无限,存在频繁互借,遗记偿还等状况。为了解决治理和调用问题,咱们做了一些深刻调研,最初理解到,能够采纳开源框架 STF 或者是 ATXServer2 来解决,将无限的资源达到最大化的输入。上面会对通过这两种形式搭建挪动设施治理平台做个简略的介绍,同时,也做个简略的比拟,大家能够依据公司业务状况对其进行抉择。

1. 基于 STF 搭建挪动设施治理平台

1.1 STF 介绍及优劣势剖析

  • STF 是最早的近程真机调试平台,当初所有的近程真机调试其实都是借鉴了它的实现思维。
  • STF github 地址
  • STF 官网地址

  • 劣势

    • 反对安卓 2.3-10.0 零碎(10.0 零碎为目前最新)
    • 通过浏览器近程管制,反对近程鼠标键盘对真机进行操作
    • 近程复制粘贴性能
    • 快照截图
    • 利用包及文件的上传 / 下载性能
    • 反对近程端浏览器进行真机拜访操作
    • 日志输入及谬误日志输入打印
    • 脚本运行(可实现后续的自动化测试)
    • 开发人员进行近程 debug 性能
    • 提供设施机的 CPU,内存,电量等性能的监测
    • 固化测试机器的零碎版本,零碎设置,不被篡改
  • 劣势

    • 仅反对安卓手机近程管制,iOS 不反对(须要二次开发)
    • 并不能很好兼容国内各种各样的安卓定制化手机,可能会遇到 STF.APK 无奈失常装置到手机或者无奈失常主动启动服务的状况。

1.2 架构介绍(Nodejs+Angularjs+Rethinkdb)

STF 的外围性能能够了解为:“同步图像”+“点击”。前者应用 minicap 实现,后者依赖 minitouch。

具体构造看下图:

设施端

  • 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:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
docker pull openstf/ambassador:latest
docker pull nginx:latest
  • 通过 docker images 查看镜像文件是否拉取胜利

(3)启动容器

  • 先启动一个数据库
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090 
  • 再启动 adb service
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest
  • 最初启动 stf
docker run -d --name stf --net host openstf/stf stf local --public-ip 宿主机 IP 地址 

肯定要留神启动程序,stf 依赖 rethinkdb,所以要先启动 rethinkdb,启动实现后应用: docker ps -a 查看是否启动胜利,顺便获取 stf 的 container ID。

(4)启动 STF 程序

  • 首先进入 stf 镜像目录
docker exec -it stf 的 containerID /bin/sh
  • 启动 stf 命令
stf local --public-ip 宿主机 IP 地址 --allow-remote  

启动之后,局域网浏览器输出 http:// 宿主机 IP 地址:7100 能够关上 STF 登录界面,随便输出帐号邮箱后登录,不过目前还没有设施。

(5)连贯设施

因为是在 Centos 虚拟环境搭建的平台,不能进行设施直连,故在局域网 windows 电脑连贯设施进行近程连贯,在未装置 STF 的电脑上裸露 adb 端口(搭建 SDK 环境),倡议采纳默认端口:5037;

指定端口号与服务器进行通信:

adb -a -P 5037 fork-server server

如果呈现以下谬误:

在工作管理器中关掉 adb.exe,或应用命令 adb kill-server 关掉 adb 程序,从新运行上述命令。若还是执行失败,倡议换成低版本 adb(1.0.32 版本)再试试。

直到执行命令呈现 OK。

(6)切换到 Centos 环境连贯 windows 下挪动设施

在启动 STF 的命令行输出:

stf provider --name localhost.localdomain --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 900 --public-ip 宿主机 IP 地址 --storage-url http://localhost:7100/ --adb-host 局域网 windowsIP 地址 --adb-port 5037 --vnc-initial-size 600x800 --mute-master never --allow-remote

连贯胜利后显示挪动设施信息:

STF 设施列表界面:

STF 设施操作界面:

1.4 过程中可能用到的一些命令

docker

docker start 容器名  #启动某个容器
docker stop 容器名   #进行某个容器
docker rm 容器名     #删除某个容器 

linux

netstat -anp |grep 端口号   #查看端口占用
kill -9 对应端口 PID        #删除过程 

2. 基于 ATXServer2 搭建挪动设施治理平台

2.1 ATXServer2 根本介绍

ATXServer2 其实是在 STF 根底上,应用 Python3+NodeJS+rethinkdb 搭建的一个设施治理平台,性能和 STF 差不多,然而能够实现 IOS 设施近程管制。

ATXServer2 github 地址

2.2 ATXServer2 近程管制原理简介

Android 的近程管制次要还是基于 minicap+minitouch+atx-agent;

IOS 的近程管制次要还是基于 appium fork 的 WebDriverAgent,因为 appium 在 WDA 中减少了 MJPEG Server,所以让近程投屏成为了可能。(不过只反对 iOS 12.0 以上)

2.3 ATXServer2 整体我的项目构造

整体我的项目次要包含四局部:

  • rethinkdb: 一个开源的轻量级的数据库,是用来存储数据的。rethinkdb 官网地址
  • atxserver2:这一部分次要负责解决数据,显示与用户的前端交互等等,所以独自运行 atxserver2 也能够看到成果,当运行起来以候拜访: IP:4000 就能够看到 web 界面。
  • atxserver2-android-provider:这一部分是接入安卓设施必须启动的我的项目,次要负责安卓设施和平台的交互工作,要想接入安卓设施必须启动此我的项目。
  • atxserver2-ios-provider:这一部分是接入 IOS 设施必须启动的我的项目,次要负责 IOS 设施和平台的交互工作,同样的要想接入 IOS 设施必须启动此我的项目。(留神须要 MAC 电脑)

我的项目构造:

|-- static  动态目录
|-- temlates  前端界面
|-- web  网页代码
      |-- urls.py 路由整合文件
      |-- settings.py  配置文件
      |-- database.py  数据库操作相干
      |-- utils.py  罕用配置
      |--views  每个界面的逻辑
        |--slave.py  与 atxslave 通信用
        |--devices.py  设施相干路由
        |--base.py  基于 ReguestHandler 的基类 

还有其余一些文件夹:

  • scripts 文件夹:次要放着一些用于调试开发的工具类等,比方想调试安卓我的项目能够独自运行 fake_android_provider.py 与 atxserver2-android-provider,并且其中的参数要改一些, 个别不必太关注这个文件夹。
  • examples 文件夹 : 寄存着一个自动化的 Demo,采纳的自动化框架是 uiautomator2,设施占用接口参考了 openstf 的 API。

所有的接口采纳 token 认证,每个申请在 Header 中减少 Authorization: Bearer xxxxx-token-xxxx,这个 token 值能够在集体的用户信息界面获取到,也存储在 rethinkdb 里;
接口都是通过 web 申请调用,能够用“httpie”这个工具或者间接用 python 的 request 办法调用。

具体的 API 文档拜访地址

2.4 环境搭建(这里介绍手动部署形式)

(1)装置运行 rethinkdb 数据库

  • rethinkdb 下载安装地址
  • 最简略的形式,跟 STF 搭建办法一样,拉取 docker 镜像文件,先启动一个 rethinkdb 数据库,可返回下面查看步骤。

(2)克隆代码到本地

  • 先将代码 clone 到本地
git clone https://github.com/openatx/atxserver2.git
  • 装置依赖,到根目录执行
pip3 install -r requirements.txt

(3)启动

  • 启动 atxserver 服务,进入 atx2 所在目录并执行
python3 main.py
  • 设置监听端口
python3 main.py --port 4000  # 默认监听的就是这个地址 

启动之后,局域网浏览器关上:http:// 宿主机 IP 地址:4000,实现认证之后就能够顺利的看到设施列表页了。不过目前还是空的,什么都没有。

(4)Android 设施接入

接下来,进行安卓设施接入。这时须要用到另外一个我的项目 atxserver2-android-provider 这个我的项目运行须要 Python3.6+ 和 NodeJS(官网强调 node 必须应用 node8);

  • 先将代码 clone 到本地,我是 clone 到了同局域网 windows 设施上,思考能够连贯挪动设施。
git clone https://github.com/openatx/atxserver2-android-provider.git
  • 装置依赖,到 atxserver2-android-provider 根目录执行
pip3 install -r requirements.txt
  • 查看挪动设施连贯
adb devices
  • 启动 Provider 服务连贯宿主机,进入到 atxserver2-android-provider 根目录执行
python main.py --server 宿主机 IP 地址:4000  

Provider 能够通过 adb track-devices 主动发现曾经接入的设施,当手机接入到电脑上时,会主动给手机装置 minicap,minitouch,atx-agent,app-uiautomator-[test].apk,whatsinput-apk。

浏览器输出 宿主机 IP 地址:4000 拜访 ATX server2 设施管理系统,设施列表展现如下:

ATX server2 设施管理系统设施管制界面:

3. 总结

STF 次要采纳的是 JAVA,我的项目较老,更新保护稍慢,作者位于国外,交换不便;次要语言 js 居多,框架比较完善定型了,另外,不反对苹果设施近程连贯;

ATXserver2 次要应用 python3,国内在作者,不便沟通交流;atxserver2 更像是一个内核发动机,能够本人 DIY 一些想要的性能,并且反对苹果设施近程连贯;

基于对 STF 与 ATXserver2 的比拟,咱们最终抉择在 ATXserver2 的根底上二次开发,退出一些想要实现的性能。当然,除了在前人种的树下纳凉以外,咱们更要谋求一些新的冲破!期待有想法的敌人退出,一起翻新!

正文完
 0