支付寶開源非侵入式Android自動化測試工具Soloπ

五嘎子 5年前發布 | 6K 次閱讀 支付寶 Android

  前 言

  Soloπ(SoloPi)是支付寶開源的一個無線化、非侵入式的 Android 自動化測試工具,公測版擁有錄制回放、性能測試、一機多控三項主要功能,能為測試開發人員節省寶貴時間。

  本文是 SoloPi 團隊關于項目的深度解讀。

  作者:喬瑞凱,螞蟻金服高級無線開發工程師

  近年來,隨著移動互聯網的蓬勃發展,移動測試技術也取得了長足的進步,從早期基于測試腳本的單機自動化,到錄制回放、圖像識別、云測平臺等測試技術貼合實際業務需求深度應用和創新,測試效率從而一次又一次被提升。

  本文主要介紹支付寶在移動端上實現的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機,即可實現自動化的功能、性能、兼容性、以及穩定性測試等工作。

  1、移動測試 1.0 時代

  移動測試 1.0 時代,也可以稱之為探索期。由于厭倦了日復一日的手工操作,如何提升測試效率成為了移動測試領域最重要的課題,在此期間,除了 Monkey、UiAutomator、Instruments 等官方提供的工具,業界還涌現了一批優秀的開源自動化測試工具/框架,在自動化驅動能力的基礎之上,不僅可以實現基本功能的驗證,還可以結合性能采集方案、遍歷算法等實現各類專項測試的自動化。在這個階段,自動化測試的常見形態是在單機或本地少數幾臺 PC 上部署測試環境,再利用 Jenkins 等工具實現持續集成。

  2、移動測試 2.0 時代

  伴隨著測試技術的持續發展、又得益于 STF 的開源,業界開始出現了云測平臺的概念,將真機設備、任務管理、自動化框架以及專項測試方案打包在平臺中作為服務提供出去,給用戶帶來了一站式的測試體驗。另一方面,遠程調試、設備調度等技術的引入極大的提升了設備的利用率,測試人員不再需要為缺少測試設備或測試任務排隊耗時而擔心。對于云測平臺用戶而言,在此階段常見的測試形態是:在本地 PC 上開發測試腳本,再上傳至云測平臺執行,最后可在平臺中查看測試報告,測試流程簡單且清晰。

  3、移動測試 2.0+

  在保留了上述“云測”的玩法之外,移動測試 2.0+ 時代下的測試技術提供的往往不再是某一個獨立的小工具,更多的是帶來一套完整的解決方案,例如為用戶提供一套定制化的 IDE 環境,結合錄制回放、圖像識別等技術,用戶可能只需要做一些簡單的框選、拖拽就能完成測試腳本的開發。另一方面,由于辦公環境、硬件條件等因素的限制,越來越多的測試人員希望可以在移動端上直接發起測試,做到移動測試“移動測”。當然,無論是云端、IDE 端、還是移動端,都應該做到能力互通,即“多端多通”,這樣才能讓測試方案更加靈活、適用于更多場景。

  無線驅動的 Android 專項測試方案:Soloπ

  “多端多通”的概念比較廣,僅憑一篇文章可能無法闡述清楚,所以下面將會重點介紹為了迎接“移動 2.0+”時代,我們在移動端上實現的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機,即可實現自動化的功能、性能、兼容性、以及穩定性測試等工作。

  1、整體架構 

  這套方案中,底層依賴主要是“無線 ADB、系統輔助功能、Chrome 調試以及圖像識別技術”,后文將會介紹它們具體的應用場景。同時,在底層依賴的基礎上,我們封裝了一套核心能力,由“控件定位、事件驅動、性能采集以及依賴注入”組成,并在服務層實現了錄制、回放、數據處理等公共服務能力。在架構的最頂端,結合界面交互邏輯包裝出了各個功能的入口。

  2、無線 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π 的幾大核心功能。

  3、錄制回放

  錄制回放功能基于 AccessibilityService、ChromeDevToolsProtocol、圖像識別三種模式實現精確查找,可以在設備本地實現回放,也可以轉換為 Appium/Macaca 等框架的腳本,對接云測平臺。另外,為了降低用例維護的成本,我們在端上還提供了用例編輯、流程控制的功能。 

  (1)實現方案

  在錄制過程中,Soloπ 會對用戶的操作進行攔截,識別用戶操作的位置,高亮當前操作的控件,記錄用戶當前要做的操作類型,在每一步操作后,將操作類型及目標控件的各種信息都記錄下來。這里的控件信息包括控件的 ID、文字等基本信息,以及相對布局、截圖信息等。

  在回放時,Soloπ 會逐條解析之前錄制的數據,通過智能查找算法,綜合各種屬性,定位目標控件,找到控件后,就會執行相應的操作,如點擊、滑動等。在所有步驟執行后,會展示本次回放的結果,包括日志、截圖等信息,作為本次回放的總結。

  (2)控件查找能力

  對于傳統的 Native 應用,通過 UiAutomator dump 獲取的屬性就足以實現自動化了。然而,隨著移動端動態化能力的穩步發展,越來越多的應用采用了 “Native + H5/小程序” 這種混合開發的方案。再考慮到近年來手游行業的飛速發展,手機游戲自動化測試的需求也越來越多。為了盡可能的適配各種場景,Soloπ 提供了三種查找模式:

  (3)回放能力

  通過 Soloπ 錄制的用例會以 JSON 的形式存儲起來,用例不僅可以向上述視頻演示的一樣在設備本地直接回放,還可以通過 Soloπ 的解析器將用例轉換為 Appium、Macaca 等目前主流自動化測試框架的腳本,輕松打通云測平臺。另外,得益于文本抓取和圖像識別能力,Soloπ 還實現了在 Android 端錄制一遍用例,生成的腳本能夠同時在 Android、iOS 雙端回放的能力。

  (4)更多功能

  Soloπ 還提供了用例步驟的插入、刪除、修改等用例編輯功能,可以有效降低用例的維護成本。另外,Soloπ 還引入了循環、條件等流程控制能力,若對用例進行合理編排,可輕松實現需要重復操作的工具腳本或是需要暴力回放的穩定性測試腳本。

  錄制回放更多的能力還包括結合數據 Mock 解決用例回放不穩定的能力、打通性能測試的能力等等。

  4、一機多控

  在各類專項測試中,兼容性測試是最為耗時費力的一項,測試人員需要關注各種系統版本、各大手機廠商,各種類型的屏幕等等,想要通過純人工測試來保證兼容性測試的質量成本是非常高的。

  Soloπ 在錄制回放能力的基礎上實現了一套兼容性測試的解決方案。在錄制回放的場景中,我們先是在一臺設備上記錄了用戶的操作,然后再在任意一臺設備上實現操作的回放。如果把場景擴展到多臺設備上,就可以實現通過一臺設備操控多臺設備,我們把這套功能稱為“一機多控”。具體說來就是主機與從機建立 Socket 連接,然后在主機上將用戶的操作實時發送到各個從機,在從機上完成操作的回放。

  一機多控的環境搭建比較靈活,手邊的手機在安裝 Soloπ 后,通過簡單的建聯操作即可完成部署。一機多控適配了目前市面上主流機型和 ROM,并封裝了一些提升測試效率的快捷功能,如應用安裝、數據清理、設備信息查看等等。

  5、性能測試

  提到專項測試,不得不提性能測試。近年來,手機應用成為了人們日常生活中不可或缺的一部分,這也對應用的使用體驗提出了更高的要求。 為了給用戶帶來“絲般順滑”的體驗,僅僅實現功能是不夠的,而性能測試,就是打造優質應用不可或缺的一個環節。然而,性能測試的開展并不是很容易,一方面,性能測試具有一定的門檻,很多時候需要開發腳本去實現,還要去處理各類兼容性問題。另一方面,大多數性能測試方案獲取到的都是一些基本指標,難以發現深層次的問題。針對上述問題,Soloπ 實現了一套性能測試工具。包含常規性能指標獲取、響應耗時計算以及移動 Lighthouse 三方面功能。

  (1)常規性能指標獲取

  Soloπ 支持 CPU、內存、fps、流量等常規指標的實時獲取,同時支持將性能數據記錄下來,存儲到本地并通過報表形式展示。Soloπ 還提供了數據上傳的功能,可以將數據發送給服務端做進一步的處理。整套性能工具支持手動觸發和廣播觸發,可以和自動化測試輕松打通。

  (2)響應耗時計算

  除了常規性能指標的獲取,Soloπ 還提供了響應耗時計算的功能。大家都知道,計算響應耗時的一種常用方法就是基于代碼埋點或是系統日志(比如 activityDisplayed Time),但是這種方法計算得到的結果對于異步加載較多的界面來說會與用戶實際的觀感有比較大的偏差。

  Soloπ 基于錄屏分幀能力實現了一套計算接近用戶體驗的響應時間的方案。具體的說,在開啟錄屏后,Soloπ 會基于 ADB shell 的 get event 命令監聽屏幕的點擊事件,將其作為計算響應耗時的起點,當錄屏結束后,Soloπ 會從后向前倒序對視頻進行對比,查找出界面趨于穩定的時間點,并作為計算的終點,二者相減就是響應耗時。

  (3)移動 Lighthouse

  H5/小程序等技術在移動應用中的占比越來越高,如何測試這類應用的性能成為了一個新的課題。接觸過前端性能的同學都知道,Lighthouse 是前端性能測試的利器,但是它無法在手機上直接應用。而 Soloπ 所做的,就是基于 CDP 協議,在客戶端中實現了一套 Lighthouse 性能測試工具,它可以獲取 H5/小程序頁面的啟動性能、資源流耗、請求質量、JS 質量、JSAPI 調用情況與頁面信息,并內置了 30 余條前端開發最佳實踐,旨在發現細粒度的性能問題。

  具體的實現方案,就是將 Soloπ 與待測應用建立基于 CDP 協議建立 Websocket 通信,監聽頁面發起請求、接收數據、開始加載等事件的回調、并收集報錯、Trace 等數據。再按照啟動性能、資源流耗、請求質量、JS 質量、 JSAPI 調用情況與頁面信息 6 大維度進行數據的分類和整理,隨后通過內置的規則對采集到的結果進行判斷,最終生成報表并在界面中展示。

  更多

  作為一套完整的專項測試方案,除了前面提到的錄制回放、一機多控、性能測試外,Soloπ 還提供了數據 Mock,性能加壓、網絡模擬、智能 Monkey 等功能。

 

 本文由用戶 五嘎子 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  轉載自:https://mp.weixin.qq.com/s/4L1_XFBniGv6ATnz96QL3g