Soloπ(SoloPi)是支付寶開源的一個無線化、非侵入式的Android自動化測試工具,公測版擁有錄製回放、性能測試、一機多控三項主要功能,能爲測試開發人員節省寶貴時間。前端
本文是SoloPi團隊關於項目的深度解讀,算法
做者:喬瑞凱,螞蟻金服高級無線開發工程師shell
前言小程序
近年來,隨着移動互聯網的蓬勃發展,移動測試技術也取得了長足的進步,從早期基於測試腳本的單機自動化,到錄製回放、圖像識別、雲測平臺等測試技術貼合實際業務需求深度應用和創新,測試效率從而一次又一次被提高。網絡
本文主要介紹支付寶在移動端上實現的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機,便可實現自動化的功能、性能、兼容性、以及穩定性測試等工做。架構
移動測試 1.0 時代框架
移動測試 1.0 時代,也能夠稱之爲探索期。因爲厭倦了日復一日的手工操做,如何提高測試效率成爲了移動測試領域最重要的課題,在此期間,除了 Monkey、UiAutomator、Instruments 等官方提供的工具,業界還涌現了一批優秀的開源自動化測試工具/框架,在自動化驅動能力的基礎之上,不只能夠實現基本功能的驗證,還能夠結合性能採集方案、遍歷算法等實現各種專項測試的自動化。在這個階段,自動化測試的常見形態是在單機或本地少數幾臺 PC 上部署測試環境,再利用 Jenkins 等工具實現持續集成。異步
移動測試 2.0 時代socket
伴隨着測試技術的持續發展、又得益於 STF 的開源,業界開始出現了雲測平臺的概念,將真機設備、任務管理、自動化框架以及專項測試方案打包在平臺中做爲服務提供出去,給用戶帶來了一站式的測試體驗。另外一方面,遠程調試、設備調度等技術的引入極大的提高了設備的利用率,測試人員再也不須要爲缺乏測試設備或測試任務排隊耗時而擔憂。對於雲測平臺用戶而言,在此階段常見的測試形態是:在本地 PC 上開發測試腳本,再上傳至雲測平臺執行,最後可在平臺中查看測試報告,測試流程簡單且清晰。前端性能
移動測試 2.0+
在保留了上述「雲測」的玩法以外,移動測試 2.0+ 時代下的測試技術提供的每每再也不是某一個獨立的小工具,更多的是帶來一套完整的解決方案,例如爲用戶提供一套定製化的 IDE 環境,結合錄製回放、圖像識別等技術,用戶可能只須要作一些簡單的框選、拖拽就能完成測試腳本的開發。另外一方面,因爲辦公環境、硬件條件等因素的限制,愈來愈多的測試人員但願能夠在移動端上直接發起測試,作到移動測試「移動測」。固然,不管是雲端、IDE 端、仍是移動端,都應該作到能力互通,即「多端多通」,這樣才能讓測試方案更加靈活、適用於更多場景。
無線驅動的Android專項測試方案:Soloπ
「多端多通」的概念比較廣,僅憑一篇文章可能沒法闡述清楚,因此下面將會重點介紹爲了迎接「移動 2.0+」時代,咱們在移動端上實現的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機,便可實現自動化的功能、性能、兼容性、以及穩定性測試等工做。
總體架構
這套方案中,底層依賴主要是「無線 ADB、系統輔助功能、Chrome 調試以及圖像識別技術」,後文將會介紹它們具體的應用場景。同時,在底層依賴的基礎上,咱們封裝了一套核心能力,由「控件定位、事件驅動、性能採集以及依賴注入」組成,並在服務層實現了錄製、回放、數據處理等公共服務能力。在架構的最頂端,結合界面交互邏輯包裝出了各個功能的入口。
無線 ADB
你們都知道,對於 Android 自動化,ADB shell 的執行能力是一切的基礎。
在 PC 上,經過 Android SDK 提供的ADB client 與一樣運行於 PC 中的 ADB server 通訊,再由 ADB server 經過 USB 與位於設備中的 Adbd 通訊。要實現一套無線化的方案,必需要擺脫對 USB 線的依賴。好在 Android 系統還提供了一種基於 Socket 的 ADB 鏈接模式,既然是這樣,那麼只須要按照 ADB 通訊協議在端上與本機的 5555 端口進行通訊便可得到 ADB shell 的執行能力。
目前已經有一些實現 ADB 通訊協議的 Java 開源項目,如 AdbLib ,他們封裝了一套 ADB 的調試通訊服務,可以替代 PC 上 ADB Server 的角色。咱們在Soloπ應用中集成了 AdbLib 開源庫,包裝成一套 ADB 命令執行工具,爲 Soloπ 後續各類專項測試能力的實現奠基了堅實的基礎。下面將開始爲你們介紹 Soloπ 的幾大核心功能。
錄製回放
錄製回放功能基於 AccessibilityService、ChromeDevToolsProtocol、圖像識別三種模式實現精確查找,能夠在設備本地實現回放,也能夠轉換爲 Appium/Macaca 等框架的腳本,對接雲測平臺。另外,爲了下降用例維護的成本,咱們在端上還提供了用例編輯、流程控制的功能。
實現方案
在錄製過程當中,Soloπ 會對用戶的操做進行攔截,識別用戶操做的位置,高亮當前操做的控件,記錄用戶當前要作的操做類型,在每一步操做後,將操做類型及目標控件的各類信息都記錄下來。這裏的控件信息包括控件的 ID、文字等基本信息,以及相對佈局、截圖信息等。
在回放時,Soloπ 會逐條解析以前錄製的數據,經過智能查找算法,綜合各類屬性,定位目標控件,找到控件後,就會執行相應的操做,如點擊、滑動等。在全部步驟執行後,會展現本次回放的結果,包括日誌、截圖等信息,做爲本次回放的總結。
控件查找能力
對於傳統的 Native 應用,經過 UiAutomator dump 獲取的屬性就足以實現自動化了。然而,隨着移動端動態化能力的穩步發展,愈來愈多的應用採用了 「Native + H5/小程序」 這種混合開發的方案。再考慮到近年來手遊行業的飛速發展,手機遊戲自動化測試的需求也愈來愈多。爲了儘量的適配各類場景,Soloπ 提供了三種查找模式:
回放能力
經過 Soloπ 錄製的用例會以 JSON 的形式存儲起來,用例不只能夠向上述視頻演示的同樣在設備本地直接回放,還能夠經過 Soloπ 的解析器將用例轉換爲 Appium、Macaca 等目前主流自動化測試框架的腳本,輕鬆打通雲測平臺。另外,得益於文本抓取和圖像識別能力,Soloπ 還實現了在 Android 端錄製一遍用例,生成的腳本可以同時在 Android、iOS 雙端回放的能力。
更多功能
Soloπ 還提供了用例步驟的插入、刪除、修改等用例編輯功能,能夠有效下降用例的維護成本。另外,Soloπ 還引入了循環、條件等流程控制能力,若對用例進行合理編排,可輕鬆實現須要重複操做的工具腳本或是須要暴力回放的穩定性測試腳本。
錄製回放更多的能力還包括結合數據 Mock 解決用例回放不穩定的能力、打通性能測試的能力等等。
一機多控
在各種專項測試中,兼容性測試是最爲耗時費力的一項,測試人員須要關注各類系統版本、各大手機廠商,各類類型的屏幕等等,想要經過純人工測試來保證兼容性測試的質量成本是很是高的。
Soloπ 在錄製回放能力的基礎上實現了一套兼容性測試的解決方案。在錄製回放的場景中,咱們先是在一臺設備上記錄了用戶的操做,而後再在任意一臺設備上實現操做的回放。若是把場景擴展到多臺設備上,就能夠實現經過一臺設備操控多臺設備,咱們把這套功能稱爲「一機多控」。具體說來就是主機與從機創建 Socket 鏈接,而後在主機上將用戶的操做實時發送到各個從機,在從機上完成操做的回放。
一機多控的環境搭建比較靈活,手邊的手機在安裝 Soloπ 後,經過簡單的建聯操做便可完成部署。一機多控適配了目前市面上主流機型和 ROM,並封裝了一些提高測試效率的快捷功能,如應用安裝、數據清理、設備信息查看等等。
性能測試
提到專項測試,不得不提性能測試。近年來,手機應用成爲了人們平常生活中不可或缺的一部分,這也對應用的使用體驗提出了更高的要求。 爲了給用戶帶來「絲般順滑」的體驗,僅僅實現功能是不夠的,而性能測試,就是打造優質應用不可或缺的一個環節。然而,性能測試的開展並非很容易,一方面,性能測試具備必定的門檻,不少時候須要開發腳本去實現,還要去處理各種兼容性問題。另外一方面,大多數性能測試方案獲取到的都是一些基本指標,難以發現深層次的問題。針對上述問題,Soloπ 實現了一套性能測試工具。包含常規性能指標獲取、響應耗時計算以及移動 Lighthouse 三方面功能。
常規性能指標獲取
Soloπ 支持 CPU、內存、fps、流量等常規指標的實時獲取,同時支持將性能數據記錄下來,存儲到本地並經過報表形式展現。Soloπ 還提供了數據上傳的功能,能夠將數據發送給服務端作進一步的處理。整套性能工具支持手動觸發和廣播觸發,能夠和自動化測試輕鬆打通。
響應耗時計算
除了常規性能指標的獲取,Soloπ 還提供了響應耗時計算的功能。你們都知道,計算響應耗時的一種經常使用方法就是基於代碼埋點或是系統日誌(好比 activityDisplayed Time),可是這種方法計算獲得的結果對於異步加載較多的界面來講會與用戶實際的觀感有比較大的誤差。
Soloπ 基於錄屏分幀能力實現了一套計算接近用戶體驗的響應時間的方案。具體的說,在開啓錄屏後,Soloπ 會基於 ADB shell 的 get event 命令監聽屏幕的點擊事件,將其做爲計算響應耗時的起點,當錄屏結束後,Soloπ 會從後向前倒序對視頻進行對比,查找出界面趨於穩定的時間點,並做爲計算的終點,兩者相減就是響應耗時。
移動 Lighthouse
H5/小程序等技術在移動應用中的佔比愈來愈高,如何測試這類應用的性能成爲了一個新的課題。接觸過前端性能的同窗都知道,Lighthouse 是前端性能測試的利器,可是它沒法在手機上直接應用。而 Soloπ 所作的,就是基於 CDP 協議,在客戶端中實現了一套 Lighthouse 性能測試工具,它能夠獲取 H5/小程序頁面的啓動性能、資源流耗、請求質量、JS 質量、JSAPI 調用狀況與頁面信息,並內置了 30 餘條前端開發最佳實踐,旨在發現細粒度的性能問題。
具體的實現方案,就是將 Soloπ 與待測應用創建基於 CDP 協議創建 Websocket 通訊,監聽頁面發起請求、接收數據、開始加載等事件的回調、並收集報錯、Trace 等數據。再按照啓動性能、資源流耗、請求質量、JS 質量、 JSAPI 調用狀況與頁面信息 6 大維度進行數據的分類和整理,隨後經過內置的規則對採集到的結果進行判斷,最終生成報表並在界面中展現。
更多
做爲一套完整的專項測試方案,除了前面提到的錄製回放、一機多控、性能測試外,Soloπ 還提供了數據 Mock,性能加壓、網絡模擬、智能 Monkey 等功能。