Sonic 开源云真机测试平台开源啦! - 设计思路与背景(一)

前言

恭喜Sonic云真机测试平台在2021-10-16正式发布v1.0.0-release啦!

screenshot-20211019-100655.png

通过长时间的爆肝,Sonic迎来了第一个版本!

官网地址

github链接

v1.0.0功能列表
  • 支持安卓、iOS设备(iOS开发完成,正在测试中,下个版本正式发布)
  • 支持Linux、Windows、Mac部署(支持全Docker部署)
  • 0编码执行UI自动化测试,解放双手,简单维护!
  • 友好的UI交互,一键远控
  • 一键任务下发,全球设备执行测试
  • 一键获取设备控件树,马上保存,马上使用
  • 维护简单便捷,随意拖拽
  • 保存公共步骤,自定义前后置操作
  • 多种图像识别技术保驾护航,为您解决UI自动化烦恼
  • 自研随机事件算法(类monkey),UI遍历算法(Doing)更可控,更稳定
  • 测试结果友好展示,测试截图,日志,录像全方位展示
  • 对接钉钉、飞书、企业微信机器人,推进结果导向
  • 对接CICD流程,批量更新测试包
  • 周边生态逐渐建设,目前有安卓自动输密码插件服务

部分截图

微信图片_20211018173711.png
banner2.png

背景

什么是Sonic?

如今,自动化测试、远程控制等技术已经逐渐成熟。其中 Appium 在自动化领域可以说是领头者,STF 则是远程控制的始祖。很久前就开始有了一个想法,是否可以在一个平台上,提供解决所有客户端(Android、iOS、Windows、Mac、Web应用)的测试方案,于是,Sonic云真机测试平台由此诞生。

愿景

Sonic当前的愿景是能帮助中小型企业解决在客户端自动化或远控方面缺少工具和测试手段的问题。
如果你想参与其中,欢迎加入!💪
如果你想支持,可以给我一个star。⭐
如果你想使用Sonic平台,可以加群咨询相关内容

技术选型

基础通信架构

link.jpg

通过架构图可以看到,用户可以通过Sonic平台,轻松访问跨网段的Agent下的设备,执行远控或测试,如果公司资金充足的情况下,全球分布多个机房是ok的,这样可以满足部分公司有海外业务测试的需求。

后端

为了应付中小企业有可能扩大使用的场景,后端选用了Springcloud作为分布式集群基础,使用了redis、rabbitmq、mysql作为中间件。

架构图

screenshot-20211019-102316.png

上图忽略了部分线,不然看起来太乱了。

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.png

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 端再单独部署,部署了这个,可以跳过下方的前后端部署)

以前部署过的先清空数据库

  1. 随便找个目录,新建 docker-compose.yml 文件
  2. 复制好 这个项目 的 docker-compose.yml 的内容,并修改 mysql、redis、mq 相关信息
  3. docker-compose pull
  4. docker-compose up -d
  5. 完成

sonic-server后端

大家可以直接去开源项目链接,拷贝docker-compose文件
Windows、Linux或Mac都一样,下面Windows举例:
准备:Docker环境、docker-compose

  1. 在D盘新建sonic文件夹
  2. 创建logs、keepFiles、imageFiles、recordFiles文件夹
  3. 这里将示例的配置文件拉到本地,这里为止,你的项目目录应该是这样的
files.png
  1. 进入config文件夹,修改jdbc-prod.yml的mysql配置(host,账密、数据库名)
  2. 修改redis-prod.yml的redis配置(host,数据库)
  3. 修改rabbitmq.yml的配置(host,账密,vhost)
  4. 返回上一级目录
  5. 新建docker-compose.yml文件,文件内容复制这里
  6. 当前目录(sonic/) 下执行
docker-compose pull

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

docker-compose up -d
  1. 首次启动只有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.png

记住下面的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
  1. 在D盘新建sonic-agent文件夹
  2. 去这里 拉下项目,将mini、language、chromeDriver三个文件夹复制到第二步的文件夹内
  3. 去这里 找到符合你部署平台的jar包下载,然后复制到第二步的文件夹内,此时,你的文件夹应该是这样的
sonic-agent-compose.png

5、在当前目录执行

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

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

安卓插件(可选)

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

phone.png

至此,所有部署完毕了

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容