一. STF介绍
Smartphone Test Farm(简称STF)是一个web应用程序,主要用于从指定的浏览器中远程调试智能手机、智能手表等,可远程调试超过160多台设备。STF可以便捷的管理移动测试设备,提高测试机的高效使用、便捷移动测试。
二.STF的功能
  • 支持安卓2.3-10.0系统,无需root(10.0系统为目前最新)
  • 最多支持管理上百个android设备
  • 实时屏幕操作和显示
  • 通过浏览器远程控制,支持远程鼠标键盘对真机进行操作
  • 远程复制粘贴功能
  • 快照截图
  • 应用包及文件的上传/下载功能
  • 支持远程端浏览器进行真机访问操作
  • 日志输出及错误日志输出打印
  • 支持adb connnect远程连接调试、adb shell脚本运行
  • 开发人员进行远程debug功能
  • android设备信息的展示(如:网络状态、MIME、android版本、手机型号等
  • 提供设备机的CPU,内存,电量等性能的监测
  • 固化测试机器的系统版本,系统设置,不被篡改
三、STF的作用
  • 利用多设备管理,可以实现移动APP兼容性测试
  • 借助adb shell脚本可实现monkey交叉事件测试,测试APP稳定性
  • 结合python/Java+appium/uiautomator2,可实现APP自动化回归测试

四、STF的架构

STF的核心功能可以理解为:“同步图像” + “点击”。前者使用minicap完成,后者依赖minitouch。

1.设备端

  • STF在会在android设备上安装minicap和minitouch。使用minicap来捕获屏幕,使用minitouch来触发多点触控事件,并通过adb使用socket在服务端和设备端进行数据传输。
  • STF还会在android设备上安装STFService.apk,它在设备后台运行,提供了一组socket api可以用来监控和执行不同的action。 同理,它也是通过adb和服务端通信,不过它使用的是protocal buffer数据格式。
  • minirev,直接从Android设备的端口转发本地服务,即便不在一个网段。
2.服务端
STF的服务端由多个不同的独立的,基于nodejs的微服务组成,这些服务之间是通过ZeroMQ通信。服务端可以进一步分成Provider 层和Application层。
3.Provider
  • Provider层(stf-provider)主要负责和设备之间进行通信。
  • 通过adb来监控设备状态,当有新的设备连接,或者有设备断开则会立刻监控到。
  • 如果是新的connect设备,则provider会folck一个新的nodejs进程(stf-device), 这个进程主要负责与该设备的所有通信。
  • stf由两个部分组成,分别是stf-provider和adb。
  • provider层的服务需要跑在物理机上,所有的设备需要连着这台物理机。
4.Application
  • Application层则是由stf -api、stf -app和stf -auth等微服务组成,这些微服务组成了一个完整的STF。
  • 从部署的角度来看,这些服务可以跑在任意地方,唯一的要求就是,这些服务能够通过网络和provider通信,这也就是意味着他们需要在同一个网段上。
5.Client 层
  • 使用Angular JS实现
  • 通过websocket与服务进行通信
 
五、STF环境搭建
安装方式有两种,一种是普通方式安装,一种是通过docker方式安装,两种安装方式各有利弊。普通安装方式要安装的插件非常多,安装起来很麻烦,但一旦安装成功则非常有利于后期的维护,无论哪个部分出了问题,都能通过日志很快定位到;而通过docker方式安装,前期安装时非常便捷,只需要几行命令即可,但这种方式对于对docker了解不是特别深的用户来说,后期一旦某个部件出了问题,则很难定位到或很难解决(别问我怎么知道的,就是通过搭建gitlab总结出来的,哈哈)。为了节约时间,本次搭建以docker方式为例:
1.docker拉取STF相关镜像
docker pull openstf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
docker pull openstf/ambassador:latest
docker pull nginx:latest
2.启动容器
① 启动RethinkDB数据库容器
docker run -d --name rethinkdb -v /home/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8070  //注意端口冲突
② 启动adb容器
docker run -d --name adbd --privileged -v /home/adb:/dev/bus/usb --net host sorccu/adb:latest  //--privileged参数赋予容器内的root用户root权限,若服务器已安装adb命令行工具,也可以使用既有的
③ 启动stf容器
docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.1.122  //带上自己的IP地址即可
④ 查看docker容器运行状态
docker ps -a
docker运行状态如图,up表示处于正在健康运行状态:

3.访问STF管理后台
STF管理页面:http://192.168.1.122:7100,使用任意账号+邮箱即可登录

RethinkDB管理页面:http://192.168.1.122:8070

工具善其事,必先利其器。至此,STF平台搭建完成。当连接一定数量的设备后,就基本具备私有移动测试云平台的雏形了。如上文提到的可供测试团队用于兼容性测试、自动化回归测试、monkey稳定性测试...下一篇介绍STF平台连接设备和具体使用。

Docker搭建STF私有移动测试云平台的更多相关文章

  1. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  2. 利用 Docker 搭建 IPFS 私有网络

    利用 Docker 搭建 IPFS 私有网络 本文原始地址:https://sitoi.cn/posts/40630.html 下载项目 项目地址:https://github.com/Sitoi/p ...

  3. 在 Docker 搭建 Maven 私有库

    在 Docker 搭建 Maven 私有库 小引 If you are developing software without a repository manager you are likely ...

  4. 容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

    开篇 最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了.算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件.首先来看下架构图(实在画的太丑 ...

  5. 搭建自己的XenServer+CloudStack云平台,提供IaaS服务(一)环境搭建

    目标 搭建一个完整的基于XenServer和CloudStack的虚拟化平台,提供IaaS服务. 搭建三台安装了XenServer的服务器 搭建一台安装了CloudStack的服务器用以管理云平台 搭 ...

  6. Django项目: 项目环境搭建 ---- 三、在码云平台创建项目&推送到码云上

    三.在码云平台创建项目 git服务平台: 主要使用github(最主流) 国内访问速度慢 托管私有项目收费 国内一般使用码云gitee 国内访问速度快 托管私有项目免费(限制开发人数) 公司中使用gi ...

  7. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试云平台显示MQTT客户端发过来的消息

    现在这里空空如也 咱自定义的也没有数据 现在就是传上来温度数据,让这里显示温度数据 你发布的主题  /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post 发布 ...

  8. Docker学习笔记六:Docker搭建企业级私有仓库

    前言 Docker不仅是一个强大的服务器部署工具,而且它还有一个官方的Docker Hub registry用于储存Docker镜像.上传镜像到Docker Hub是免费的,上传的镜像文件同时也对公共 ...

  9. docker搭建harbor私有镜像库

    创建harbor私有镜像库 一.部署准备: harbor软件包   在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下   tar zxvf harbor- ...

随机推荐

  1. Linux命令tar

    一.说明 tar命令用来打包或解压文件,打包后的文件后缀一般为.tar.gz或.tgz 1.1 打包和压缩 首先要弄清两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大 ...

  2. k8s docker 中部署think php 并搭建php websocket

    不得不说php 对云原生有点不够友好,之前用java .net打包docker镜像 一下就ok了,php倒腾了好久才算部署成功. 场景:使用阿里云ack(k8s) 部署采用thinkPHP框架的php ...

  3. 基于RabbltMQ延迟插件实现延迟队列代码示例

    上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例 那么废话不多说 直接上代码!! 首先创建延迟队列配置类 DelayedQueu ...

  4. 文字轮播与图片轮播?CSS 不在话下

    今天,分享一个实际业务中能够用得上的动画技巧. 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 看到上述示意图,有同学不禁会发问,这不是个非常简单的位移动画么? 我们来简单分析分析, ...

  5. C++ 炼气期之算术运算符

    1. 前言 编写程序时,数据确定后,就需要为数据提供相应的处理逻辑(方案或算法).所谓逻辑有 2 种存在形态: 抽象形态:存在于意识形态,强调思考过程,与具体的编程语言无关. 具体形态:通过代码来实现 ...

  6. 「快速学习系列」我熬夜整理了Vue3.x响应性API

    前言 Vue3.x正式版发布已经快半年了,相信大家也多多少少也用Vue3.x开发过项目.那么,我们今天就整理下Vue3.x中的响应性API.响应性APIreactive 作用: 创建一个响应式数据. ...

  7. 第一章:Python的数据结构、函数和文件

    list list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates = ['Michael', ...

  8. SAP Word97 Intergration

    *&---------------------------------------------------------------------* *& Report SAPRDEMOW ...

  9. 端口被占用的问题解决 Web server failed to start. Port ×× was already in use

    出现此问题是端口被占用了,只需要关闭正在使用的端口就行 解决思路: 1.在服务器中更改port端口号,改为不冲突,没有被占用的端口. 2.找出被占用的端口,结束被占用的端口 解决结束被占用的端口的方法 ...

  10. 用Python实时获取Steam特惠游戏数据,我看看谁的钱包还有钱

    前言 大家好鸭, 我是小熊猫 Steam大家应该不陌生吧?不知道的话就让我们来了解一下吧~(一下简称"S") S是由美国电子游戏商Valve于2003年9月12日推出的数字发行平台 ...