Sonic 開源云真機(jī)測試平臺(tái)開源啦! - 設(shè)計(jì)思路與背景(一)

前言

恭喜Sonic云真機(jī)測試平臺(tái)在2021-10-16正式發(fā)布v1.0.0-release啦!

screenshot-20211019-100655.png

通過長時(shí)間的爆肝,Sonic迎來了第一個(gè)版本!

官網(wǎng)地址

github鏈接

v1.0.0功能列表
  • 支持安卓、iOS設(shè)備(iOS開發(fā)完成,正在測試中,下個(gè)版本正式發(fā)布)
  • 支持Linux、Windows、Mac部署(支持全Docker部署)
  • 0編碼執(zhí)行UI自動(dòng)化測試,解放雙手,簡單維護(hù)!
  • 友好的UI交互,一鍵遠(yuǎn)控
  • 一鍵任務(wù)下發(fā),全球設(shè)備執(zhí)行測試
  • 一鍵獲取設(shè)備控件樹,馬上保存,馬上使用
  • 維護(hù)簡單便捷,隨意拖拽
  • 保存公共步驟,自定義前后置操作
  • 多種圖像識(shí)別技術(shù)保駕護(hù)航,為您解決UI自動(dòng)化煩惱
  • 自研隨機(jī)事件算法(類monkey),UI遍歷算法(Doing)更可控,更穩(wěn)定
  • 測試結(jié)果友好展示,測試截圖,日志,錄像全方位展示
  • 對接釘釘、飛書、企業(yè)微信機(jī)器人,推進(jìn)結(jié)果導(dǎo)向
  • 對接CICD流程,批量更新測試包
  • 周邊生態(tài)逐漸建設(shè),目前有安卓自動(dòng)輸密碼插件服務(wù)

部分截圖

微信圖片_20211018173711.png
banner2.png

背景

什么是Sonic?

如今,自動(dòng)化測試、遠(yuǎn)程控制等技術(shù)已經(jīng)逐漸成熟。其中 Appium 在自動(dòng)化領(lǐng)域可以說是領(lǐng)頭者,STF 則是遠(yuǎn)程控制的始祖。很久前就開始有了一個(gè)想法,是否可以在一個(gè)平臺(tái)上,提供解決所有客戶端(Android、iOS、Windows、Mac、Web應(yīng)用)的測試方案,于是,Sonic云真機(jī)測試平臺(tái)由此誕生。

愿景

Sonic當(dāng)前的愿景是能幫助中小型企業(yè)解決在客戶端自動(dòng)化或遠(yuǎn)控方面缺少工具和測試手段的問題。
如果你想?yún)⑴c其中,歡迎加入!??
如果你想支持,可以給我一個(gè)star。?
如果你想使用Sonic平臺(tái),可以加群咨詢相關(guān)內(nèi)容

技術(shù)選型

基礎(chǔ)通信架構(gòu)

link.jpg

通過架構(gòu)圖可以看到,用戶可以通過Sonic平臺(tái),輕松訪問跨網(wǎng)段的Agent下的設(shè)備,執(zhí)行遠(yuǎn)控或測試,如果公司資金充足的情況下,全球分布多個(gè)機(jī)房是ok的,這樣可以滿足部分公司有海外業(yè)務(wù)測試的需求。

后端

為了應(yīng)付中小企業(yè)有可能擴(kuò)大使用的場景,后端選用了Springcloud作為分布式集群基礎(chǔ),使用了redis、rabbitmq、mysql作為中間件。

架構(gòu)圖

screenshot-20211019-102316.png

上圖忽略了部分線,不然看起來太亂了。

Sonic后端是怎么組成去中心化分布式集群的

所用框架比較多,不一一列舉了。

  • sonic-server-eureka:集群的注冊中心,用于服務(wù)發(fā)現(xiàn)與注冊。分布式必備(如果公司已經(jīng)有搭建了,可以url填寫公司內(nèi)部的,這樣可以少起一個(gè)服務(wù),少占用資源)
  • sonic-server-controller:sonic-server主體,大部分crud操作都在這里。
  • sonic-server-bus:配置中心+消息巴士,可以理解為迷你版阿波羅配置中心,集群所有核心配置都在這里??梢杂帽镜匚募A和git倉庫的方式管理。
  • sonic-server-folder:文件存儲(chǔ)服務(wù),包含錄像切片與合并(當(dāng)然公司內(nèi)部有文件存儲(chǔ)服務(wù),也可以不需要啟動(dòng)這個(gè),但是其他folder的配置url記得更改哦)
  • sonic-server-gateway:微服務(wù)網(wǎng)關(guān),負(fù)責(zé)反向代理與接口請求攔截,也聚合了微服務(wù)的接口文檔。
  • sonic-server-transport:轉(zhuǎn)運(yùn)者,負(fù)責(zé)消費(fèi)來自rabbitMQ的消息,處理Agent的所有消息,同時(shí)也負(fù)責(zé)發(fā)送設(shè)備測試任務(wù)等等。
  • sonic-server-task:定時(shí)任務(wù)中心,通過Quartz作為分布式定時(shí)任務(wù)基礎(chǔ),負(fù)責(zé)分發(fā)測試任務(wù)以及定期清理測試結(jié)果、測試文件、發(fā)送周報(bào)、日報(bào)等等。

前端

Vue推出3.0版本啦!Element也隨之推出Element-plus,我怎么能放過呢?馬上使用起來!

  • Vue 3.2.14 (前端基礎(chǔ)框架)
  • 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 (復(fù)制粘貼組件)
  • vue-draggable-next 2.0.1 (拖拽組件)

在我這邊,用戶的交互與體驗(yàn)大于一切,因此我會(huì)花比較多時(shí)間在前端的UI與交互的打磨,前端會(huì)持續(xù)更新以及聽取大家的建議(當(dāng)然功能也很重要,但是前端的功能與Bug會(huì)優(yōu)先處理)

Agent端

從基礎(chǔ)通信架構(gòu)圖我們得知,所有Agent端都是需要跟sonic-server通信的,往下是跟連接的設(shè)備進(jìn)行通信的。所以Agent端可以說是執(zhí)行機(jī)。

架構(gòu)圖

agent.png

Agent通過圖中的方式與設(shè)備進(jìn)行交互,同時(shí)自身加入了圖像算法與webSocket服務(wù)。

  • springboot WebSocket (WebSocket基礎(chǔ))
  • ddmlib (ADB通信)
  • amqp (MQ通信)
  • appium java client (Appium交互)
  • thumbnailator (圖片壓縮)
  • testNG (測試框架與斷言)
  • jsoup (解析xml)
  • javacv (圖像算法基礎(chǔ))
  • opencv (圖像算法核心)
  • tesseract (圖片文字識(shí)別)
  • leptonica (圖像算法)
  • openblas (圖像算法)

部署

過去,我們部署UI自動(dòng)化是一件非常困難的事情,現(xiàn)在,sonic平臺(tái)整套都可以使用Docker一鍵部署!

先看這里(包括前后端的單機(jī)部署方式,Agent 端再單獨(dú)部署,部署了這個(gè),可以跳過下方的前后端部署)

以前部署過的先清空數(shù)據(jù)庫

  1. 隨便找個(gè)目錄,新建 docker-compose.yml 文件
  2. 復(fù)制好 這個(gè)項(xiàng)目 的 docker-compose.yml 的內(nèi)容,并修改 mysql、redis、mq 相關(guān)信息
  3. docker-compose pull
  4. docker-compose up -d
  5. 完成

sonic-server后端

大家可以直接去開源項(xiàng)目鏈接,拷貝docker-compose文件
Windows、Linux或Mac都一樣,下面Windows舉例:
準(zhǔn)備:Docker環(huán)境、docker-compose

  1. 在D盤新建sonic文件夾
  2. 創(chuàng)建logs、keepFiles、imageFiles、recordFiles文件夾
  3. 這里將示例的配置文件拉到本地,這里為止,你的項(xiàng)目目錄應(yīng)該是這樣的
files.png
  1. 進(jìn)入config文件夾,修改jdbc-prod.yml的mysql配置(host,賬密、數(shù)據(jù)庫名)
  2. 修改redis-prod.yml的redis配置(host,數(shù)據(jù)庫)
  3. 修改rabbitmq.yml的配置(host,賬密,vhost)
  4. 返回上一級(jí)目錄
  5. 新建docker-compose.yml文件,文件內(nèi)容復(fù)制這里
  6. 當(dāng)前目錄(sonic/) 下執(zhí)行
docker-compose pull

檢查鏡像都下載好了,就可以執(zhí)行

docker-compose up -d
  1. 首次啟動(dòng)只有eureka或bus啟動(dòng)完成,大概一分鐘后再次執(zhí)行步驟8的指令就可以了,啟動(dòng)完后因?yàn)閑ureka的機(jī)制,服務(wù)發(fā)現(xiàn)需要一段時(shí)間,大概五分鐘后就能互相發(fā)現(xiàn)服務(wù)了,未啟動(dòng)完接口我做了熔斷機(jī)制,可以不用太擔(dān)心。

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已經(jīng)部署好了,那么訪問localhost:3000就可以看到前端頁面了。(不推薦Docker部署是因?yàn)殓R像包含nginx服務(wù)在里面,如果公司內(nèi)部已經(jīng)有nginx服務(wù),那么推薦您使用以下方式)

dist方式

1、去這里將前端項(xiàng)目clone下來
2、執(zhí)行

npm install
npm run build

3、打包完畢后會(huì)生成一個(gè)dist文件夾,將dist文件夾丟到nginx的目錄就可以啦,一般可以給運(yùn)維或者開發(fā)小哥處理,nginx的配置也可以在項(xiàng)目根目錄的xginx.conf有示例
4、如果你希望自己打包一個(gè)鏡像,可以將Dockerfile和nginx.conf文件復(fù)制到dist目錄下,執(zhí)行

docker build -t 鏡像名 .

記得最后面有個(gè).
然后再用Docker的方式運(yùn)行即可。

提示 一般后端api暴露在8094端口,如果前端想更改,在src/http/axios.js更改baseUrl即可

sonic-agent Agent端

部署前,需要前去前端頁面【設(shè)備中心】的【Agent中心】添加Agent。

AgentKey.png

記住下面的AgentKey,后續(xù)部署會(huì)使用到。

Docker部署(僅適用于Linux和Mac)

點(diǎn)擊這里查看Docker部署方式

注意 因?yàn)闇y試設(shè)備有限,Docker版沒有經(jīng)過完全測試,出現(xiàn)Bug的話大家記得提Bug

直接部署

Windows、Linux或Mac都一樣,下面Windows舉例:

  1. 環(huán)境準(zhǔn)備:
  • npm和node環(huán)境
  • AppiumServer(使用npm安裝,不用安裝appium桌面版)
  • 安卓SDK,并設(shè)置環(huán)境變量ANDROID_HOME,并且子目錄的platform-tools也需要,確保目錄下有adb
  • java環(huán)境,并設(shè)置環(huán)境變量JAVA_HOME
  1. 在D盤新建sonic-agent文件夾
  2. 去這里 拉下項(xiàng)目,將mini、language、chromeDriver三個(gè)文件夾復(fù)制到第二步的文件夾內(nèi)
  3. 去這里 找到符合你部署平臺(tái)的jar包下載,然后復(fù)制到第二步的文件夾內(nèi),此時(shí),你的文件夾應(yīng)該是這樣的
sonic-agent-compose.png

5、在當(dāng)前目錄執(zhí)行

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

需要什么變量 點(diǎn)擊這里 查看,SONIC_AGENT_KEY就是部署前在前端生成的key,填入即可。局域網(wǎng)部署的話,SONIC_AGENT_HOST記得修改為內(nèi)網(wǎng)ipv4地址。

安卓插件(可選)

因?yàn)閲鴥?nèi)部分廠商安裝apk時(shí),需要輸入密碼,因此我這邊做了一個(gè)安卓服務(wù),需要輸入密碼時(shí)會(huì)自動(dòng)輸入前端設(shè)置的密碼。
點(diǎn)擊這里 下載安裝即可,然后在輔助功能開啟,不殺掉就行,如果您發(fā)現(xiàn)您的系統(tǒng)不可用,歡迎反饋

phone.png

至此,所有部署完畢了

下一篇,介紹主要功能與實(shí)現(xiàn)方案

歡迎大家進(jìn)群討論,但是記得小小支持,star一下哦,這將是我前進(jìn)的動(dòng)力

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容