APP兼容性(2)揭祕巖鼠智能遍歷

本文首發於知乎 android

概述

APP兼容性測試大部分採用的是通用的方法,就是在app內隨機操做。Android自帶的Monkey工具因爲簡單方便,一直沿用到如今並在開發者中普遍使用。但隨着在大規模的應用,原生Monkey一些弊端也隨之顯現出來。
git

優勢 簡單方便一條命令就可以使用,測試穩定;每秒鐘能夠發送大量操做事件,壓力足夠,經常能夠發現正常使用沒法發現的問題
缺點 測試過程不可控,經常點擊到咱們不但願點擊到的控件和界面,例如隨意點擊系統設置,關閉開發者等;單位時間內對app內全部控件的覆蓋狀況可能並不如意;測試過程信息沒法記錄,以致於發現問題後沒法分析問題產生的過程和緣由


原生Monkey的缺點致使測試效果和效率都不可控,如何改善這些問題呢?巖鼠在這方面重點投入進行了較多探索,開發了「智能遍歷工具」——利用UI自動化的方式獲取APP的控件,進行一個隨機的可控的遍歷,來達到儘量覆蓋被測APP內全部的界面和控件的目的。
github

框架技術方案


基於UI自動化實現的Monkey遍歷工具主要分爲如下2類
web

技術方案 基於Macaca或者Appium作驅動,在PC端實現遍歷算法進行測試 基於Uiautomator驅動在Android手機上實現遍歷算法進行測試
表明 Appcrawler, Macaca自帶的NoSmoke Maxim
優勢 1.不須要太關注驅動,利用現有ui自動化框架
2.測試結果數據便於在PC端保存
1.利用Uiautomator能夠方便快捷執行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全部的控件和功能,執行到最多的代碼。

但遍歷過程可能會遇到不少問題,例如:api

  • 如何探索到全部的可操做的控件,訪問到全部須要被測的activity?
  • 如何提升遍歷效率,避免控件過多的重複操做?
  • 如何屏蔽掉咱們不想要的操做?
  • 如何限定在咱們想要的測試範圍?
  • 如何解決登陸問題?
  • 如何評估測試效果?
  • 如何幫助後續復現問題?

包括但不限於以上的種種問題都是在實現可控Monkey過程當中可能會遇到的問題,目前尚未一個統一的完美的解決方案,更多仍是在實踐中不斷的改進和完善。
markdown

智能遍歷算法


  智能遍歷流程  

app


智能遍歷測試流程總體上是遵循業界比較流行的方式經過Uiautomator獲取當前頁面的控件進行智能分析,提取分析出可遍歷操做的控件。這樣的好處是不言而喻的,對比原生monkey,避免了大量的無效點擊,大大提升了單位時間內對App控件操做的覆蓋率,提高測試效率。

 深度優先搜索(DFS)

保證有效的測試,核心是有效可靠的遍歷算法。根據github上的一些開源工具的研究發現,大部分的工具是使用深度優先搜索(DFS),原理就是限定可以訪問的層級,而後遞歸的點擊記錄操做的控件,遇到走不到下一個界面時就回退到上一個界面循環下去。
聽上去很不錯,其實其中存在不少問題。例如 webview界面網頁產生大量的控件並且深度也是不可控的。測試中遇到崩潰跳出等致使的從新遞歸。各類界面如何斷定控件是被訪問過的,都會對遍歷過程產生很大的影響。
對於簡單的APP這種遍歷方式仍是頗有用的,但對於複雜的存在大量動態內容的APP執行的效果就很差評估了。

  巖鼠智能遍歷算法  

巖鼠以前嘗試使用DFS算法,可是效果並不太滿意。所以自主開發了效果更優的智能遍歷算法。
巖鼠智能遍歷算法,主要是記錄頁面的控件信息,經過控件特徵信息的提取對界面的惟一性進行定義,並記錄了頁面之間訪問的關係。因爲存在這些必要的訪問關係,咱們能夠更智能的瞭解到訪問過的頁面和測試路徑信息,避免了大量的重複點擊和實現新路徑的探索。
同時咱們也能夠對頁面進行定向干預,對指定頁面例如網頁的訪問,知足增強特定頁面測試覆蓋的需求。
另外因爲咱們的測試是運行在手機上的,並不依賴於例如appium的框架進行測試,所以相對比而言不依賴於這些框架的點擊效率,總體測試效率的提高也是很是明顯的。

評估智能遍歷的效果


對於遍歷效果的分析,巖鼠智能遍歷工具提供了對於Activity級別的點擊覆蓋狀況分析,能夠知道具體訪問過哪些Activity以及對應的點擊次數。這個是能夠經過巖鼠的報告頁面進行查看。
框架



另外一個評估效果的方式,是對每次操做和點擊位置的截圖以及對界面控件信息的記錄。但這對於在手機端執行的「智能遍歷」來講數據量比較大,特別是不少時候都是運行幾個小時,產生過幾千次的點擊在手機端保存這些信息不會太合適。不過巖鼠提供了實時的崩潰分析並進行崩潰點的錄像。能夠知足必定的崩潰定位需求,這個能夠經過巖鼠測試報告進行查看。


另外平臺也提供了遍歷點擊操做日誌的下載,你能夠看到測試過程當中操做的activity以及控件的基本描述和操做類型,讓你對測試狀況有一個大概的瞭解。

將來方向

  • 優化算法,提高APP控件遍歷覆蓋度和效率
  • 創建遍歷效果評估體系
  • 引入AI算法實現更智能的遍歷

歡迎體驗


巖鼠雲真機和兼容性測試服務,正在限時免費體驗中,歡迎試用和交流!
yanshu.effirst.com/

長按識別二維碼,關注咱們,更多產品資訊,技術乾貨分享
工具

更多兼容性相關文章

APP兼容性(1)概述

相關文章
相關標籤/搜索