Android 測試 Appium、Robotium、monkey等框架或者工具對比
1. Appium測試 (功能測試,使用者接受度測試,黑盒測試) - Rating: 8
Appium測試相當於黑盒測試。只是測試UI邏輯正確性。所以Appium測試框架提供的方法有限。獲取一個AppiumDriver物件。該物件只是有很多findElements()的方法,獲取到UI元素。UI元素是WebElement,這個類提供的方法基本是獲取資訊為主,比如獲取name,class,tagName,location,text,isSlected,isTouched等資訊。還有一個點選事件產生函式click()。遺憾的是沒有longClick()事件。整個測試框架只有這2個比較有用的物件可以操作。所以整體上看,這個這個測試框架,只是測試UI邏輯的正確性,不能升入測試業務邏輯流程。也沒有辦法去檢測。
Pros:
- Open Source
- 可以使用不同語言來編寫測試程式碼
- 可以測試不同平臺程式:Android/iOS/Web/Hybrid
- 社群較活躍
2. Robotium測試 (功能測試,使用者接受度測試,黑盒+白盒測試) - Rating: 8
Pros:
- Quite popular for android testing
- 可以對原始碼測試,也可以測試apk
- 可以測試Android Native和Android Hybrid App
- 可以測試網路連結和聲音等
- Open Source
- 社群較活躍,資料比較好找
3. AndroidTest (單元測試,邏輯測試,白盒測試)
這個在https://developer.android.com/tools/testing/index.html SDK中有詳細描述。能夠針對Android各種元件進行測試,包含ActivityTest,ServiceTest,ContentProviderTest。能夠獲取每一個元件的 資源,並且注入程式碼進行測試。
1) Activity Testing 主要是測試Activity的,主要測試的方向是以下三個方向:
- 對於Activity的生命週期的控制。
- Dependency injection: Instrumentation allows you to create mock system objects such as Contexts or Applications and use them to run the activity under test. This helps you control the test environment and isolate it from production systems. You can also set up customized Intents and start an activity with them.(翻譯不太好,大概就說依靠注入去產生模擬物件然後模擬系統環境。)
- 控制UI的控制元件元素,然後產生觸控事件。這個功能類似Appium描述的。
2) Service Testing 測試的是Service生命週期是否正常
3) Content Povider Testiing 因為provider是一個數據出入口,所以測試的是資料能否正常被讀取出來,能否正常寫入。測試這個provider提供的URI是否全部正常。測試一些非法的URI是否能夠被攔截等。 總的來說Android自帶的是單元測試。適合白盒測試。Android 自帶的Test的話能夠獲取的UI介面或者什麼的更多的資訊,提供的測試方式也更多。
4. Monkey (壓力測試)
這個是Android提供的系統工具。它向系統傳送偽隨機的使用者事件流(如按鍵輸入、觸控式螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。Monkey測試是一種為了測試軟體的穩定性、健壯性的快速有效的方法。
- 測試的物件僅為應用程式包,有一定的侷限性。
- Monky測試使用的事件流資料流是隨機的,不能進行自定義。
5. monkeyRuner (功能測試,使用者接受度測試,黑盒測試) - Rating:5
SDK:http://developer.android.com/tools/help/monkeyrunner_concepts.html 這個是用python編碼實現的測試。主要有3個類MonkeyDevice、MonkeyImage、MonkeyRuner。最主要是通過執行程式,在程式中提供按鍵或觸控事件的輸入數值然後截圖,通過截圖對比是否是正常的執行。事件API: press (string name, dictionary type) touch (integer x, integer y, integer type) drag (tuple start, tuple end, float duration, integer steps) startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags) 等事件,詳細請參考API。
6. UIAutomator - 官方 (黑盒測試,功能測試) - Rating: 7
Pro:
- 可以測試需要在不同app之間切換的情況
- 官方支援
Cons:
- 只能測試Android native app
- 需要Android SDK 4.1+
- 無法獲取當前load的activity
- 無法做網路連結測試和聲音測試
- debug過程比較麻煩
主要功能跟APPIUM類似,主要類UIDevice,UiObjec,UiSelector,UiCollection。UIdevice更Appium的AppiumDriver類比。剩下的更WebElement類比只是劃分得更詳細。功能上也更Appium類似。通過text,className等資訊找到UI控制元件然後進行操作。