前言

Sonic是一款开源、支持分布式部署、在线自动化测试的私有云真机平台。想着写一篇总结分享。

一、云真机平台

1.云真机平台对比

目前市面上常见的云真机平台有两种,一种是各大服务商如阿里、腾讯、百度推出的公共云真机平台,如:WeTest、EMAS,除了收费高点其他好像没什么缺点;一种是网上各种开源云真机平台,支持私有化部署,如:Sonic、STF,这类平台的特点是免费、支持二次开发,缺点是功能支持相对薄弱(如自动化、性能)、真机采购成本高(当然,这并不是平台的缺点,如果你司有足够的测试机资源的话,而且也不是每个企业都有全面的兼容性测试需求,你也可以选择接入少量真机)。

2.云真机平台能够解决的问题

  • 兼容性测试:需接入一定数量、具有代表性的测试机资源;
  • 自动化测试:平台本身自带自动化测试能力,也可以自己写代码、连接真机运行测试;
  • 测试机资源紧张:云真机平台都秉承着用完即走的设计理念,因此使用完退出后,下一个登录用户可以接着使用,一定程度上能够解决研发团队内测试机资源紧张的问题;
  • 远程演示:如验收测试或是客户演示过程中,手机和电脑无法实时投屏在同一个显示器或电视等外接设备,这是只需要在已投屏的电脑上登录远程真机地址即可实时访问,方便同步观看;
  • 测试数据共享不便问题:测试过程中,有时需要在一个历史版本上验证回溯问题,云真机可以安装历史版本的APP,并提前预置好测试数据,以便共享使用;

二、sonic介绍

1.关于Sonic

Sonic,一站式开源分布式集群云真机测试平台,致力服务于中小企业的客户端UI测试。 Sonic当前的愿景是能帮助中小型企业解决在客户端自动化或远控方面缺少工具和测试手段的问题。

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

  • github: https://github.com/SonicCloudOrg

  • Testhome:https://testerhome.com/opensource_projects/sonic

2.功能特性

3.Sonic架构

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

三、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.下载依赖文件

  • 部署文档: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  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 ? * Monnetworks:- 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=8094networks:- sonic-network# 端口映射ports:- "3000:80"volumes:files:networks:sonic-network:driver: bridge

4.启动容器

docker-compose up -d

执行上述命令会按照先后顺序自动执行以下过程:

  1. 先拉取镜像
  2. 创建容器
  3. 启动容器


通过上图可以看出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=0network_mode: "host"privileged: true# 数据卷volumes:- /dev/bus/usb:/dev/bus/usb- /var/run/usbmuxd:/var/run/usbmuxd

3.启动容器

docker-compose up -d

同前面部署sonic一样,执行上述命令部署agent,会按照先后顺序自动执行以下过程:

  1. 先拉取镜像
  2. 创建容器
  3. 启动容器

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时有反应,随后报错,关闭纯净模式仍存在);

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

开源云真机平台——Sonic应用实践相关推荐

  1. stf、atx、sonic云真机平台使用与对比

    stf STF是一个可以通过网页管理和使用移动设备的平台,支持远程调试.远程使用手机浏览器打开链接.远程执行shell脚本.远程拖拽安装App.远程查看日志.远程截屏等功能 Ubuntu安装服务端,要 ...

  2. Sonic 云真机平台部署经验

    工作中遇到了这样的场景,一名测试人员需要对多台移动设备进行回归测试,如何提高测试效率呢? 那肯定离不开自动化啦,那有没有现成的开源工具可以支持移动端的自动化呢? 有,sonic! 下面阿常就来和大家分 ...

  3. 美团点评云真机平台实践

    背景 随着美团点评业务越来越多,研发团队越来越庞大,对测试手机的需求显著增长.这对公司来说是一笔不小的开支,但现有测试手机资源分配不均,利用率也非常有限,导致各个团队开发.测试过程中都很难做到多机型覆 ...

  4. 【云真机平台】稳定性测试方案

    使用开源UI自动化平台DaXiang 中云真机模块二次开发搭建云真机管理平台 随着用户的增加和深度使用,需要确保平台的使用稳定性,故针对云真机平台设计稳定性测试方案测试并进行针对性优化 一.连接稳定性 ...

  5. 【云真机平台】稳定性测试自动化脚本

    前面文章中针对云真机平台稳定性设计了[云真机平台]平台稳定性测试方案,接下来实现具体的脚本进行稳定性测试 一.selenium IDE录制 许久没有写UI自动化,倍感陌生哈哈,那么使用selenium ...

  6. sonic私有云真机平台搭建记录

    建立MySQL数据库(库名为sonic),字符集为utf8,排序规则为utf8_general_ci,并设置root访问host为% 在官方地址下载源包: https://sonic-cloud.gi ...

  7. 如何用Sonic云真机打王者

    使用Sonic进行跨网段部署,助力海外业务的公司进行专项检测.提供定时任务充分利用无人值守时间回归UI测试,省时省力.自研随机事件测试与UI遍历测试,支持打通Jenkins的DevOps流程,Soni ...

  8. Sonic--开源云真机测试平台

    读者提问: 开源云真机测试平台有推荐的吗 ? 阿常回答: 有,Sonic. 官网地址:https://sonic-cloud.gitee.io/#/Home Github地址:https://gith ...

  9. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

最新文章

  1. CentOS 快速安装pip
  2. 基于SLF4J MDC机制实现日志的链路追踪
  3. mysql密码高级_mysql高级操作
  4. 如何查看spark消耗的内存_Spark优化(三)----数据本地化及内存调优
  5. 深度学习准备「爆破」著名的欧拉方程
  6. php mkdir用户,PHP mkdir()无写权限的问题解决方法
  7. logon oracle 密码 用户名_PLSQL自动登录,记住用户名密码日常使用技巧
  8. 数据库开发这点事 中文PDF下载
  9. mysql 5.7日志的种类_MySQL中的六种日志类型的介绍
  10. ASP.NET:判断session是否合法示例
  11. java filewriter写入文件_Java中的写入字符文件类FileWriter
  12. 新手降NAT网络第十步曲,小编提供思路。
  13. java实现5 4 3 2 1递归_递归及递归的使用
  14. php影院影城源码,99影院源码 影视网站程序源码/附教程
  15. 刘晓艳老师的考研单词记忆
  16. u)dym)l$_@3*0y3u_pvy@34ky1co1j$lfd1wp-w*8x%30@f7t$
  17. python立方根求解_python 二分查找(立方根)
  18. 「ASO优化服务」APP如何做数据分析
  19. 一份完整的SEO方案包含哪些内容
  20. 姜永靖:“垂直领域精耕”凭什么是大数据公司发展的未来

热门文章

  1. Python修改图片格式以及相对应labelme标注的Json文件
  2. xmpp java websocket_Websocket整合登录XMPP的思考
  3. 电脑adb驱动安装成功但识别不了adb设备
  4. 51nod 2206 低买高卖codeforces867E Buy Low Sell High 贪心+优先队列
  5. 视频教程-python项目之学员CRM管理系统开发阶段一-Python
  6. 合阳中学2021高考成绩查询,合阳县2018年合阳中学、路井中学、黑池中学高考战况...
  7. android gridview居中,Android中GridView布局实现整体居中方法示例
  8. 吃转基因有害?科普这么多年咋还有人信!
  9. 在excel内处理二进制和十六进制数据
  10. (类簇)NSString,NSArray,NSNumber等类的继承问题