概述
APP相容性測試大部分采用的是通用的方法,就是在app内随機操作。Android自帶的Monkey工具由于簡單友善,一直沿用到現在并在開發者中廣泛使用。但随着在大規模的應用,原生Monkey一些弊端也随之顯現出來。
原生Monkey的缺點導緻測試效果和效率都不可控,如何改善這些問題呢?岩鼠在這方面重點投入進行了較多探索,開發了“智能周遊工具”——利用UI自動化的方式擷取APP的控件,進行一個随機的可控的周遊,來達到盡可能覆寫被測APP内所有的界面和控件的目的。
架構技術方案
基于UI自動化實作的Monkey周遊工具主要分為以下2類
從以上對比,可以看到基于Uiautomator方式直接在手機端運作,更友善部署執行,效率和穩定性也更好。是以岩鼠選擇了這個方案進行改造。
當然在這裡面還有一個問題就是Uiautomator官方已經不在進行維護,已經被Uiautomator2替代,像主流的Appium等架構也都是基于Uiautomator2進行開發了。但目前Android即使最新版本的android Q也仍然還能夠使用Uiautomator,相關的api也基本能夠滿足Monkey周遊測試的需求。
相比于Uiautomator2,Uiautomator的優勢是不需要安裝apk可以推送jar到手機端直接執行,避免了像Uiautomator2的架構都需要安裝2個額外APK的問題,特别是oppo,vivo等手機需要安裝密碼等導緻的安裝成功率問題。
而Uiautomator2的優勢是後續官方的持續支援,更多更好用的API,可以獲得應用context進而獲得android的服務實作更多的功能。
岩鼠目前也正在逐漸的演進,即将使用Uiautomator2來驅動測試。
周遊技術方案
控件的周遊方案是最核心的部分了。當然目标隻有一個就是怎麼樣可以盡可能的覆寫APP所有的控件和功能,執行到最多的代碼。
但周遊過程可能會遇到很多問題,例如:
- 如何探索到所有的可操作的控件,通路到所有需要被測的activity?
- 如何提高周遊效率,避免控件過多的重複操作?
- 如何屏蔽掉我們不想要的操作?
- 如何限定在我們想要的測試範圍?
- 如何解決登入問題?
- 如何評估測試效果?
- 如何幫助後續複現問題?
- 包括但不限于以上的種種問題都是在實作可控Monkey過程中可能會遇到的問題,目前還沒有一個統一的完美的解決方案,更多還是在實踐中不斷的改進和完善。
智能周遊算法
智能周遊流程

智能周遊測試流程整體上是遵循業界比較流行的方式通過Uiautomator擷取目前頁面的控件進行智能分析,提取分析出可周遊操作的控件。這樣的好處是不言而喻的,對比原生monkey,避免了大量的無效點選,大大提高了機關時間内對App控件操作的覆寫率,提升測試效率。
深度優先搜尋(DFS)
保證有效的測試,核心是有效可靠的周遊算法。根據github上的一些開源工具的研究發現,大部分的工具是使用深度優先搜尋(DFS),原理就是限定能夠通路的層級,然後遞歸的點選記錄操作的控件,遇到走不到下一個界面時就回退到上一個界面循環下去。
聽上去很不錯,其實其中存在很多問題。例如 webview界面網頁産生大量的控件而且深度也是不可控的。測試中遇到崩潰跳出等導緻的重新遞歸。各種界面如何判定控件是被通路過的,都會對周遊過程産生很大的影響。
對于簡單的APP這種周遊方式還是很有用的,但對于複雜的存在大量動态内容的APP執行的效果就不好評估了。
岩鼠智能周遊算法
岩鼠之前嘗試使用DFS算法,但是效果并不太滿意。是以自主開發了效果更優的智能周遊算法。
岩鼠智能周遊算法,主要是記錄頁面的控件資訊,通過控件特征資訊的提取對界面的唯一性進行定義,并記錄了頁面之間通路的關系。由于存在這些必要的通路關系,我們可以更智能的了解到通路過的頁面和測試路徑資訊,避免了大量的重複點選和實作新路徑的探索。
同時我們也可以對頁面進行定向幹預,對指定頁面例如網頁的通路,滿足加強特定頁面測試覆寫的需求。
另外由于我們的測試是運作在手機上的,并不依賴于例如appium的架構進行測試,是以相對比而言不依賴于這些架構的點選效率,整體測試效率的提升也是非常明顯的。
評估智能周遊的效果
對于周遊效果的分析,岩鼠智能周遊工具提供了對于Activity級别的點選覆寫情況分析,可以知道具體通路過哪些Activity以及對應的點選次數。這個是可以通過岩鼠的報告頁面進行檢視。
另一個評估效果的方式,是對每次操作和點選位置的截圖以及對界面控件資訊的記錄。但這對于在手機端執行的“智能周遊”來說資料量比較大,特别是很多時候都是運作幾個小時,産生過幾千次的點選在手機端儲存這些資訊不會太合适。不過岩鼠提供了實時的崩潰分析并進行崩潰點的錄像。可以滿足一定的崩潰定位需求,這個可以通過岩鼠測試報告進行檢視。
另外平台也提供了周遊點選記錄檔的下載下傳,你可以看到測試過程中操作的activity以及控件的基本描述和操作類型,讓你對測試情況有一個大概的了解。
未來方向
- 優化算法,提升APP控件周遊覆寫度和效率
- 建立周遊效果評估體系
- 引入AI算法實作更智能的周遊
免費試用
岩鼠平台相容性測試,目前開放免費試用,歡迎體驗
岩鼠雲裝置平台系列文章:
APP 相容性(1)- 概述