1. 程式人生 > >Android自動化測試框架

Android自動化測試框架

Monkey

Monkey1是Android SDK自帶的測試工具,是一個命令列工具,可以執行在模擬器裡或實際裝置中。可以執行在模擬器中或者實際裝置中,它向系統傳送偽隨機的使用者事件流(如按鍵輸入,觸控式螢幕輸入,手勢輸入等),實現對正在開發的應用程式進行壓力測試。由於測試事件和資料都是隨機的,不能自定義,所以有很大的侷限性。

編寫語言:命令列 執行環境:使用adb連線PC執行 測試物件:Android平臺自動化測試的一種手段,通過Monkey程式模擬使用者觸控式螢幕幕、滑動Trackball、按鍵等操作來對裝置上的程式進行壓力測試,檢測程式多久的時間會發生異常。主要測試客戶端應用的穩定性,健壯性 測試限制:主要是做隨機模擬使用者操作移動端的操作

例子:

adb shell monkey -p com.android.calendar -v 500

這樣就開始亂點日曆應用了。

MonkeyRunner

MonkeyRunner2是Android SDK提供的測試工具。嚴格意義上來說MonkeyRunner其實是一個Api工具包,比Monkey強大,可以編寫測試指令碼來自定義資料、事件。缺點是指令碼(jython(java語言))用Python(Python(C語言))來寫,對測試人員來說要求較高,有比較大的學習成本;使用By id/name/text方法操控(hierarchyviewer),執行速度太慢。典型應用:安裝,解除安裝,啟動Activity,點選X,Y座標,傳送按鍵事件,drag,截圖等。

這個相對於Monkey 來說 就是真正意義上的 自動化測試工具了。只需要編寫指令碼即可完成 我們平時所需要的 大部分 冒煙用例等等。 尤其是在4.x以下的機型裡,由於無法使用uiautomator, MonkeyRunner幾乎就是唯一的自動化測試編寫辦法。

編寫語言:py 執行環境:py環境,使用adb連線PC執行 測試物件:UI測試,功能測試,迴歸測試,並且可以自己定義測試擴充套件,靈活性較大。 測試限制:主要使用座標,邏輯判斷較差

UiAutomator

UiAutomator3是Android提供的自動化測試框架,基本上支援所有的Android事件操作。是用來做UI測試的,也就是普通的手工測試,點選每個控制元件元素看看輸出的結果是否符合預期。對比Instrumentation它不需要測試人員瞭解程式碼實現細節(可以用UiAutomatorviewer抓去App頁面上的控制元件屬性而不看原始碼)。能跨App(比如:很多App有選擇相簿、開啟相機拍照,這就是跨App測試)。缺點是隻支援SDK 16(Android 4.1)及以上,不支援Hybird App、WebApp。

編寫語言:java 執行環境:使用adb連線PC執行,啟動測試 測試物件:主要用於UI功能自動化和UI測試,快速、執行簡單 測試限制:是通過以控制元件的方式來定位,當然也是支援座標軸的方式來定位,許可權控制不足,無法像Instrumentation那樣使用。

Robotium

Robotium是基於Instrumentation的測試框架,主要針對android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點選,長按,滑動等)、查詢和斷言機制的API,能夠對各種控制元件進行操作。Robotium結合android官方提供的測試框架達到對應用程式進行自動化測試。另外,Robotium 4.0版本已經支援對WebView的操作。Robotium對Activity,Dialog,Toast,Menu都是支援的。支援Native app、Hybird App。缺點不能跨App。

錄製工具Radar(不穩定)、Testin(不提供原始碼)、官網工具(收費) 開發環境:指令碼語言java;Eclipse中引入:robotium-solo-**.jar

編寫語言:java基於Instrumentation封裝 執行環境:使用adb連線PC執行,啟動測試 測試物件:主要用於白盒測試和UI測試 測試限制:單個Activity測試,需要與測試相同應該的簽名各種框架編寫程式碼風格

Appium

Appium是開源的移動端自動化測試框架;支援Native App、Hybird App、Web App;支援Android、iOS、Firefox OS;是跨平臺的可以在mac,windows以及linux系統上。用Appium自動化測試不需要重新編譯App;指令碼語言:Java、python、ruby、C#、Objective C、PHP等主流語言。

相關限制:如果你在Windows使用Appium,你沒法使用預編譯專用於OS X的.app檔案,因為Appium依賴OS X專用的庫來支援iOS測試,所以在Windows平臺你不能測試iOS Apps。這意味著你只能通過在Mac上來執行iOS測試。

總結:在iOS部分是封裝了UIAutomation;Android 4.2以上是用UiAutomator,Android 2.3 ~ 4.1用的是Instrumentation,也就說Appium同時封裝了UiAutomator和Instrumentation。所以Appium擁有了以上幾大框架的所有優點:跨App,支援Native App、Hybird App、Web App,還支援N種語言來編寫你的測試指令碼。

appium核心基於UiAutomator來識別元素。如果只有Android app產品,推薦選擇robotium,提供的API比appium好用;既有IOS和Android,則使用appium

Instrumentation

Instrumentation是早期Google提供的Android自動化測試工具類,雖然在那時候JUnit也可以對Android進行測試,但是Instrumentation允許你對應用程式做更為複雜的測試,甚至是框架層面的。通過Instrumentation你可以模擬按鍵按下、擡起、螢幕點選、滾動等事件。Instrumentation是通過將主程式和測試程式執行在同一個程序來實現這些功能,你可以把Instrumentation看成一個類似Activity或者Service並且不帶介面的元件,在程式執行期間監控你的主程式。缺點是對測試人員來說編寫程式碼能力要求較高,需要對Android相關知識有一定了解,還需要配置AndroidManifest.xml檔案,不能跨多個App。

編寫語言:java 執行環境:使用adb連線PC執行,啟動測試 測試物件:主要用於白盒測試和UI測試 測試限制:單個Activity測試,需要與測試相同應該的簽名

Espresso

Espresso是Google的開源自動化測試框架。相對於Robotium和UIAutomator,它的特點是規模更小、更簡潔,API更加精確,編寫測試程式碼簡單,容易快速上手。因為是基於Instrumentation的,所以不能跨App。

Selendroid

Selendroid是基於Instrumentation的測試框架,可以測試Native App、Hybird App、Web App,但是網上資料較少,社群活躍度也不大。

uiautomator2

uiautomator2 4是一個可以使用Python對Android裝置進行UI自動化的庫。其底層基於Google uiautomator,Google提供的uiautomator庫可以獲取螢幕上任意一個APP的任意一個控制元件屬性,並對其進行任意操作,但有兩個缺點:1. 測試指令碼只能使用Java語言 2. 測試指令碼必須每次被上傳到裝置上執行。 我們希望測試能夠用一個更指令碼化的語言,例如Python編寫,同時可以每次所見即所得地修改測試、執行測試。

參考