自動化測試框架對比(UIAutomator、Appium、Robotium)


一、原理

1.UiAutomator——基於UIAutomation的用戶界面自動化測試框架,可以跨應用工作,谷歌親生的。

UIAutomation在Android4.3發布時有了新版本,官方簡介:http://blog.csdn.net/zhubaitian/article/details/40504827

Android4.3之前:使用inputManager或者更早的WindowsManager來注入KeyEvent

Android4.3之后:使用Accessibility APIs來注入事件。(AccessibilityService本來是做一些輔助功能的,提供了一系列的事件回調,幫助我們指示一些用戶及界面的狀態變化,主要給殘障人群提供幫助。)

2.Robotium——基於Instrumentation開發出來的一套測試框架

Instrumentation的官方簡介:http://blog.csdn.net/zhubaitian/article/details/39578915

Instrumentation可以把測試包和目標測試應用加載到同一個進程中進行。既然各個控件和測試代碼都運行在同一個進程中了,測試代碼當然就可以調用這些控件的方法了,同時修改和驗證這些控件的一些項就不在話下了。

Instrumentation的運行原理:InstrumentationTestRunner會在目標應用代碼運行之前調用onCreate方法建立一個新的線程並為這個線程添加一個消息隊列,這個線程循環處理其他線程發過來的消息事件,並與之進行交互。

跨應用:Android4.3之后Instrumentation引入了getUiAutomation接口的實例進行跨應用測試。

3.Appium——跨平台,允許采用同一套API在不同的平台(IOS,Android)上編寫測試代碼,讓測試套件在IOS和Android平台上實現代碼復用成為可能。

Appium的核心是一個暴露了REST API的網絡服務器。這個服務器接收客戶端過來的連接,監聽客戶端過來的命令,在移動設備上運行命令,然后把代表命令運行結果的HTTP響應包發送回客戶端。

 

二、優缺點對比

 
UiAutomator
Robotium
Appium
是否支持設備無源碼測試(黑盒測試)
能否進行跨應用測試 不能
是否是谷歌原生 不是 不是
支持編程語言 Java Java

幾乎所有語言

是否有簽名一致的問題
是否需要解決中文輸入問題
建議開發團隊增加的控件信息 Content Description resource-id Content Description
是否需要API17及以上
Junit支持版本 Junit4 Junit3 Junit3/Junit4
是否支持webview
支持平台 Android Android IOS

 

 

三、補充內容——Android三種注入事件的方式

 

1、使用內部APIs(內部API是谷歌沒有對外開放的代碼,存在一定的風險)

        通過獲得WindowManager的一個實例來訪問injectKeyEvent/injectPointerEvent這兩個事件注入方法。 

        在應用內可正常工作,在應用外不能正常工作(INJECT_EVENTS是需要系統權限的)。

2、使用instrumentation對象(開放的API,比內部API干凈)

        通過instrumentation的一個實例來訪問injectEvent,同上面的內部APIs的方法。

        所以在應用內部可以正常的工作,在應用外部不嫩正常的工作。

3、直接注入事件到設備 /dev/input/eventX

        linux以系統設備的方式向用戶暴露了一套統一的事件注入接口 /dev/input/eventX(其中X代表一個整數)。我們可以直接調用。
        需要rooted過的設備,如:
        adb shell
        su
        chmod 666 /dev/input/event3


免責聲明!

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



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