Sonic是一款开源、支持分布式部署、在线自动化测试的私有云真机平台。偶然接触到这个平台是源于虫师的一篇公众号文章《基于Linux 部署 Sonic》,于是结合文章内容和官网尝试搭建了一套,并试用了一番,直到现在也一直在用。后来陆续也加了作者的微信号、粉丝群,对于部署和使用过程中的一些问题和建议,作者和粉丝群中的小伙伴都能及时给予解答,整体体验很不错,遂决定写一篇总结分享。
目前市面上常见的云真机平台有两种,一种是各大服务商如阿里、腾讯、百度推出的公共云真机平台,如:WeTest、EMAS,除了收费高点其他好像没什么缺点;一种是网上各种开源云真机平台,支持私有化部署,如:Sonic、STF,这类平台的特点是免费、支持二次开发,缺点是功能支持相对薄弱(如自动化、性能)、真机采购成本高(当然,这并不是平台的缺点,如果你司有足够的测试机资源的话,而且也不是每个企业都有全面的兼容性测试需求,你也可以选择接入少量真机)。
公共 | 私有 | |
|---|---|---|
平台 | testin云测、Testbird、腾讯的WeTest、优测、阿里的EMAS、百度MTC | Sonic、ATX-Server2、STF |
特点 | 面向各大企业或个人 | 私有化部署、面向企业内部 |
优点 | 机型覆盖全,功能丰富,如:APP性能监控、自动化测试 | 开源、免费 |
缺点 | 收费高 | 自建成本高,尤其是真机采购费用 |
Sonic,一站式开源分布式集群云真机测试平台,致力服务于中小企业的客户端UI测试。Sonic当前的愿景是能帮助中小型企业解决在客户端自动化或远控方面缺少工具和测试手段的问题。

官网:https://sonic-cloud.gitee.io/#/Home github: https://github.com/SonicCloudOrg
Testhome:https://testerhome.com/opensource_projects/sonic

架构介绍:http://testerhome.com/opensource_projects/sonic

硬件环境主要就是手机和Linux服务器一台(CentOS或Ubuntu均可,以下部署以CentOS系统为例),这个没什么好说的,主要说一下软件环境,Linux需安装:
docker run -it -d -e MYSQL_ROOT_PASSWORD=123456 --name=mymysql -p 3307:3306 mysql
部署文档:https://sonic-cloud.gitee.io/#/Deploy
wget https://github.com/SonicCloudOrg/sonic-server-simple/archive/refs/tags/v1.3.2-release.tar.gz # 下载压缩包
tar -zxvf v1.3.2-release.tar.gz # 解压后会得到docker-compose.yml LICENSE pom.xml README_CN.md README.md srcvi docker-compose.yml,可以对照如下内容进行修改:
version: '3'
services:
sonic-server-simple:
image: "sonicorg/sonic-server-simple:v1.3.2-release"
environment:
# 以下为MySql配置,localhost请替换为自己MySql服务的ipv4地址
- MYSQL_HOST=192.168.1.122 # MySQL主机地址
- MYSQL_PORT=3308 # MySQL端口号
- MYSQL_DATABASE=sonic # MySQL为sonic单独创建一个数据库-sonic
- MYSQL_USERNAME=root # MySQL登录用户名
- MYSQL_PASSWORD=123456 # MySQL登录密码
# 在服务器部署的话,localhost改为服务器ip
# port更改为sonic-server-simple暴露的port(一般不变)
- SONIC_API_HOST=192.168.1.122
- SONIC_API_PORT=8094
- SONIC_NETTY_PORT=8095
# token加密的key值
- SECRET_KEY=sonic
# 身份验证token有效天数
- EXPIRE_DAY=150
# 前端页面访问地址,不填默认为http://localhost:3000
- CLIENT_HOST=http://192.168.1.122: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.1.122
- SONIC_API_PORT=8094
networks:
- sonic-network
# 端口映射
ports:
- "3000:80"
volumes:
files:
networks:
sonic-network:
driver: bridgedocker-compose up -d执行上述命令会按照先后顺序自动执行以下过程:

通过上图可以看出sonic自动创建了两个容器:
前台访问地址:http://192.168.1.122:3000/

填写项目信息

填写agent名称即可自动创建agent,下图为agent详情,记住AgentKey,后续部署sonic agent的时候会用到

wget https://github.com/SonicCloudOrg/sonic-agent/releases/download/v1.3.2-release/docker-compose.yml编译sonic-agent的配置文件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.1.122
# 替换为Agent服务的端口,可以自行更改
- AGENT_PORT=7777
# 替换为前面新增Agent生成的key
- AGENT_KEY=828aa5a4-ce30-4ebb-9f9b-5a01bbe5ea5e
# 后端的host
- SERVER_HOST=192.168.1.122
# 这个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/usbmuxddocker-compose up -d同前面部署sonic一样,执行上述命令部署agent,会按照先后顺序自动执行以下过程:
docker ps -a | grep sonic
通过上图可以看出:
以Android设备为例,Android设备需开启USB调试权限,并在插入服务器主机后、手机页面弹出的“是否允许USB调试本台设备”的选项中选择“是”。
接入设备后的页面:

首次进入设备会初始化设备连接,可能需要等待几秒。

同Windows电脑本地连接Android一样,Windows也可以通过adb远程连接sonic上的设备(进入设备页面,远程ADB窗口会显示一串连接命令“adb connect 192.168.1.122:37345”)。连接完adb后,就可以当做本地设备进行自动化测试等操作了。
adb connect 192.168.1.122:37345
总体来说,部署过程比较流畅,除了sib工具、 iOS配置WebDrierAgent由于资源限制,暂未尝试外,其他没有遇到什么卡住的点,对于初学者来说,需要:
无论是界面体验、流畅度、还是UI自动化测试功能,都非常不错,粉丝群内对于反馈的问题也能及时指导解决,唯一美中不足之处就是:

