Sonic开源云真机测试平台

MIT
java,js
ALL
Eason · 2021年10月19日 · 3322 次阅读 · 9 条评论

前言

恭喜 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 一键部署!

sonic-server 后端

大家可以直接去开源项目链接,拷贝 docker-compose 文件
Windows、Linux 或 Mac 都一样,下面 Windows 举例:
准备:Docker 环境、docker-compose
1、在 D 盘新建 sonic 文件夹
2、创建 logs、keepFiles、imageFiles、recordFiles 文件夹
3、从这里将示例的配置文件拉到本地,这里为止,你的项目目录应该是这样的

4、进入 config 文件夹,修改 jdbc-prod.yml 的 mysql 配置(host,账密、数据库名)
5、修改 redis-prod.yml 的 redis 配置(host,数据库)
6、修改 rabbitmq.yml 的配置(host,账密,vhost)
7、返回上一级目录
8、新建 docker-compose.yml 文件,文件内容复制这里
8、在 当前目录(sonic/)下执行

docker-compose pull

检查镜像都下载好了,就可以执行

docker-compose up -d

9、首次启动只有 eureka 或 bus 启动完成,大概一分钟后再次执行步骤 8 的指令就可以了,启动完后因为 eureka 的机制,服务发现需要一段时间,大概五分钟后就能互相发现服务了,未启动完接口我做了熔断机制,可以不用太担心。

sonic-client-web 前端

前端非常简单,可以 Docker 的方式部署(但不推荐)

docker pull zhouyixun/sonic-client-web
docker run --name sonic-client-web -d -p 3000:80 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 举例:
1、环境准备:

  • npm 和 node 环境
  • AppiumServer(使用 npm 安装,不用安装 appium 桌面版)
  • 安卓 SDK,并设置环境变量 ANDROID_HOME,并且子目录的 platform-tools 也需要,确保目录下有 adb
  • java 环境,并设置环境变量 JAVA_HOME

2、在 D 盘新建 sonic-agent 文件夹
3、去这里 拉下项目,将 mini、language、chromeDriver 三个文件夹复制到第二步的文件夹内
4、去这里 找到符合你部署平台的 jar 包下载,然后复制到第二步的文件夹内,此时,你的文件夹应该是这样的

5、在当前目录执行

java -jar -D{变量1} -D{变量2} sonic-agent-windows-x86_64.jar

需要什么变量 点击这里 查看,SONIC_AGENT_KEY 就是部署前在前端生成的 key,填入即可。局域网部署的话,SONIC_AGENT_HOST 记得修改为内网 ipv4 地址。

安卓插件(可选)

因为国内部分厂商安装 apk 时,需要输入密码,因此我这边做了一个安卓服务,需要输入密码时会自动输入前端设置的密码。
点击这里 下载安装即可,然后在辅助功能开启,不杀掉就行,如果您发现您的系统不可用,欢迎反馈

至此,所有部署完毕了

下一篇,介绍主要功能与实现方案

欢迎大家进群讨论,但是记得小小支持,star 一下哦,这将是我前进的动力
群二维码

个人微信号

评论列表
Eason 发表于 2021年12月01日

这里回不了帖

虫师 发表于 2021年11月30日

请教楼主,是否支持 flutter App?

夏某某 发表于 2021年11月17日

看了一下单机版的代码,不太理解 DAO 层是如何操作数据库的,有没有大佬帮忙解释一下

Lyzin 发表于 2021年11月12日

收藏,学习,想落地

Eason 发表于 2021年10月29日

就是连本地的

孙志强 发表于 2021年10月28日

这个 UI 自动化可以连接本地的手机吗?对本地手机做远程管理吗?

剪烛 发表于 2021年10月20日

学习一下

剪烛 发表于 2021年10月20日

佩服楼主倾注的热情

xuhua 发表于 2021年10月19日

先收藏在学习