1.前言
近年來,隨著移動互聯(lián)網(wǎng)的蓬勃發(fā)展,移動測試技術(shù)也取得了長足的進(jìn)步,從早期基于測試腳本的單機(jī)自動化,到錄制回放、圖像識別、云測平臺等測試技術(shù)貼合實際業(yè)務(wù)需求深度應(yīng)用和創(chuàng)新,測試效率從而一次又一次被提升。
本文主要介紹支付寶在移動端上實現(xiàn)的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機(jī),即可實現(xiàn)自動化的功能、性能、兼容性、以及穩(wěn)定性測試等工作。
1.1移動測試 1.0 時代
移動測試 1.0 時代,也可以稱之為探索期。由于厭倦了日復(fù)一日的手工操作,如何提升測試效率成為了移動測試領(lǐng)域最重要的課題,在此期間,除了 Monkey、UiAutomator、Instruments 等官方提供的工具,業(yè)界還涌現(xiàn)了一批優(yōu)秀的開源自動化測試工具/框架,在自動化驅(qū)動能力的基礎(chǔ)之上,不僅可以實現(xiàn)基本功能的驗證,還可以結(jié)合性能采集方案、遍歷算法等實現(xiàn)各類專項測試的自動化。在這個階段,自動化測試的常見形態(tài)是在單機(jī)或本地少數(shù)幾臺 PC 上部署測試環(huán)境,再利用 Jenkins 等工具實現(xiàn)持續(xù)集成。

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

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

2.無線驅(qū)動的Android專項測試方案:Soloπ
“多端多通”的概念比較廣,僅憑一篇文章可能無法闡述清楚,所以下面將會重點介紹為了迎接“移動 2.0+”時代,我們在移動端上實現(xiàn)的一套無線化、非侵入、免 Root 的 Android 專項測試方案 Soloπ。直接操控手機(jī),即可實現(xiàn)自動化的功能、性能、兼容性、以及穩(wěn)定性測試等工作。
2.1整體架構(gòu)

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

大家都知道,對于 Android 自動化,ADB shell 的執(zhí)行能力是一切的基礎(chǔ)。
在 PC 上,通過 Android SDK 提供的ADB client 與同樣運行于 PC 中的 ADB server 通信,再由 ADB server 通過 USB 與位于設(shè)備中的 Adbd 通信。要實現(xiàn)一套無線化的方案,必須要擺脫對 USB 線的依賴。好在 Android 系統(tǒng)還提供了一種基于 Socket 的 ADB 連接模式,既然是這樣,那么只需要按照 ADB 通信協(xié)議在端上與本機(jī)的 5555 端口進(jìn)行通信即可獲得 ADB shell 的執(zhí)行能力。
目前已經(jīng)有一些實現(xiàn) ADB 通信協(xié)議的 Java 開源項目,如 AdbLib ,他們封裝了一套 ADB 的調(diào)試通信服務(wù),能夠替代 PC 上 ADB Server 的角色。我們在Soloπ應(yīng)用中集成了 AdbLib 開源庫,包裝成一套 ADB 命令執(zhí)行工具,為 Soloπ 后續(xù)各種專項測試能力的實現(xiàn)奠定了堅實的基礎(chǔ)。下面將開始為大家介紹 Soloπ 的幾大核心功能。
2.3錄制回放
錄制回放功能基于 AccessibilityService、ChromeDevToolsProtocol、圖像識別三種模式實現(xiàn)精確查找,可以在設(shè)備本地實現(xiàn)回放,也可以轉(zhuǎn)換為 Appium/Macaca 等框架的腳本,對接云測平臺。另外,為了降低用例維護(hù)的成本,我們在端上還提供了用例編輯、流程控制的功能。
2.3.1實現(xiàn)方案

在錄制過程中,Soloπ 會對用戶的操作進(jìn)行攔截,識別用戶操作的位置,高亮當(dāng)前操作的控件,記錄用戶當(dāng)前要做的操作類型,在每一步操作后,將操作類型及目標(biāo)控件的各種信息都記錄下來。這里的控件信息包括控件的 ID、文字等基本信息,以及相對布局、截圖信息等。
在回放時,Soloπ 會逐條解析之前錄制的數(shù)據(jù),通過智能查找算法,綜合各種屬性,定位目標(biāo)控件,找到控件后,就會執(zhí)行相應(yīng)的操作,如點擊、滑動等。在所有步驟執(zhí)行后,會展示本次回放的結(jié)果,包括日志、截圖等信息,作為本次回放的總結(jié)。
2.3.2控件查找能力
對于傳統(tǒng)的 Native 應(yīng)用,通過 UiAutomator dump 獲取的屬性就足以實現(xiàn)自動化了。然而,隨著移動端動態(tài)化能力的穩(wěn)步發(fā)展,越來越多的應(yīng)用采用了 “Native + H5/小程序” 這種混合開發(fā)的方案。再考慮到近年來手游行業(yè)的飛速發(fā)展,手機(jī)游戲自動化測試的需求也越來越多。為了盡可能的適配各種場景,Soloπ 提供了三種查找模式:

第一種方案不必多說,核心就是基于 AccessbilityService 生成當(dāng)前控件視圖樹,并記錄下id、文字等屬性,適用于 Native 場景
第二種方案基于 Chrome 的調(diào)試協(xié)議,通過注入js可以獲得頁面布局以及各元素屬性,控件的定位思路與輔助功能這一套方案是一致的。適用于 H5/小程序場景。
第三種方案是圖像匹配方案,Soloπ 在端上實現(xiàn)了一套圖像比對能力,結(jié)合了模板匹配、特征匹配等算法,并做了一定的適配和調(diào)優(yōu)。適用于游戲自動化的場景。此外,在 Soloπ 目前的方案中,圖像匹配能力還會作為前兩種定位方式的兜底方案,進(jìn)一步的提升控件查找的準(zhǔn)確率。
2.3.3回放能力
通過 Soloπ 錄制的用例會以 JSON 的形式存儲起來,用例不僅可以向上述視頻演示的一樣在設(shè)備本地直接回放,還可以通過 Soloπ 的解析器將用例轉(zhuǎn)換為 Appium、Macaca 等目前主流自動化測試框架的腳本,輕松打通云測平臺。另外,得益于文本抓取和圖像識別能力,Soloπ 還實現(xiàn)了在 Android 端錄制一遍用例,生成的腳本能夠同時在 Android、iOS 雙端回放的能力。

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

錄制回放更多的能力還包括結(jié)合數(shù)據(jù) Mock 解決用例回放不穩(wěn)定的能力、打通性能測試的能力等等。
2.4一機(jī)多控
在各類專項測試中,兼容性測試是最為耗時費力的一項,測試人員需要關(guān)注各種系統(tǒng)版本、各大手機(jī)廠商,各種類型的屏幕等等,想要通過純?nèi)斯y試來保證兼容性測試的質(zhì)量成本是非常高的。
Soloπ 在錄制回放能力的基礎(chǔ)上實現(xiàn)了一套兼容性測試的解決方案。在錄制回放的場景中,我們先是在一臺設(shè)備上記錄了用戶的操作,然后再在任意一臺設(shè)備上實現(xiàn)操作的回放。如果把場景擴(kuò)展到多臺設(shè)備上,就可以實現(xiàn)通過一臺設(shè)備操控多臺設(shè)備,我們把這套功能稱為“一機(jī)多控”。具體說來就是主機(jī)與從機(jī)建立 Socket 連接,然后在主機(jī)上將用戶的操作實時發(fā)送到各個從機(jī),在從機(jī)上完成操作的回放。

一機(jī)多控的環(huán)境搭建比較靈活,手邊的手機(jī)在安裝 Soloπ 后,通過簡單的建聯(lián)操作即可完成部署。一機(jī)多控適配了目前市面上主流機(jī)型和 ROM,并封裝了一些提升測試效率的快捷功能,如應(yīng)用安裝、數(shù)據(jù)清理、設(shè)備信息查看等等。
2.5性能測試
提到專項測試,不得不提性能測試。近年來,手機(jī)應(yīng)用成為了人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?,這也對應(yīng)用的使用體驗提出了更高的要求。 為了給用戶帶來“絲般順滑”的體驗,僅僅實現(xiàn)功能是不夠的,而性能測試,就是打造優(yōu)質(zhì)應(yīng)用不可或缺的一個環(huán)節(jié)。然而,性能測試的開展并不是很容易,一方面,性能測試具有一定的門檻,很多時候需要開發(fā)腳本去實現(xiàn),還要去處理各類兼容性問題。另一方面,大多數(shù)性能測試方案獲取到的都是一些基本指標(biāo),難以發(fā)現(xiàn)深層次的問題。針對上述問題,Soloπ 實現(xiàn)了一套性能測試工具。包含常規(guī)性能指標(biāo)獲取、響應(yīng)耗時計算以及移動 Lighthouse 三方面功能。
2.5.1常規(guī)性能指標(biāo)獲取
Soloπ 支持 CPU、內(nèi)存、fps、流量等常規(guī)指標(biāo)的實時獲取,同時支持將性能數(shù)據(jù)記錄下來,存儲到本地并通過報表形式展示。Soloπ 還提供了數(shù)據(jù)上傳的功能,可以將數(shù)據(jù)發(fā)送給服務(wù)端做進(jìn)一步的處理。整套性能工具支持手動觸發(fā)和廣播觸發(fā),可以和自動化測試輕松打通。
2.5.2響應(yīng)耗時計算
除了常規(guī)性能指標(biāo)的獲取,Soloπ 還提供了響應(yīng)耗時計算的功能。大家都知道,計算響應(yīng)耗時的一種常用方法就是基于代碼埋點或是系統(tǒng)日志(比如 activityDisplayed Time),但是這種方法計算得到的結(jié)果對于異步加載較多的界面來說會與用戶實際的觀感有比較大的偏差。

Soloπ 基于錄屏分幀能力實現(xiàn)了一套計算接近用戶體驗的響應(yīng)時間的方案。具體的說,在開啟錄屏后,Soloπ 會基于 ADB shell 的 get event 命令監(jiān)聽屏幕的點擊事件,將其作為計算響應(yīng)耗時的起點,當(dāng)錄屏結(jié)束后,Soloπ 會從后向前倒序?qū)σ曨l進(jìn)行對比,查找出界面趨于穩(wěn)定的時間點,并作為計算的終點,二者相減就是響應(yīng)耗時。
2.5.3移動 Lighthouse
H5/小程序等技術(shù)在移動應(yīng)用中的占比越來越高,如何測試這類應(yīng)用的性能成為了一個新的課題。接觸過前端性能的同學(xué)都知道,Lighthouse 是前端性能測試的利器,但是它無法在手機(jī)上直接應(yīng)用。而 Soloπ 所做的,就是基于 CDP 協(xié)議,在客戶端中實現(xiàn)了一套 Lighthouse 性能測試工具,它可以獲取 H5/小程序頁面的啟動性能、資源流耗、請求質(zhì)量、JS 質(zhì)量、JSAPI 調(diào)用情況與頁面信息,并內(nèi)置了 30 余條前端開發(fā)最佳實踐,旨在發(fā)現(xiàn)細(xì)粒度的性能問題。

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

3更多
作為一套完整的專項測試方案,除了前面提到的錄制回放、一機(jī)多控、性能測試外,Soloπ 還提供了數(shù)據(jù) Mock,性能加壓、網(wǎng)絡(luò)模擬、智能 Monkey 等功能。目前 Soloπ 的部分源碼已開源(項目地址:https://github.com/soloPi/SoloPi),歡迎大家加入到項目中,與我們一同開發(fā)出更好用的測試工具!

特別提醒:本網(wǎng)信息來自于互聯(lián)網(wǎng),目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,并請自行核實相關(guān)內(nèi)容。本站不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。如若本網(wǎng)有任何內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系我們,本站將會在24小時內(nèi)處理完畢。