云测服务 sonic 云真机 linux 单机版部署

lixf6 · 2022年03月25日 · 3279 次阅读

一、关于 sonic 云真机

Sonic,一站式开源分布式集群云真机测试平台,致力服务于中小企业的客户端 UI 测试(代码永久免费、开源)。
个人其实 21 年年底时已经关注,但当时觉得不太稳定及后期可能会收费什么的,虽然至今还不了解 sonic 背后的团队做这个靠什么活下来。
之前一直用着 atx2 开源框架,目前看到 sonic 已经相对稳定,这里 Mark 一下,希望有助于其他人在 linux 下部署开展
官网网址见:sonic 云真机

二、部署(单机版 v1.3.2-beta)

部署模式 1:【部署服务器 +agent 部署:均在 ubuntu 上部署】,这个搜了下,暂时还没相关比较全面的部署文章。

lixuefu2@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 21.04
Release:    21.04
Codename:   hirsute

部署模式 2:【部署服务器 +agent 部署:ubuntu+windows】,官方部署方案

这里选型部署模式 1 来部署,主要是习惯都用 linux,后面也便于扩展
部署模式 2,可参考最后的备注链接中文章部署

大致的部署图为:(这里 0324 日更文时最新为 v1.3.2-beta,此处最新更新文章 0325 日时发现已更新到 v1.3.2-release,建议直接先浏览一遍整体,然后参考后文的第五点 yml 文件部署)

1、确保服务器前后端部署正常---docker-compose up -d
2、确保agent部署正常---拉linux下对应的agent包,解压后改yml文件,再执行java命令使得手机提示要装apk即可
agent部署过程见下,以下都是必须的,所以需要逐个配置(部分简单的就跳过)
===================== 开始检查配置环境 =====================
👉 检查 ANDROID_HOME 环境变量通过 ✔
👉 检查 ADB 环境通过 ✔
👉 检查 Node 环境通过 ✔
👉 检查 npm 环境通过 ✔
👉 检查 JAVA_HOME 环境变量通过 ✔
👉 检查 Appium 环境通过 ✔
👉 检查 adbkit 环境通过 ✔
👉 检查 chromeDriver 环境通过 ✔
👉 校验 本地文件夹 通过 ✔
===================== 配置环境检查结果 =====================

三、具体部署流程及踩坑

部署可分为服务器前后端部署(手机后台服务及前端展示)+agent 部署(运行在手机上的代理 apk),
【前后端部署】:建议直接使用 docker-compose;
【agent 代理安装】:由于官方默认的 yml 文件是偏 windows 部署,这里为了后期部署在树莓派上,统一使用 linux 部署

1、前后端部署:docker-compose up -d
修改配置文件:lixuefu2@ubuntu:~/sonic$ vim docker-compose.yml

version: '3'
services:
  sonic-mysql:
    image: "mysql:5.7"
    hostname: sonic-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      - MYSQL_ROOT_PASSWORD=Sonic!@#123
      - MYSQL_DATABASE=sonic
    volumes:
      - ./mysql/data:/var/lib/mysql
    ports:
      - "3307:3306"
    networks:
      - sonic-network

  sonic-server-simple:
    image: "sonicorg/sonic-server-simple:v1.3.2-beta"
    container_name: sonic-server-simple
    environment:
      - MYSQL_HOST=sonic-mysql #这里的HOST要改成sonic-mysql哦
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=sonic
      - MYSQL_USERNAME=root
      - MYSQL_PASSWORD=Sonic!@#123
      #在服务器部署的话,localhost改为服务器ip,port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=localhost
      - SONIC_API_PORT=8094
      - SONIC_NETTY_PORT=8095
      #token加密的key值
      - SECRET_KEY=sonic
      #身份验证token有效天数
      - EXPIRE_DAY=14
      #前端页面访问地址,不填默认为http://localhost:3000
      - CLIENT_HOST=http://localhost:3000
      #文件保留天数(指测试过程产生的文件,包括图片、录像等等)
      - FILE_KEEP_DAY=60
      #测试结果保留天数
      - RESULT_KEEP_DAY=60
      #以下均为Cron表达式
      #清理文件定时任务
      - FILE_CRON=0 0 12 * * ?
      #清理测试结果定时任务
      - RESULT_CRON=0 0 12 * * ?
      #发送日报定时任务
      - DAY_CRON=0 0 10 * * ?
      #发送周报定时任务
      - WEEK_CRON=0 0 10 ? * Mon
    networks:
      - sonic-network
    volumes:
      - files:/keepFiles/
      - files:/imageFiles/
      - files:/recordFiles/
      - files:/packageFiles/
      - files:/logs/
    ports:
      - "8094:8094"
      - "8095:8095"
  sonic-client-web:
    image: "sonicorg/sonic-client-web:v1.3.2-beta"
    environment:
      #192.168.1.1改为你的ipv4,port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=192.168.213.130
      - SONIC_API_PORT=8094
    networks:
      - sonic-network
    ports:
      - "3000:80"

volumes:
  files:

networks:
  sonic-network:
    driver: bridge                                                                                                                                                                                        

一键部署

docker-compose up -d

2、确保前后端部署正常,前端页面可用
在这里插入图片描述

lixuefu2@ubuntu:~$ sudo docker ps -a
[sudo] lixuefu2 的密码: 
CONTAINER ID   IMAGE                                      COMMAND                  CREATED        STATUS       PORTS                                                           NAMES
0d5063f8357c   mysql:5.7                                  "docker-entrypoint.s…"   5 hours ago    Up 5 hours   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp            sonic_sonic-mysql_1
fa9b46b8f0f7   sonicorg/sonic-client-web:v1.3.2-beta      "/docker-entrypoint.…"   5 hours ago    Up 5 hours   0.0.0.0:3000->80/tcp, :::3000->80/tcp                           sonic_sonic-client-web_1
066189ea8c8e   sonicorg/sonic-server-simple:v1.3.2-beta   "java -server -Xmx80…"   5 hours ago    Up 4 hours   0.0.0.0:8094-8095->8094-8095/tcp, :::8094-8095->8094-8095/tcp   sonic-server-simple

问题 1:过程中发现 mysql 连接报错权限相关问题,为方便,直接赋予全部权限

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64$ sudo docker logs -f sonic-server-simple
org.quartz.JobPersistenceException: Failure identifying failed instances when checking-in: Can't get stat of './sonic/QRTZ_SCHEDULER_STATE.TRG' (Errcode: 13 - Permission denied)
Caused by: java.sql.SQLException: Can't get stat of './sonic/QRTZ_SCHEDULER_STATE.TRG' (Errcode: 13 - Permission denied)
chmod 777 -R mysql

问题 2:当本地启动了另一 mysql 时,会导致 docker 中的 docker 启动不成功,目前先 stop 掉即可:

service mysql stop
service mysql status

3、agent 部署:
先下载对应 agent 压缩包:https://github.com/SonicCloudOrg/sonic-agent/releases
在这里插入图片描述
下载后解压

lixuefu2@ubuntu:~/sonic$ unzip sonic-agent-v1.3.2-beta-linux_x86_64 -d .

解压后目录:

lixuefu2@ubuntu:~/sonic$ cd sonic-agent-v1.3.2-beta-linux_x86_64/
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64$ pwd
/home/lixuefu2/sonic/sonic-agent-v1.3.2-beta-linux_x86_64
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64$ ls
config  logs  mini  plugins  sonic-agent-linux-x86_64.jar  test-output  webview
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64$ cd config/
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ ls
application-prod.yml
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ pwd
/home/lixuefu2/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config

3.1、新建 agent 信息
在这里插入图片描述

3.2、修改 application-prod.yml

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ vim application-prod.yml 
sonic:
  agent:
    # 替换为部署Agent机器的ipv4
    host: 192.168.213.130
    # 替换为Agent服务的端口,可以自行更改
    port: 7777
    # 替换为前端新增Agent生成的key
    key: 2fd04815-ea9f-47c0-a2b4-cdd79896e542
  server:
    # 这个host改成后端的host
    host: 192.168.213.130
    # 如果跨网段,这个port改成后端文件中心的port(一般不变)
    folder-port: 8094
    # 如果跨网段,这个port改成后端传输中心的port(一般不变)
    transport-port: 8095

modules:
  # 安卓模块配置
  android:
    enable: true
    # 是否开启远程adb调试功能
    use-adbkit: true
  # iOS模块配置
  ios:
    # 如果不需要连接iOS设备,请将true改为false。开启的windows用户请确保本机已安装iTunes
    enable: true
    #替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
    wda-bundle-id: com.facebook.WebDriverAgentRunner.xctrunner
  appium:
    enable: true
    # 默认为0会自动寻找随机端口启动,如果需要指定appium server端口,请在这里设置
    port: 0
  # 在线webView调试模块配置
  webview:
    enable: true
    # 谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)
    chrome-driver-debug-port: 0
    # Agent机器上的chrome浏览器的driver路径,可以去http://npm.taobao.org/mirrors/chromedriver/下载
    # chrome-driver-path: C:\Program Files\Google\Chrome\Application\chromedriver.exe
    chrome-driver-path: /usr/bin/google-chrome

# Agent日志管理,一般不需要更改,可根据自己需要配置
logging:
  file:
    #日志路径
    name: logs/sonic-agent.log
  logback:
    rollingpolicy:
      clean-history-on-start: true
      #保留天数
      max-history: 3
  pattern:
    console: "%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"

3.3、安装 jdk16 及配置 JAVA_HOME

sudo add-apt-repository ppa:openjdk-r/ppa 
sudo apt-get update 
sudo apt-get install openjdk-16-jdk

确认 jdk16 安装成功,这里一定要用 16,否则会报 jdk 相关类的处理报错问题

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ java -version
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 16.0.1+9-Ubuntu-1, mixed mode, sharing)
vim /etc/profile

在 profile 的最后加入以下行

JAVA_HOME=/usr/lib/jvm/java-16-openjdk-amd64
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
source /etc/profile

3.4、配置 ANDROID_HOME
查看 adb 路径:

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ adb version
Android Debug Bridge version 1.0.41
Version 28.0.2-debian
Installed as /usr/lib/android-sdk/platform-tools/adb
vim /etc/profile

在 profile 的最后加入以下行

export ANDROID_HOME=/usr/lib/android-sdk
source /etc/profile

3.5、配置 chrome
1)先安装 Chrome

sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub  | sudo apt-key add -
apt-get update
apt-get install google-chrome-stable

2)执行 google-chrome 启动谷歌浏览器

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ google-chrome -v
正在现有的浏览器会话中打开。

在这里插入图片描述
3)查看 chrome 路径:

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ which google-chrome
/usr/bin/google-chrome

4)修改 application-prod.yml
文件(由于官方的这个是默认对应 windowsC 盘路径下的 chrome)

lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/config$ vim application-prod.yml

在这里插入图片描述
3.6、以上配置完,直接运行
这里由于 chrome 的安全机制,不能使用 root 运行,直接用个人用户运行即可

java -Dfile.encoding=utf-8 -jar sonic-agent-linux-x86_64.jar
lixuefu2@ubuntu:~/sonic/sonic-agent-v1.3.2-beta-linux_x86_64$ java -Dfile.encoding=utf-8 -jar sonic-agent-linux-x86_64.jar
   ▄▄▄▄      ▄▄▄▄    ▄▄▄   ▄▄   ▄▄▄▄▄▄      ▄▄▄▄
 ▄█▀▀▀▀█    ██▀▀██   ███   ██   ▀▀██▀▀    ██▀▀▀▀█
 ██▄       ██    ██  ██▀█  ██     ██     ██▀
  ▀████▄   ██    ██  ██ ██ ██     ██     ██
      ▀██  ██    ██  ██  █▄██     ██     ██▄
 █▄▄▄▄▄█▀   ██▄▄██   ██   ███   ▄▄██▄▄    ██▄▄▄▄█
  ▀▀▀▀▀      ▀▀▀▀    ▀▀   ▀▀▀   ▀▀▀▀▀▀      ▀▀▀▀

2022-03-24 19:08:29.308 - INFO 27762 --- [main] org.cloud.sonic.agent.AgentApplication   : Starting AgentApplication v1.3.2-beta using Java 16.0.1 on ubuntu with PID 27762 (/home/lixuefu2/sonic/sonic-agent-v1.3.2-beta-linux_x86_64/sonic-agent-linux-x86_64.jar started by lixuefu2 in /home/lixuefu2/sonic/sonic-agent-v1.3.2-beta-linux_x86_64)
2022-03-24 19:08:29.312 - INFO 27762 --- [main] org.cloud.sonic.agent.AgentApplication   : The following profiles are active: prod,linux-x86_64
2022-03-24 19:08:30.510 - INFO 27762 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 7777 (http)
2022-03-24 19:08:30.520 - INFO 27762 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-03-24 19:08:30.521 - INFO 27762 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.53]
2022-03-24 19:08:30.573 - INFO 27762 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-03-24 19:08:30.574 - INFO 27762 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1183 ms
===================== 开始检查配置环境 =====================
👉 检查 ANDROID_HOME 环境变量通过 ✔
👉 检查 ADB 环境通过 ✔
👉 检查 Node 环境通过 ✔
👉 检查 npm 环境通过 ✔
👉 检查 JAVA_HOME 环境变量通过 ✔
👉 检查 Appium 环境通过 ✔
👉 检查 adbkit 环境通过 ✔
👉 检查 chromeDriver 环境通过 ✔
👉 校验 本地文件夹 通过 ✔
===================== 配置环境检查结果 =====================
JAVA_HOME(系统PATH环境变量): /usr/lib/jvm/java-16-openjdk-amd64
java version(运行当前jar的java版本): 16.0.1
ANDROID_HOME(系统PATH环境变量): /usr/lib/android-sdk
ADB path: /usr/bin/adb
ADB version: Android Debug Bridge version 1.0.41
Version 28.0.2-debian
Installed as /usr/lib/android-sdk/platform-tools/adb
chromeDriver path: /usr/bin/google-chrome

四、最终效果图

插上手机,然后刷新,会发现手机提示安装相关的 apk
在这里插入图片描述
目前发现 sonic 连接手机时,两款华为机型无法获取到图像,OPPO 正常(后续全部使用 docker 部署后,版本一致对上就没有该问题)
机型:HUAWEI Mate 30E Pro 5G 全网通版、JEF-NX9
在这里插入图片描述

2022-03-24 19:35:10.379 -ERROR 23902 --- [Device List Monitor] o.c.s.a.b.a.AndroidDeviceBridgeTool      : device offline
2022-03-24 19:35:10.379 - INFO 23902 --- [Device List Monitor] o.c.s.a.b.a.AndroidDeviceBridgeTool      : 获取屏幕尺寸失败!拔插瞬间可忽略该错误...
2022-03-24 19:35:10.387 - INFO 23902 --- [Device List Monitor] o.c.s.a.b.a.AndroidDeviceStatusListener  : Android设备:DBPDU20610018231 ONLINE!
2022-03-24 19:35:27.796 - INFO 23902 --- [http-nio-7777-exec-4] o.c.s.agent.websockets.TerminalWSServer  : 等待安装超时!
2022-03-24 19:35:28.030 - INFO 23902 --- [http-nio-7777-exec-5] o.c.s.a.w.AndroidScreenWSServer          : 等待安装超时!
2022-03-24 19:35:38.014 - INFO 23902 --- [http-nio-7777-exec-8] o.c.s.agent.websockets.TerminalWSServer  : 20退出
2022-03-24 19:35:38.014 - INFO 23902 --- [http-nio-7777-exec-2] o.c.s.agent.websockets.AndroidWSServer   : 关闭driver异常!
2022-03-24 19:35:38.088 - INFO 23902 --- [http-nio-7777-exec-2] o.c.s.agent.websockets.AndroidWSServer   : 1e退出
2022-03-24 19:35:38.088 - INFO 23902 --- [http-nio-7777-exec-2] o.c.s.agent.websockets.AndroidWSServer   : android解锁udId:DBPDU20610018231

五、sonic 更新到 v1.3.2-release 新部署方式 (推荐使用!!!)

由于更新到 v1.3.2-release 后 agent 可以使用 docker-compose 部署啦,所以这里将完整的 docker-compose.yml 文件内容共享如下,已实战可用:

version: '3'
services:
  sonic-agent:
    #下方为Docker Hub镜像,推荐海外用户使用,默认使用国内加速镜像
    #image: "sonicorg/sonic-agent-linux:v1.3.2-release"
    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-agent-linux:v1.3.2-release"
    environment:
      # 替换为部署Agent机器的ipv4
      - AGENT_HOST=192.168.213.130
      # 替换为Agent服务的端口,可以自行更改
      - AGENT_PORT=7777
      # 替换为前端新增Agent生成的key
      - AGENT_KEY=2fd04815-ea9f-47c0-a2b4-cdd79896e542
      # 这个host改成后端的host
      - SERVER_HOST=192.168.213.130
      # 这个port改成后端文件中心的port(一般不变)
      - SERVER_FOLDER_PORT=8094
      # 这个port改成后端传输中心的port(一般不变)
      - SERVER_TRANSPORT_PORT=8095
      # 是否使用安卓模块
      - ANDROID_ENABLE=true
      # 是否开启远程adb调试功能
      - USE_ADBKIT=true
      # 是否使用iOS模块
      - IOS_ENABLE=true
      # 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
      - WDA_BUNDLE_ID=com.facebook.WebDriverAgentRunner.xctrunner
      # 是否启用Appium
      - APPIUM_ENABLE=true
      # 默认为0会自动寻找随机端口启动,如果需要指定appium server端口,请在这里设置
      - APPIUM_PORT=0
      # 是否启用webview调试功能
      - WEBVIEW_ENABLE=true
      # 谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)
      - CHROME_DRIVER_PORT=0
    network_mode: "host"
    privileged: true
    volumes:
      - /dev/bus/usb:/dev/bus/usb
      - /var/run/usbmuxd:/var/run/usbmuxd

  sonic-mysql:
    image: "mysql:5.7"
    hostname: sonic-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      - MYSQL_ROOT_PASSWORD=Sonic!@#123
      - MYSQL_DATABASE=sonic
    volumes:
      - ./mysql/data:/var/lib/mysql
    ports:
      - "3307:3306"
    networks:
      - sonic-network

  sonic-server-simple:
    image: "sonicorg/sonic-server-simple:v1.3.2-release"
    container_name: sonic-server-simple
    environment:
      - MYSQL_HOST=sonic-mysql #这里的HOST要改成sonic-mysql哦
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=sonic
      - MYSQL_USERNAME=root
      - MYSQL_PASSWORD=Sonic!@#123
      #在服务器部署的话,localhost改为服务器ip,port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=localhost
      - SONIC_API_PORT=8094
      - SONIC_NETTY_PORT=8095
      #token加密的key值
      - SECRET_KEY=sonic
      #身份验证token有效天数
      - EXPIRE_DAY=14
      #前端页面访问地址,不填默认为http://localhost:3000
      - CLIENT_HOST=http://localhost:3000
      #文件保留天数(指测试过程产生的文件,包括图片、录像等等)
      - FILE_KEEP_DAY=60
      #测试结果保留天数
      - RESULT_KEEP_DAY=60
      #以下均为Cron表达式
      #清理文件定时任务
      - FILE_CRON=0 0 12 * * ?
      #清理测试结果定时任务
      - RESULT_CRON=0 0 12 * * ?
      #发送日报定时任务
      - DAY_CRON=0 0 10 * * ?
      #发送周报定时任务
      - WEEK_CRON=0 0 10 ? * Mon
    networks:
      - sonic-network
    volumes:
      - files:/keepFiles/
      - files:/imageFiles/
      - files:/recordFiles/
      - files:/packageFiles/
      - files:/logs/
    ports:
      - "8094:8094"
      - "8095:8095"

  sonic-client-web:
    image: "sonicorg/sonic-client-web:v1.3.2-release"
    environment:
      #192.168.1.1改为你的ipv4,port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=192.168.213.130
      - SONIC_API_PORT=8094
    networks:
      - sonic-network
    ports:
      - "3000:80"

volumes:
  files:

networks:
  sonic-network:
    driver: bridge

然后直接把之前部署容器的杀掉再重启即可

docker-compose down
docker-compose up -d

六、备注

官方推荐部署网址:sonic 官方部署
《基于 Docker 方式部署 sonic 前后端(体验版)》:docker 部署云真机前后端
《Sonic 测试平台搭建 -- 设备接入》:sonic 设备接入
《ubuntu 设置环境变量》:ubuntu 设置环境变量
《Ubuntu 16.04 安装 64 位谷歌 Chrome 浏览器》:ubuntu 安装 chrome
《Ubuntu 查看 java 安装路径》:ubuntu 查看 java 安装路径

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