移動app自動化測試的難點
移動APP的ui自動化測試長久以來一直是一個難點,難點在于UI的”變”,?變化導致自動化用例的大量維護。從分層測試的角度,自動化測試應該逐層進行。最大量實現自動化測試的應該是單元測試,最容易實現也最容易在早期發現問題;其次是接口級測試,以驗證邏輯為目的進行自動化,由于接口的相對穩定,自動化測試成本相對也可以接受;自動化成本最大的便是UI級自動化測試,然而UI界面是直接反饋給用戶的效果展示,適度的尤其是BVT級的自動化測試也是非常必要的。
為了擺脫這些,需要引進一些自動化測試來協助我們。趁現在有空我來總結下,android常用的幾種自動化測試框架的異同,使測試人員在選擇自動化框架時有所參考!
Android幾種常用自動化測試框架對比
1、Monkey是Android?SDK自帶的測試工具,在測試過程中會向系統發送偽隨機的用戶事件流,如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試,也有日志輸出。該工具實際上只能對程序進行一些壓力測試,由于測試的事件和數據都是隨機的,不能自定義,因此具有很大的局限性。
另一個由Android SDK提供的測試工具是MonkeyRunner。嚴格意義上來說MonkeyRunner其實是一個Api工具包,比Monkey強大,可以編寫測試腳本來自定義數據、事件。腳本使用python編寫,需要測試人員具備較高的技能水平,因此學習成本相對較高,這是它的缺點。
3、Robotium也是基于Instrumentation的測試框架,主要針對某一個APK進行自動化測試,APK可以有源碼,也可以沒有源碼,功能強大;缺點是對測試人員來說要有一定的Java基礎,了解Android基本組件,不能跨App。
4、Instrumentation是早期Google提供的Android自動化測試工具類,雖然在那時候junit也可以對Android進行測試,但是Instrumentation允許你對應用程序做更為復雜的測試,甚至是框架層面的,是很多其它測試框架的基礎,可以在同進程中加載被測組件。它有很多豐富的高層封裝,使用者可以使用基于instrumentation的其他框架,避免過多二次開發量。但Instrumentation不支持跨應用,導致基于instrumentation的框架都繼承了這個缺點。
5、UIAutomator是由谷歌提供的測試框架,它提供了原生Android app和游戲的高級UI測試。基本上支持所有的Android事件操作,與Instrumentation對比,它不需要測試人員了解代碼實現細節(可以用UiAutomatorviewer抓去App頁面上的控件屬性而不看源碼)。
基于Java,測試代碼結構簡單、編寫容易、學習成本,一次編譯,所有設備或模擬器都能運行測試,能跨App(比如:很多App有選擇相冊、打開相機拍照,這就是跨App測試)。
該工具的不足之處在于僅支持SDK 16(Android 4.1)及以上版本,無法兼容混合應用程序和Web應用程序。
6、Espresso是Google的開源自動化測試框架。相對于Robotium和UIAutomator,它的特點是規模更小、更簡潔、API更加精確、編寫測試代碼簡單、容易快速上手。由于它是基于Instrumentation的,因此無法在不同的應用程序之間使用。
7、Selendroid:是一個基于Instrumentation的一個框架. 完全兼容Webdriver協議。Selendroid支持在模擬器和真實設備上運行,并可以作為縮放和并行測試的網格節點進行集成。
Athrun是一個淘寶出品的移動測試框架/平臺,可同時支持ios和Android。Android部分也是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2類基礎上進行了擴展,提供一整套面向對象的API。
Appium是一個跨平臺的開源自動化測試工具,被認為是功能最為強大的框架之一。在接下來的內容中,我將詳細介紹它的特點和用途。
Appium的優缺點
它的優點:
①開源;
②支持Native App、Hybird App、web app;
③支持Android、ios、firefox OS;
④Server也是跨平臺的,你可以使用Mac OS X、windows或者linux;
它的哲理是:
用Appium自動化測試不需要重新編譯App;
支持很多語言來編寫測試腳本,Java、JavaScript、php、python、C#、ruby等主流語言;
由于WebDriver已經擴展,因此不必重復造輪子來進行自動化測試。(WebDriver是測試WebApps的一種簡單、快速的自動化測試框架,所以有Web自動化測試經驗的測試人員可以直接上手);
移動端自動化測試應該是開源的;