天天看點

知乎移動端雲測試平台實踐(一)—— 系統設計

背景

由于各種新型号的移動終端層出不窮,為滿足測試需要,公司投入測試的移動裝置數量增長迅速,如何把散落在公司各個角落的移動裝置有效的管理起來,提高資源使用率,如何快速适配各種品牌型号的終端裝置,提升測試效率,如何能更快捷的接入自動化測試等,這些問題促就了知乎移動雲測平台的誕生。

系統設計的主要目标在于提升知乎 App 的穩定性、優化使用者體驗、有效提升研發測試效率,主要功能如下:

  • 裝置管理:支援裝置的自動接入,處理裝置的使用申請。
  • 遠端調試:通過 web 頁面線上進行單機控制或多機同步控制,提供裝置螢幕實時畫面展示和系統日志的展示。
  • 自動化測試:支援相容性自動化測試(Monkey)和 UI 功能自動化測試(Appium),提供自動化測試報告。
  • 相容性測試:安裝、覆寫安裝、啟動、智能探索等 App 測試,觀察不同裝置下 App 的穩定性和容錯性。
  • 定向穩定性測試:在相容性測試的基礎上長時間循環執行定向智能探索腳本等對 App 進行測試,觀察不同裝置下 App 的穩定性。

架構

知乎雲測平台從結構上主要分為 web 前端、後端 server 和 agent client 三個部分:其中 web 前端專注于使用者互動和資料展示;後端 server 主要負責業務控制處理,包括裝置注冊及狀态維護,指令下發,資料收集等功能;agent client 用于管理所搭載移動終端裝置,包括裝置資訊上報,指令執行,測試報告資料回傳等功能。具體實作如下:

  • web 前端

    基于 React 實作,在顯示設計上采用阿裡的 ICE 內建方案,ICE 一套基于 React 的中背景應用解決方案,它提供了大量的可複用物料,包含了一條從設計端到開發端的完整鍊路,配套桌面工具能夠極速建構中背景應用,即使在沒有 UI 設計支援的情況下, ICE 內建的内容也基本能滿足設計需求,是以我們選用了 ICE。

  • 後端 server

    基于 Spring Boot 架構進行開發,選用 Gradle 進行項目建構 ,內建了 Spring Data JPA、Spring Security OAuth 等元件,資料庫選用 MySQL;為提升資料傳輸效率,我們 在 Spring Boot 中整合了 Netty 用于和 agent client 進行 Socket 通信,并選用了 Protobuf 做為資料交換格式;在「裝置遠端調試」功能的前後端互動設計上,我們選用了 WebSocket 協定,通過後端資料推送的方式,以保證裝置操作的實時性,相較于需要使用推送實時資料到用戶端甚至通過維護兩個 HTTP 連接配接來模拟全雙工連接配接的舊的輪詢或長輪詢(Comet)來說,使用 WebSocket 可以極大的減少不必要的網絡流量與延遲。

  • agent client

    使用 Java 進行開發,最終以 jar 包的形式部署在 PC 機上,分别通過 adb 和 libimobiledevice 管理 PC 上挂載的 Android 裝置 和 IOS 裝置,裝置挂載方式支援 USB 或 WiFi;在裝置遠端調試功能實作上,針對 Android 裝置和 IOS 裝置分别采用了不同的解決方案,我們使用了 STF(Smartphone Test Farm) 提供的開源工具 Minicap 和 Minitouch,用于 Android 裝置的螢幕截圖和指令運作,使用 STF 的 iOS Minicap 和 Facebook 的 WebDriverAgent 架構,用于 iOS 裝置的螢幕截圖和指令運作,螢幕截圖即作為裝置遠端監控頁面渲染的圖檔流來源;UI 功能自動化測試方案采用 Appium 開源工具進行實作,穩定性自動化測試方案其中 Android 裝置采用自帶的指令行工具 Monkey 實作,iOS 裝置則通過程式随機生成指令進行測試。

知乎移動端雲測試平台實踐(一)—— 系統設計

架構圖

功能介紹

  • 裝置管理

    移動裝置以 USB 的接連方式挂載在部署有 agent client 的 PC 上,裝置的機序列号、系統類型、系統版本、品牌、型号、 螢幕分辨率等資訊會通過 agent 上報給後端 server,裝置序列号作為裝置唯一辨別,進行裝置資訊的注冊或更新操作。裝置資訊注冊成功後,server 端負責維護裝置線上狀态,當裝置離線時,由 agent 端進行狀态上報給 server 端,server 端将對應裝置狀态修改為離線。前端頁面上可以檢視目前接入的所有手機裝置資訊及線上狀态。

知乎移動端雲測試平台實踐(一)—— 系統設計
  • 裝置租借

    對公司測試機進行統一登記管理,提供測試機租借服務,使用者可通過平台的「裝置租借」頁面,查找需要的裝置,并進行發起租借操作,待裝置持有人同意租借後,即可領取測試機裝置。

知乎移動端雲測試平台實踐(一)—— 系統設計
  • 裝置遠端調試

    裝置遠端調試功能支援通過前端頁面進行遠端控制裝置的應用安裝、啟動、解除安裝以及正常的點選、長按、滑動等操作。

    前端頁面上提供一個裝置螢幕等比例縮放的圖檔顯示區域,使用 <canvas> 标簽動态渲染從後端接收到的裝置螢幕截圖,以此實作裝置螢幕局的遠端監控功能。通過捕捉 <canvas> 的 onmousedown、onmousemove、onmouseover、onmouseout、onmouseup 等事件,并根據 <canvas> 控件的長高和光标目前坐标換算出觸點在裝置螢幕中的相對位置,最終在 agent 上根本系統平台類型生成相應的操作指令,控制裝置執行指令。

知乎移動端雲測試平台實踐(一)—— 系統設計

同時選中多個裝置,操作首個裝置,其他被選中的裝置會同步執行目前操作,以達到多機同步控制的效果。

知乎移動端雲測試平台實踐(一)—— 系統設計
  • 自動化測試任務建立

    支援 Monkey 和 Appium 的自動化測試,通過前端頁面建立測試任務,配置相應的任務參數,任務建立成功後,由 server 端負責将任務下發給對應裝置目前所挂載的 agent client,agent 收到任務即控制對應裝置進行測試操作,并記錄測試任務結果資料最終傳回給 server 端。

知乎移動端雲測試平台實踐(一)—— 系統設計
  • 任務報告展示

    背景 server 會對接入的每個自動化測試任務的結果做統計彙總,并按照裝置次元對任務的異常統計,截圖,日志等資訊進行展示,以快速定位測試中遇到的問題。

知乎移動端雲測試平台實踐(一)—— 系統設計

遠端控制界面畫質處理

由于需要實時操作處理,需要實時檢視遠端裝置的顯示并互動操作指令,指令資料是以 Json 的形式進行互動,隻占用很少的帶寬,而實時畫面顯示則需要将裝置的實時畫面以圖檔流的方式渲染到對應的 web 頁面上,那麼在使用時圖檔的大小、網絡傳輸速度、渲染性能等都會影響使用體驗,其中可以主動優化的就是圖檔大小,由于手動編譯的 stf 提供的 minicap,它本身也提供了圖檔壓縮功能,如下是測試資料:

知乎移動端雲測試平台實踐(一)—— 系統設計

另外裝置上圖檔的顯示内容也會影響圖檔的大小,像圖中這種留白比較多的圖檔也不會特别大。實際使用中需要考慮網絡占用上限以及使用體驗,調研發現裝置實際使用過程中使用者比較關注的一般都是截圖和錄屏,而平台單獨提供了高清的截圖和單獨的錄屏功能,是以對實時顯示的畫質沒有特殊要求,選取 5% 的壓縮比例在公司内網 2~3 M/S 的網絡速度下比較流暢,另外對流暢度優化還可以展現在圖檔傳輸幀率上,可以按照一定的比例去掉中間的部分圖檔,使用者使用過程中會感覺到圖檔跳動渲染,類似 gif 圖檔展示,由于已經選取了 5% 的壓縮比例,是以沒有做此優化。

遠端控制多機同步

在單機遠端控制上添加了多機功能,如圖中選取裝置:

知乎移動端雲測試平台實踐(一)—— 系統設計

操作第一個裝置時,指令同時分發到其他的裝置上執行,如圖展示:

知乎移動端雲測試平台實踐(一)—— 系統設計

其他的裝置界面也可以同時進行操作,這個地方處理主要通過 websocket 互動傳遞資料,在多機界面展示圖檔流做了降幀處理,同時限制 10~20 台的裝置使用數量,在架構上使用者操作的指令主要由服務端對 agent 進行複制分發,過程如圖:

知乎移動端雲測試平台實踐(一)—— 系統設計

作者:王甯柯、陳康

出處:https://zhuanlan.zhihu.com/p/65565514

繼續閱讀