云测服务 移动端远程云真机 sonic 平台搭建

xinxi · 2022年12月14日 · 最后由 Eason 回复于 2022年12月15日 · 8802 次阅读

背景

最近一段时间又开始居家办公了,居家办公的缺点也是显而易见,沟通效率明显的降低了、工作的时间也比在公司增加了不少。

但是对于我们做客户端测试的同学来说,平时需要做兼容性测试,可以很容易的接到其他同学的测试设备,但是在居家以后每个同学的手头设备有限,很难最大程度的提高设备兼容性使用,所以期望可以建立云真机平台,把公司的一些设备和大家手上的设备放到云平台上,方便大家共享设备。

介绍

Sonic 是一站式开源分布式集群云真机测试平台,致力服务于中小企业的客户端 UI 测试(代码永久免费、开源)。之前一直用着 atx2 的远程真机平台,目前看到 sonic 已经相对稳定,这里 Mark 一下,希望有助于其他人使用。

官网网址:https://sonic-cloud.gitee.io/#/Home

安装 docker

本地测试的是 Mac 笔记本,所以使用 Mac 来安装 docker 程序。

Mac 版 Docker 是由 Docker 公司基于社区版的 Docker 提供的一个产品。这意味着在笔记本上安装单引擎版本的 Docker 是非常简单的。

但是同时,这也意味着 Mac 版 Docker 并不是为生产环境而设计的。如果你听说过 boot2docker,那么 Mac 版 Docker 就是一个流畅、简单并且稳定版的 boot2docker。

尽管在 Mac 上实现了无缝集成,还是要谨记 Mac 版 Docker 底层是基于 Linux VM 运行的,所以说 Mac 版 Docker 只能运行基于 Linux 的 Docker 容器。

不过这样已经很好了,因为大部分容器实际上都是基于 Linux 的。

接下来开始安装 Mac 版 Docker,可以通过 brew 命令行安装。

brew install --cask --appdir=/Applications docker

安装完成后,打开应用文件夹(可能会自动打开)并且双击 Docker 应用图标来启动 Docker。可能需要确认是否运行,因为这是从互联网下载的应用程序。

Docker daemon 进程启动。

一个活动的鲸鱼图标会在屏幕上方状态栏中出现。一旦 Docker 成功运行,鲸鱼图标就静止了。可以单击鲸鱼图标来管理 DfM。

安装 docker-compose

docker-compose 项目是 docker 官方的开源项目,负责实现对 docker 容器集群的快速编排。

docker-compose 的工程配置文件默认为 docker-compose.yml。可以通过环境变量 COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器。

安装命令如下:

pip3 install docker-compose

安装数据库

本文注意介绍使用 docker 方式安装 mysql 数据,如果有已安装好的 mysql 数据库可以忽略,但是需要注意 mysql 的版本是 5.7。

安装命令如下:

-v: 数据挂在地址

-e: 环境参数,数据库密码

docker run --name some-mysql -v /Users/xinxi/Documents/qamysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123321 -p 8888:3306 -d mysql:5.7

由于 mysql 默认不支持远程地址访问,需要手动修改参数。

进入容器命令:

docker exec -it 9a1aab28dffe /bin/bash

修改访问权限:

mysql -p

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123321' WITH GRANT OPTION;

flush privileges;

提前创建需要用到的数据库 sonic,避免后面程序启动失败。

mysql> CREATE DATABASE IF NOT EXISTS sonic
    -> DEFAULT CHARACTER SET utf8
    -> DEFAULT COLLATE utf8_chinese_ci;

前后端部署

sonic 项目经过不断的迭代开发,功能也非常强大,为了考虑到性能、扩展性,也引入了 Eureka、gateway 等组件,所以部署也相对复杂一些。

为了能快速上手部署,在 sonic 的官网推荐使用 docker-compose 部署前后端,只需要一行命令就可以完成部署。

首先,下载最新版本的 zip 文件到任意目录。zip 包下载地址如下:

https://gh.flyinbug.top/gh/https://github.com/SonicCloudOrg/sonic-server/releases/download/v2.0.5/sonic-server-v2.0.5.zip

解压 zip,无需改动 docker-compose.yml 文件。如下是 docker-compose.yml 的部分截图,可以看到已经编排好了容器的启动顺序,请勿修改容器顺序,否则会导致启动失败。

更改.env 中的信息,需要注意是的 ip 地址需要改成本地 ipv4 地址,切勿使用 127.0.0.1 地址。

接下来最关键的一步,sonic-server-v2.0.5-2 目录下执行以下指令:

docker-compose up -d

docker-compose 会先下载镜像到本地,使用的阿里云加速镜像,下载速度还是挺快的。

到此,前后端部署完毕!,因 Eureka 心跳机制,刚启动完毕微服务间互相访问需要 3~5 分钟,请耐心等候。

打开浏览器访问: http://localhost:4000,如果能看到如下页面说明前后端部署正常,我们可以注册一个账号去登录。

agent 部署

因为 sonci 本身的架构是分布式的,类似 jenkins 的 master 和 slave 方式。

agent 可以部署到不同的电脑上作为分布式节点,一个 agent 最多可以带 50 个移动设备。

agent 支持两个部署方式:

Docker 部署

首先,下载最新的 docker-compose.yml,参考注释修改里面的内容。

https://gh.flyinbug.top/gh/https://github.com/SonicCloudOrg/sonic-agent/releases/download/v2.0.5/docker-compose.yml

需要在 docker-compose.yml 文件中配置 SONIC_SERVER 和 AGENT 相关参数。

另外就是需要替换为前端新增 Agent 生成的 key,从部署好的前端界面【设备中心】的【Agent 中心】新增 Agent,记录 Agent 的 Key。

最后执行启动命令:

docker-compose up -d

等程序启动完成后看到 agent 状态是在线说明 agent 连接 server 成功。

jar 方式部署

该方式将以本地 jar 包部署 Agent 端、Appium 等等环境,相对复杂一些,适合本地之前配置过自动化环境的同学。

Sonic 官方推荐使用 JDK15,可以前往如下安装下载。

https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html 

or

https://www.123pan.com/s/94VA-3GEVv

下载完成后,解压安装包

sudo tar -zxf /Users/tt/Documents/software/jdk-15.0.1_osx-x64_bin.tar.gz -C /Library/Java/JavaVirtualMachines/

配置 JAVA_HOME

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
export JDK8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
export JDK15_HOME=/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home

# alias 命令链接到 export 命令
alias jdk15="export JAVA_HOME=$JDK15_HOME"
alias jdk8="export JAVA_HOME=$JDK8_HOME"

open ~/.bash_profile,设置完 source 一下生效,可以切换查看生效的 jdk version。

接下来,需要讲安卓 SDK 设置到系统环境变量,命名为 ANDROID_HOME。打开 SDKManager,下载 platform-tools。确保 platform-tools 目录存在,adb 指令可用。将 ANDROID_HOME、ANDROID_HOME/platform-tools 添加到系统 PATH 中。

选择 PC 对应的平台 zip 下载并解压到任意目录

mac 非 m1 的选择

https://gh.flyinbug.top/gh/https://github.com/SonicCloudOrg/sonic-agent/releases/download/v2.0.5/sonic-agent-v2.0.5-macosx_x86_64.zip

macm1 的选择

https://gh.flyinbug.top/gh/https://github.com/SonicCloudOrg/sonic-agent/releases/download/v2.0.5/sonic-agent-v2.0.5-macosx_arm64.zip

赋予 工作目录 所有权限,然后确保解压后的 mini、config、plugins 文件夹与 jar 同级。

sudo chmod -R 777 xxxxx

修改 config 文件夹中 application-sonic-agent.yml 的配置信息,保存。

执行启动命令:

/Users/xinxi/Downloads/jdk-15.0.2.jdk/Contents/Home/bin/java  -Dfile.encoding=utf-8 -jar sonic-agent-macosx-x86_64.jar

如果在控制台看到 server auth successful 关键字说明连接 server 成功。

我们来尝试下 Andorid 端的接入,我使用的小米手机设备,把手机查到 agent 电脑上,使用 adb devices 命令确认下是否连接成功。

此时在控制台如果看到手机设备 online 关键字,说明手机设备上线。

在平台的设备可以看到设备情况

点击设备详情进入设备操作页面,可以看到远程控制支持功能:

  • 远程面版
  • 应用程序
  • 网络抓包
  • 快速截图
  • 终端

正常进入设备页面,会初始化 UIAutomatoir2Server 服务和安装 scrcpy 服务。

正常情况下,可以看到实时屏幕的现实效果,可以在屏幕区域使用鼠标远程操作。

如果设备页面一直显示准备图像中,可能是 agent 的 websocket 没有创建成功。

可以使用 telnet 确认下 agent 是否 ip+ 端口能 ping 通

telnet 192.168.8.101 7777

结语

本文演示了在 mac 电脑搭建 sonic 远程真机平台的全过程,并且接入了一台 Android 设备,远程使用手机设备的流程度还是可以的,可以支撑日常的功能测试使用和 debug 问题。

业界有很多远程真机测试方案,但是能完整能开源出来的很少,sonic 提供给大家全套解决方案:程真机操作、UI 自动化测试等功能。

另外 sonic 的开发团队来自国内一线工程师免费开发维护,这里特此感谢 sonic 开发团队。

如果大家觉得有帮助,可以关注下方微信公众号,里边有更多的技术文档和面试技巧~

共收到 1 条回复 时间 点赞

👏 感谢您的分享哦

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册