歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     admin @ 2019-07-15 , reply:0

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

本文是SoloPi團隊關於項目的深度解讀,

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

前言

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

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

移動測試 1.0 時代

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

移動測試 2.0 時代

伴隨著測試技術的持續發展、又得益於 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π 提供了三種查找模式:

  • 第一種方案不必多說,核心就是基於 AccessbilityService 生成當前控制項視圖樹,並記錄下id、文字等屬性,適用於 Native 場景

  • 第二種方案基於 Chrome 的調試協議,通過注入js可以獲得頁面布局以及各元素屬性,控制項的定位思路與輔助功能這一套方案是一致的。適用於 H5/小程序場景。

  • 第三種方案是圖像匹配方案,Soloπ 在端上實現了一套圖像比對能力,結合了模板匹配、特徵匹配等演算法,並做了一定的適配和調優。適用於遊戲自動化的場景。此外,在 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 等功能。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108241/alipay-opensource-solopi
支付寶開源非侵入式 Android 自動化測試工具 Soloπ已經有203次圍觀

http://coctec.com/news/all/show-post-209918.html