天天看點

已開源!支付寶 Android 專項測試的“秘密武器”

已開源!支付寶 Android 專項測試的“秘密武器”

阿裡妹導讀:近年來,随着移動網際網路的蓬勃發展,移動測試技術也取得了長足的進步,從早期基于測試腳本的單機自動化,到錄制回放、圖像識别、雲測平台等測試技術貼合實際業務需求深度應用和創新,測試效率進而一次又一次被提升。本文主要介紹支付寶在移動端上實作的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機,即可實作自動化的功能、性能、相容性、以及穩定性測試等工作。

開源位址

已開源!支付寶 Android 專項測試的“秘密武器”

Soloπ 的部分源碼已經在 Github 開源,長按識别以下二維碼,關注“阿裡技術”官方公衆号,并在對話框内回複“專項”,即可獲得 Github 下載下傳連結、了解更多詳情。

前言

移動測試 1.0 時代

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

已開源!支付寶 Android 專項測試的“秘密武器”

移動測試 2.0 時代

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

已開源!支付寶 Android 專項測試的“秘密武器”

移動測試 2.0+

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

已開源!支付寶 Android 專項測試的“秘密武器”

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

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

整體架構

已開源!支付寶 Android 專項測試的“秘密武器”

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

無線 ADB

已開源!支付寶 Android 專項測試的“秘密武器”

大家都知道,對于 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 等架構的腳本,對接雲測平台。另外,為了降低用例維護的成本,我們在端上還提供了用例編輯、流程控制的功能。

實作方案

已開源!支付寶 Android 專項測試的“秘密武器”

在錄制過程中,Soloπ 會對使用者的操作進行攔截,識别使用者操作的位置,高亮目前操作的控件,記錄使用者目前要做的操作類型,在每一步操作後,将操作類型及目标控件的各種資訊都記錄下來。這裡的控件資訊包括控件的 ID、文字等基本資訊,以及相對布局、截圖資訊等。

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

控件查找能力

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

已開源!支付寶 Android 專項測試的“秘密武器”
  • 第一種方案不必多說,核心就是基于 AccessbilityService 生成目前控件視圖樹,并記錄下id、文字等屬性,适用于 Native 場景。
  • 第二種方案基于 Chrome 的調試協定,通過注入js可以獲得頁面布局以及各元素屬性,控件的定位思路與輔助功能這一套方案是一緻的。适用于 H5/小程式場景。
  • 第三種方案是圖像比對方案,Soloπ 在端上實作了一套圖像比對能力,結合了模闆比對、特征比對等算法,并做了一定的适配和調優。适用于遊戲自動化的場景。此外,在 Soloπ 目前的方案中,圖像比對能力還會作為前兩種定位方式的兜底方案,進一步的提升控件查找的準确率。

回放能力

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

已開源!支付寶 Android 專項測試的“秘密武器”

更多功能

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

已開源!支付寶 Android 專項測試的“秘密武器”

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

一機多控

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

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

已開源!支付寶 Android 專項測試的“秘密武器”

一機多控的環境搭建比較靈活,手邊的手機在安裝 Soloπ 後,通過簡單的建聯操作即可完成部署。一機多控适配了目前市面上主流機型和 ROM,并封裝了一些提升測試效率的快捷功能,如應用安裝、資料清理、裝置資訊檢視等等。

性能測試

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

正常性能名額擷取

Soloπ 支援 CPU、記憶體、fps、流量等正常名額的實時擷取,同時支援将性能資料記錄下來,存儲到本地并通過報表形式展示。Soloπ 還提供了資料上傳的功能,可以将資料發送給服務端做進一步的處理。整套性能工具支援手動觸發和廣播觸發,可以和自動化測試輕松打通。

響應耗時計算

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

已開源!支付寶 Android 專項測試的“秘密武器”

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

移動 Lighthouse

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

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

已開源!支付寶 Android 專項測試的“秘密武器”

更多

作為一套完整的專項測試方案,除了前面提到的錄制回放、一機多控、性能測試外,Soloπ 還提供了資料 Mock,性能加壓、網絡模拟、智能 Monkey 等功能。目前 Soloπ 的部分源碼已開源,歡迎大家加入到項目中,與我們一同開發出更好用的測試工具!歡迎關注螞蟻金服,了解更多測試方案。

已開源!支付寶 Android 專項測試的“秘密武器”

螞蟻金服科技

繼續閱讀