Android自動化測試框架UIAutomator原理淺析


UIAutomator是一個Android自動化測試框架,是谷歌在Android4.1版本發布時推出的一款用Java編寫的UI測試框架,它只能用於UI即黑盒方面的測試。所以UIAutomator只能運行在Android4.1之后的版本,其最大的特點是可以跨進程操作。我們可以使用UIAutomator框架提供的一些方便的API來對Android應用進行一系列的自動化測試操作,如點擊、滑動、鍵盤輸入、長按以及常用的斷言方法。可以代替繁復的手工測試。

優點:

  1. Google自家推出,其穩定性和后續的維護更新可以得到保障,運行也有更多的權限。
  2. 可以跨進程操作,這點比起其他基於instrumention框架的自動化工具如Robotium是無法直接做到的。
  3. 運行速度快。

缺點:

  1. 不支持Android4.1以下的版本。
  2. 不支持Webview,所以一般無法對瀏覽器應用進行測試。

原理

首先,Google的UIAutomator參考微軟的UIAutomation提供的一套用在Android上的自動化測試框架。 基於Android AccessilibilityService。 在這里簡單介紹一下:AccessilibilityService是一個可訪問服務,它是一個為增強用戶界面並幫助殘疾用戶的應用程序,或者用戶可能無法完全與設備交互。舉個簡單的例子,假如一個用戶在開車。那么用戶就有可能需要添加額外的或者替代的用戶反饋方式。其應用方式一般有兩種:

第一種方法是:UIAutomatorView + monkey。它與hierachyview + monkey差不多。其區別是:UIAutomatorView通過ADB向設備側發送一個dump命令,而不是建立一個socket,下載一個包含當前界面控件布局信息的xml文件。相比較hierachyview下載的內容而言,該文件小很多。因此,從效率上講,這種方法比第一種應用模式快很多。

第二種方法是: 直接調用UIAutomator框架對外提供的API,主要有UIDevice、UISelector、UIObject和 UIScrollable等。其原理與第一種方式即HierachyView + Monkey差不多。其過程大致是:首先,UIAutomator測試框架通過Accessibilityservice,獲取當前窗口的控件層次關系及屬性信息,並查找到目標控件。若是點擊事件,則計算出該控件的中心點坐標。其次,UIAutomator通過 InputManager.getInstance().injectInputEvent隱藏接口來注入用戶事件(點擊、輸入類操作),從而實現跨進程 自動化的目的。

UIAutomator對外還提供了UIAutomatorTestCase、UIDevice、UISelector、UIObject、UICollection、UIScrollable等重要的類,其各自的作用如下:

  • UIAutomatorTestCase :這個類是繼承自 Junit TestCase (Junit),對外提供setup、teardown等,以便初始化用例、清除環境等。所以我們在編寫的 UIAutomator 的腳本時一般都要繼承這個類,這樣就可以直接使用它的一些方法和Junit單元測試框架中的Assert斷言機制。
  • UIObject :UIObject可以代表頁面的任意元素,但它的各種屬性定位通常是通過UISelector這個類來輔助完成的。
  • UIDevice :在測試時可以通過getUIDevice() 來實例化UIDevice對象去對設備進行各種控制,如喚醒屏幕,鎖屏,點擊Home, Back,Menu鍵等等。
  • UISelector : 主要是通過一定查詢方式,可以通過UISelector對象去定位UI元素。如果發現多個滿足條件的控件則會返回第一個控件,在使用UISelector 的時候可以組合使用多個屬性來定位具體的控件,還可以使用childSelector()函數來嵌套UISelector對象。
  • UICollection: UICollection一般與UISelector連用,如它的構造函數也要求提供UISelector: UICollection(UISelector selector)。它的API較少,主要用以從UIselector篩選出的元素集中挑出所要的元 素:getChildByDescription(), getChildByInstance(), getChildByText() ,以及統計元素集的個數getChildCount()。
  • UIScrollable:UIScrollable 用來表 示可以滑動的界面元素,其繼承關系為UIObject -> UICollection ->UIScrollable。但UIAutomator的實現方式與HierachyView+Monkey有很大不一樣。以控件點擊操作為例, 其實現流程大致如下:

定義一個點擊對象Object,該對象則通過UISelector對象定位到具體的控件。而UISelector則通過 UIAutomatorBridge(它可看做是UISelector與AccesibilityService之間的連接器),將查詢內容 (AccessibilityNodeInfo)和輸入事件(AccessibilityEvent)傳給AccessibilityService。實 際業務過程比這復雜的多。這樣,就實現了對某個控件的查找或點擊操作。備注:AccessibilityEvent,所有可操縱的UI元素都定義為一個 AccessibilityEeventt;AccessibilityNodeInfo指視窗中的組件樹節點。

https://my.oschina.net/zhangyujian/blog/3023389


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM