本文已参加「新人创作礼」活动,一同敞开创作之路。
前言
Sonic是一款开源、支撑分布式布置、在线主动化测验的私有云真机渠道。偶然接触到这个渠道是源于虫师的一篇公众号文章,所以结合文章内容和官网测验建立了一套,并试用了一番,直到现在也一直在用。后来连续也加了作者的微信号、粉丝群,关于布置和运用进程中的一些问题和主张,作者和粉丝群中的小伙伴都能及时给予解答,全体体会很不错,遂决议写一篇总结分享。
一、云真机渠道
1.云真机渠道对比
现在市面上常见的云真机渠道有两种,一种是各大服务商如阿里、腾讯、百度推出的公共云真机渠道,如:WeTest、EMAS,除了收费高点其他好像没什么缺点;一种是网上各种开源云真机渠道,支撑私有化布置,如:Sonic、STF,这类渠道的特色是免费、支撑二次开发,缺点是功用支撑相对薄弱(如主动化、功用)、真机采购本钱高(当然,这并不是渠道的缺点,假如你司有足够的测验机资源的话,而且也不是每个企业都有全面的兼容性测验需求,你也能够选择接入少数真机)。
**** | 公共 | 私有 |
---|---|---|
渠道 | testin云测、Testbird、腾讯的WeTest、优测、阿里的EMAS、百度MTC | Sonic、ATX-Server2、STF |
特色 | 面向各大企业或个人 | 私有化布置、面向企业内部 |
优点 | 机型掩盖全,功用丰厚,如:APP功用监控、主动化测验 | 开源、免费 |
缺点 | 收费高 | 自建本钱高,尤其是真机采购费用 |
2.云真机渠道能够处理的问题
- 兼容性测验:需接入必定数量、具有代表性的测验机资源;
- 主动化测验:渠道本身自带主动化测验能力,也能够自己写代码、衔接真机运转测验;
- 测验机资源严重:云真机渠道都秉承着用完即走的设计理念,因而运用完退出后,下一个登录用户能够接着运用,必定程度上能够处理研发团队内测验机资源严重的问题;
- 长途演示:如检验测验或是客户演示进程中,手机和电脑无法实时投屏在同一个显现器或电视等外接设备,这是只需求在已投屏的电脑上登录长途真机地址即可实时拜访,便利同步观看;
- 测验数据同享不便问题:测验进程中,有时需求在一个前史版别上验证回溯问题,云真机能够装置前史版别的APP,并提早预置好测验数据,以便同享运用;
二、sonic介绍
1.关于Sonic
Sonic,一站式开源分布式集群云真机测验渠道,努力服务于中小企业的客户端UI测验。 Sonic当时的愿景是能协助中小型企业处理在客户端主动化或远控方面短少东西和测验手段的问题。
官网:sonic-cloud.gitee.io/#/Home
github: github.com/SonicCloudO…Testhome:testerhome.com/opensource_…
2.功用特性
3.Sonic架构
架构介绍:testerhome.com/opensource_…
三、Sonic环境建立(docker-compose)
1.前置环境预备
硬件环境首要便是手机和Linux服务器一台(CentOS或Ubuntu均可,以下布置以CentOS体系为例),这个没什么好说的,首要说一下软件环境,Linux需装置:
- Docker、docker-compose:网上有很多教程,能够自行查找装置,在此不过多赘述;
- MySQL:能够接入现有的同一内网环境下的MySQL,也能够运用Docker快速装置布置:
docker run -it -d -e MYSQL_ROOT_PASSWORD=123456 --name=mymysql -p 3307:3306 mysql
- ADB环境:ADB即Android调试桥,是接入Android设备的条件,建立进程能够参照《如安在Linux快速建立一套ADB环境》;
- Python环境:可选,首要为了便利主动化测验代码也能够运转在Linux本地,建立进程能够参照《Linux下一键装置Python3&更改镜像源&虚拟环境管理技巧》;
2.下载依靠文件
布置文档: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 src
3.修正装备文件
vi 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: bridge
4.发动容器
docker-compose up -d
履行上述指令会依照先后顺序主动履行以下进程:
- 先拉取镜像
- 创立容器
- 发动容器
经过上图能够看出sonic主动创立了两个容器:
- sonic-server-simple-132-release_sonic-client-web_1:前端相关容器
- sonic-server-simple-132-release_sonic-server-simple_1:服务端相关容器
四、创立Sonic项目
1.注册账号
前台拜访地址:http://192.168.1.122:3000/
2.创立项目
填写项目信息
3.创立agent
填写agent称号即可主动创立agent,下图为agent概况,记住AgentKey,后续布置sonic agent的时候会用到
五、布置Agent
1.下载agent相关资源
wget https://github.com/SonicCloudOrg/sonic-agent/releases/download/v1.3.2-release/docker-compose.yml
2.修正装备文件
编译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/usbmuxd
3.发动容器
docker-compose up -d
同前面布置sonic一样,履行上述指令布置agent,会依照先后顺序主动履行以下进程:
- 先拉取镜像
- 创立容器
- 发动容器
4.检查容器相关信息
docker ps -a | grep sonic
经过上图能够看出:
- sonic总共3个相关容器,分别为agent相关容器、前端相关容器、服务端相关容器;
- 前端拜访的80端口被映射到了3000端口,与docker-compose.yml中装备的共同;
- 后端服务相关的8094、8095分别映射8094、8095,与docker-compose.yml中装备的共同;
六、Sonic运用
1.接入设备
以Android设备为例,Android设备需敞开USB调试权限,并在插入服务器主机后、手机页面弹出的“是否允许USB调试本台设备”的选项中选择“是”。
接入设备后的页面:
2.运用设备
初次进入设备体系会初始化设备衔接,可能需求等候几秒。
3.衔接adb
同Windows电脑本地衔接Android一样,Windows也能够经过adb长途衔接sonic上的设备(进入设备页面,长途ADB窗口会显现一串衔接指令“adb connect 192.168.1.122:37345”)。衔接完adb后,就能够当做本地设备进行主动化测验等操作了。
adb connect 192.168.1.122:37345
4.主动化测验作用
小结
1.布置感触
总体来说,布置进程比较流畅,除了sib东西、iOS装备WebDrierAgent由于资源约束,暂未测验外,其他没有遇到什么卡住的点,关于初学者来说,需求:
- 娴熟运用Linux常用操作指令;
- docker相关知识、docker-compose文件定义标准等;
- MySQL相关技能,如创立用户、创立数据库、用户赋予数据库权限等,当然也能够借助东西实现;
2.运用感触
无论是界面体会、流畅度、还是UI主动化测验功用,都十分不错,粉丝群内关于反馈的问题也能及时指导处理,唯一美中不足之处便是:
- 手机屏幕展示框初次未自适应显现,需求左右拖动屏幕右侧框条才能看到整个屏幕,也能够经过放大浏览器页面比例来到达检查整个手机屏幕的意图,但此刻,其他区域也相同会被放大;
3.避坑攻略
- 推荐运用Chrome浏览器,切勿运用火狐浏览器;
- 需在手机体系设置-输入法设置中,封闭安全键盘,否则会在调起键盘、输入字符时黑屏或无法输入;
- 假如进入手机页面,显现预备图画中,但手机端没装置sonic助手之类的APP,能够测验重启agent容器、再从头插拔手机;
- 假如是小米手机衔接,需求封闭MIUI优化;
- 现在在长途衔接鸿蒙体系设备、履行uiautomator2主动化脚本进程中会报错“GatewayError”(刚开始初始化设备衔接、发动APP时有反应,随后报错,封闭纯净形式仍存在);