前言
恭喜Sonic云真机测试平台在2021-10-16正式发布v1.0.0-release啦!
通过长时间的爆肝,Sonic迎来了第一个版本!
官网地址
github链接
v1.0.0功能列表
- 支持安卓、iOS设备(iOS开发完成,正在测试中,下个版本正式发布)
- 支持Linux、Windows、Mac部署(支持全Docker部署)
- 0编码执行UI自动化测试,解放双手,简单维护!
- 友好的UI交互,一键远控
- 一键任务下发,全球设备执行测试
- 一键获取设备控件树,马上保存,马上使用
- 维护简单便捷,随意拖拽
- 保存公共步骤,自定义前后置操作
- 多种图像识别技术保驾护航,为您解决UI自动化烦恼
- 自研随机事件算法(类monkey),UI遍历算法(Doing)更可控,更稳定
- 测试结果友好展示,测试截图,日志,录像全方位展示
- 对接钉钉、飞书、企业微信机器人,推进结果导向
- 对接CICD流程,批量更新测试包
- 周边生态逐渐建设,目前有安卓自动输密码插件服务
部分截图
背景
什么是Sonic?
如今,自动化测试、远程控制等技术已经逐渐成熟。其中 Appium 在自动化领域可以说是领头者,STF 则是远程控制的始祖。很久前就开始有了一个想法,是否可以在一个平台上,提供解决所有客户端(Android、iOS、Windows、Mac、Web应用)的测试方案,于是,Sonic云真机测试平台由此诞生。
愿景
Sonic当前的愿景是能帮助中小型企业解决在客户端自动化或远控方面缺少工具和测试手段的问题。
如果你想参与其中,欢迎加入!
如果你想支持,可以给我一个star。⭐
如果你想使用Sonic平台,可以加群咨询相关内容
技术选型
基础通信架构
通过架构图可以看到,用户可以通过Sonic平台,轻松访问跨网段的Agent下的设备,执行远控或测试,如果公司资金充足的情况下,全球分布多个机房是ok的,这样可以满足部分公司有海外业务测试的需求。
后端
为了应付中小企业有可能扩大使用的场景,后端选用了Springcloud作为分布式集群基础,使用了redis、rabbitmq、mysql作为中间件。
架构图
上图忽略了部分线,不然看起来太乱了。
Sonic后端是怎么组成去中心化分布式集群的
所用框架比较多,不一一列举了。
- sonic-server-eureka:集群的注册中心,用于服务发现与注册。分布式必备(如果公司已经有搭建了,可以url填写公司内部的,这样可以少起一个服务,少占用资源)
- sonic-server-controller:sonic-server主体,大部分crud操作都在这里。
- sonic-server-bus:配置中心+消息巴士,可以理解为迷你版阿波罗配置中心,集群所有核心配置都在这里。可以用本地文件夹和git仓库的方式管理。
- sonic-server-folder:文件存储服务,包含录像切片与合并(当然公司内部有文件存储服务,也可以不需要启动这个,但是其他folder的配置url记得更改哦)
- sonic-server-gateway:微服务网关,负责反向代理与接口请求拦截,也聚合了微服务的接口文档。
- sonic-server-transport:转运者,负责消费来自rabbitMQ的消息,处理Agent的所有消息,同时也负责发送设备测试任务等等。
- sonic-server-task:定时任务中心,通过Quartz作为分布式定时任务基础,负责分发测试任务以及定期清理测试结果、测试文件、发送周报、日报等等。
前端
Vue推出3.0版本啦!Element也随之推出Element-plus,我怎么能放过呢?马上使用起来!
- Vue 3.2.14 (前端基础框架)
- element-plus 1.1.0-beta.20 (UI框架)
- echarts 5.2.1 (百度echarts图表)
- vue-router 4.0.10 (vue3全家桶)
- vuex 4.0.2 (vue3全家桶)
- axios 0.21.4 (接口请求ajax框架)
- vue-clipboard3 1.0.1 (复制粘贴组件)
- vue-draggable-next 2.0.1 (拖拽组件)
在我这边,用户的交互与体验大于一切,因此我会花比较多时间在前端的UI与交互的打磨,前端会持续更新以及听取大家的建议(当然功能也很重要,但是前端的功能与Bug会优先处理)
Agent端
从基础通信架构图我们得知,所有Agent端都是需要跟sonic-server通信的,往下是跟连接的设备进行通信的。所以Agent端可以说是执行机。
架构图
Agent通过图中的方式与设备进行交互,同时自身加入了图像算法与webSocket服务。
- springboot WebSocket (WebSocket基础)
- ddmlib (ADB通信)
- amqp (MQ通信)
- appium java client (Appium交互)
- thumbnailator (图片压缩)
- testNG (测试框架与断言)
- jsoup (解析xml)
- javacv (图像算法基础)
- opencv (图像算法核心)
- tesseract (图片文字识别)
- leptonica (图像算法)
- openblas (图像算法)
部署
过去,我们部署UI自动化是一件非常困难的事情,现在,sonic平台整套都可以使用Docker一键部署!
先看这里(包括前后端的单机部署方式,Agent 端再单独部署,部署了这个,可以跳过下方的前后端部署)
以前部署过的先清空数据库
- 随便找个目录,新建 docker-compose.yml 文件
- 复制好 这个项目 的 docker-compose.yml 的内容,并修改 mysql、redis、mq 相关信息
- docker-compose pull
- docker-compose up -d
- 完成
sonic-server后端
大家可以直接去开源项目链接,拷贝docker-compose文件
Windows、Linux或Mac都一样,下面Windows举例:
准备:Docker环境、docker-compose
- 在D盘新建sonic文件夹
- 创建logs、keepFiles、imageFiles、recordFiles文件夹
- 从这里将示例的配置文件拉到本地,这里为止,你的项目目录应该是这样的
- 进入config文件夹,修改jdbc-prod.yml的mysql配置(host,账密、数据库名)
- 修改redis-prod.yml的redis配置(host,数据库)
- 修改rabbitmq.yml的配置(host,账密,vhost)
- 返回上一级目录
- 新建docker-compose.yml文件,文件内容复制这里的
- 在 当前目录(sonic/) 下执行
docker-compose pull
检查镜像都下载好了,就可以执行
docker-compose up -d
- 首次启动只有eureka或bus启动完成,大概一分钟后再次执行步骤8的指令就可以了,启动完后因为eureka的机制,服务发现需要一段时间,大概五分钟后就能互相发现服务了,未启动完接口我做了熔断机制,可以不用太担心。
sonic-client-web前端
前端非常简单,可以Docker的方式部署(但不推荐)
docker pull zhouyixun/sonic-client-web
docker run --name sonic-client-web -d -p 3000:80 zhouyixun/sonic-client-web:latest
如果sonic-server已经部署好了,那么访问localhost:3000就可以看到前端页面了。(不推荐Docker部署是因为镜像包含nginx服务在里面,如果公司内部已经有nginx服务,那么推荐您使用以下方式)
dist方式
1、去这里将前端项目clone下来
2、执行
npm install
npm run build
3、打包完毕后会生成一个dist文件夹,将dist文件夹丢到nginx的目录就可以啦,一般可以给运维或者开发小哥处理,nginx的配置也可以在项目根目录的xginx.conf有示例
4、如果你希望自己打包一个镜像,可以将Dockerfile和nginx.conf文件复制到dist目录下,执行
docker build -t 镜像名 .
记得最后面有个.
然后再用Docker的方式运行即可。
提示 一般后端api暴露在8094端口,如果前端想更改,在src/http/axios.js更改baseUrl即可
sonic-agent Agent端
部署前,需要前去前端页面【设备中心】的【Agent中心】添加Agent。
记住下面的AgentKey,后续部署会使用到。
Docker部署(仅适用于Linux和Mac)
点击这里查看Docker部署方式
注意 因为测试设备有限,Docker版没有经过完全测试,出现Bug的话大家记得提Bug
直接部署
Windows、Linux或Mac都一样,下面Windows举例:
- 环境准备:
- npm和node环境
- AppiumServer(使用npm安装,不用安装appium桌面版)
- 安卓SDK,并设置环境变量ANDROID_HOME,并且子目录的platform-tools也需要,确保目录下有adb
- java环境,并设置环境变量JAVA_HOME
- 在D盘新建sonic-agent文件夹
- 去这里 拉下项目,将mini、language、chromeDriver三个文件夹复制到第二步的文件夹内
- 去这里 找到符合你部署平台的jar包下载,然后复制到第二步的文件夹内,此时,你的文件夹应该是这样的
5、在当前目录执行
java -jar -D{变量1} -D{变量2} sonic-agent-windows-x86_64.jar
需要什么变量 点击这里 查看,SONIC_AGENT_KEY就是部署前在前端生成的key,填入即可。局域网部署的话,SONIC_AGENT_HOST记得修改为内网ipv4地址。
安卓插件(可选)
因为国内部分厂商安装apk时,需要输入密码,因此我这边做了一个安卓服务,需要输入密码时会自动输入前端设置的密码。
点击这里 下载安装即可,然后在辅助功能开启,不杀掉就行,如果您发现您的系统不可用,欢迎反馈
至此,所有部署完毕了
下一篇,介绍主要功能与实现方案
欢迎大家进群讨论,但是记得小小支持,star一下哦,这将是我前进的动力