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

通過長時(shí)間的爆肝,Sonic迎來了第一個(gè)版本!
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ù)
部分截圖


背景
什么是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)

通過架構(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)圖

上圖忽略了部分線,不然看起來太亂了。
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通過圖中的方式與設(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ù)庫
- 隨便找個(gè)目錄,新建 docker-compose.yml 文件
- 復(fù)制好 這個(gè)項(xiàng)目 的 docker-compose.yml 的內(nèi)容,并修改 mysql、redis、mq 相關(guān)信息
- docker-compose pull
- docker-compose up -d
- 完成
sonic-server后端
大家可以直接去開源項(xiàng)目鏈接,拷貝docker-compose文件
Windows、Linux或Mac都一樣,下面Windows舉例:
準(zhǔn)備:Docker環(huán)境、docker-compose
- 在D盤新建sonic文件夾
- 創(chuàng)建logs、keepFiles、imageFiles、recordFiles文件夾
- 從這里將示例的配置文件拉到本地,這里為止,你的項(xiàng)目目錄應(yīng)該是這樣的

- 進(jìn)入config文件夾,修改jdbc-prod.yml的mysql配置(host,賬密、數(shù)據(jù)庫名)
- 修改redis-prod.yml的redis配置(host,數(shù)據(jù)庫)
- 修改rabbitmq.yml的配置(host,賬密,vhost)
- 返回上一級(jí)目錄
- 新建docker-compose.yml文件,文件內(nèi)容復(fù)制這里的
- 在 當(dāng)前目錄(sonic/) 下執(zhí)行
docker-compose pull
檢查鏡像都下載好了,就可以執(zhí)行
docker-compose up -d
- 首次啟動(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,后續(xù)部署會(huì)使用到。
Docker部署(僅適用于Linux和Mac)
注意 因?yàn)闇y試設(shè)備有限,Docker版沒有經(jīng)過完全測試,出現(xiàn)Bug的話大家記得提Bug
直接部署
Windows、Linux或Mac都一樣,下面Windows舉例:
- 環(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
- 在D盤新建sonic-agent文件夾
- 去這里 拉下項(xiàng)目,將mini、language、chromeDriver三個(gè)文件夾復(fù)制到第二步的文件夾內(nèi)
- 去這里 找到符合你部署平臺(tái)的jar包下載,然后復(fù)制到第二步的文件夾內(nèi),此時(shí),你的文件夾應(yīng)該是這樣的

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)不可用,歡迎反饋

至此,所有部署完畢了
下一篇,介紹主要功能與實(shí)現(xiàn)方案
歡迎大家進(jìn)群討論,但是記得小小支持,star一下哦,這將是我前進(jìn)的動(dòng)力