1. 程式人生 > >自動化測試框架對比(UIAutomator、Appium、Robotium)

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

一、原理

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

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

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

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

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