知乎移動端雲測試平臺實踐

https://zhuanlan.zhihu.com/p/83373208

背景

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

系統設計的主要目標在於提升知乎 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 進行復制分發,過程如圖:

 

知乎移動端雲測試平臺實踐(二)—— Agent 設計和實現

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章