淺談安卓自動化的思路

一 前言 

什麼是自動化測試?

把以人爲驅動的測試行爲轉化爲機器執行的一種過程,即模擬手工測試步驟,

通過執行測試腳本自動地測試軟件,自動地完成軟件的單元測試、功能測試、負載測試或性能測試等全部工作。

自動化測試應該從提高工作效率和產品質量的根本目標出發,而不是爲了自動化而自動化。

 

測試用例(test case):

是爲了特定測試目的而設計一個特定的使用實例或場景,包括測試條件、測試數據及與之相關的測試規程或操作過程。

測試用例也可以被稱爲有效地發現軟件缺陷的最小測試執行單元。

 

測試腳本(test script):是進行自動化測試時所編寫的、可執行的一種程序,以實現測試用例的執行過程。

 

優越性: 高效率 準確可靠 複用性 可以完成手工測試無法完成的測試,適合負載測試、性能測試、迴歸測試。

缺   點: 只能發現軟件系統中30%的錯誤,70%的錯誤要依靠手工測試來發現。

 

黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。

在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試。

它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息。

黑盒測試着眼於程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。

 

白盒測試 又稱結構測試、透明盒測試、邏輯驅動測試或基於代碼的測試。

白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件

白盒指的是盒子是可視的,你清楚盒子內部的東西以及裏面是如何運作的。"

白盒"法全面瞭解程序內部邏輯結構、對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。

在使用這一方案時,測試者必須檢查程序的內部結構,從檢查程序的邏輯着手,得出測試數據。

白盒測試工具是對源代碼進行的測試。

 

二 測試工具分析

現在,已經有大量的Android自動化測試架構或工具可供我們使用,

其中包括:Activity Instrumentation,MonkeyRunner,Robotium,UiAutomator。

還有可以實現跨平臺測試的Appium

 

1 單元測試

單元測試就是在開發的是時候,一步步的,一方法爲單位的進行測試。

比如說你寫了一個類,這個類呢有很多的方法,你想知道你寫的這個方法到底對不對,那麼你就可以使用單元測試框架進行測試。

它也可以被用作快速檢驗新建工程或進行冒煙測試。

始終,單元測試是作爲一種有效的、系統的檢驗應用程序各功能執行的方式。

 

Android SDK支持JUnit的自動化單元測試,很多測試工具都是複用Junit測試框架。

單元測試可以爲邏輯測試,功能測試和用戶界面測試等,不再是專門手動測試移動應用。

 

Android提供了基於JUnit測試框架的測試API來書寫測試用例和測試程序。

另外,Android還提供了強大的Instrumentation框架,允許測試用例訪問程序的狀態及運行時對象。

 

第一,  就是java程序員最爲熟悉和常用的JUnit,,

我們需要在運行單元測試時,一定要 用JDK來運行,利用java命令來啓動JUnit的某個Runner。

如果是用Eclipse的話,可以在Run Configuration裏新建一個JUnit。但是一定要記得在Classpath選項卡里將Bootstrap Entries中的Android Library改成JRE,並且添加junit.jar。

具體的設置可以參考:http://developer.android.com/guide/appendix/faq/troubleshooting.html#addjunit

這種方法運行的JUnit運行在JDK之上的,而不是android,所以,只能測試一些和android無關的東西,比如業務邏輯,數據封裝,數值計算等等。並不能測試android api。

android中可利用的主要測試API。繼承自JUnit的TestCase,不能使用Instrumentation框架。

 

第二,  採用Instrumentation測試框架。

Android 測試環境的核心是一個Instrumentation框架,在這個框架下,你的測試應用程序可以精確控制應用程序。

使用Instrumentation, 你可以在主程序啓動之前,創建模擬的系統對象,如Context;控制應用程序的多個生命週期;發送UI事件給應用程序;在執行期間檢查程序狀態。

Instrumentation框架通過將主程序和測試程序運行在同一個進程來實現這些功能。

 

Instrumentation implementation通過的AndroidManifest.xml中的標籤進行描述。

android.app.instrumentaion類分析請參考

http://blog.csdn.net/zhaoweixing1989/article/details/8532940

 

你可以將Instrumentation理解爲一種沒有圖形界面的,具有啓動能力的,用於監控其他類(用Target Package聲明)的工具類。

Android APIs提供的instrumentation類可以初始化Android應用程序代碼,允許你監控應用程序的系統交互,配合KeyEvent、MotionEvent類,發送用戶事件,進而實現GUI 層的自動化。

參考:http://www.cnblogs.com/carbs/archive/2013/01/12/2857596.html

 

ActivityInstrumentationTestCase2 用來測試單個的Activity,被測試的Activity可以使用InstrumentationTestCase.launchActivity 來啓動,然後你能夠直接操作被測試的Activity。

 

侷限性:只能滿足單個活動的功能測試。

 

2  Robotium

Robotium是android測試中一個簡單而又強大的工具。

說它簡單,是因爲Robotium是基於Android測試框架InstrumentationTestCase2進行的2次封裝,把一些基本操作又簡化了一遍。

通過反射等手段,調用系統隱藏的功能,實現instrumentation無法實現的功能。

 

它的文檔只有一個Solo類,而且配置步驟是固定的幾步。對程序上的每一個按鈕,文本控件,圖像,等都可以捕捉到,既可以使用按鈕顯示的名字進行點擊,也可以使用座標進行點擊。

 

優點:主要針對某一個APK進行自動化測試,APK可以有源碼,也可以沒有源碼,功能強大;在黑盒測試裏面比monekyrunner效率更好,

缺點:針對APK操作,而且需要對APK重新簽名(有工具),因此操作相對複雜;

          需要第三方廠商提供debug版本或者將發佈的版本重新打包簽名,才能將測試用例注入到待測試應用的進程裏面。

 

3 Monkey

爲支撐黑盒自動化測試,Android SDK提供了Money和MonkeyRunner兩個測試工具。

Monkey是一個命令行工具,可以運行在模擬器裏或實際設備中,它是一種輕量級的性能測試工具。

它向系統發送僞隨機的事件流,模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。

 

除了生成隨機的事件序列,也支持接收腳本的解釋執行命令。

可以在monkey的 --help裏面查到。但官方沒有。

不足:

缺少必要的條件判斷等命令,難以在功能測試上有所作爲。

將其作爲生成隨機事件的工具,測試應用的健壯性。

 

4 MonkeyRunner

MonkeyRunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設備和模擬器。

通過MonkeyRunne,您可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,

向它發送模擬擊鍵,截取它的用戶界面圖片,並將截圖存儲於工作站上。

MonkeyRunner工具的主要設計目的是用於測試功能框架水平上的應用程序和設備,或用於運行單元測試套件。

與monkey的區別在工作站上通過API定義的特定命令和事件控制設備或模擬器。

 

優點:操作最爲簡單,可以錄製測試腳本,可視化操作;

缺點:主要生成座標的自動化操作,移植性不強,雖然有python和Java類庫的支持,但是自身提供的API有限,需要通過插件來擴展其功能,功能最爲侷限

 

5 Appium

Google在sdk4.0以後提供了一個自動化解決方案uiautomator:

優點:可以跨應用了;這可是親生的;

缺點:必須sdk4.0以上版本;要想實現的好,最好有開發配合;java項目編譯爲jar後需要push到手機才能運行,

 

Appium 是一個開源、免費的移動端自動化測試框架,可以用來測試原生和混合移動應用,

同時支持測試多種平臺(Ios、Android、FirefoxOS)下應用,是跨平臺的,可以用在osx,windows以及linux桌面系統上,

底層是採用 WebDriver JSON Wire 協議去實現的。

由SauceLabs支持,一家業界領先的測試產品公司, 有成熟的企業測試解決方案。

 

國內 http://testerhome.com/

官網:http://appium.io/

 

爲什麼選擇appium ?

1.    你不需要以任何方式重新編譯或者修改你的app,就可以在所有的平臺上使用標準的自動化APIs

2.    你可以用你喜歡的開發工具使用任何 WebDriver 兼容的語言來編寫測試用例.比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-basedflavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl 可以使用標準的Selenium WebDriver API和特定語言的客戶端庫.

3.    你可以使用任何測試框架.

依託 WebDriver 意味着你可以押寶在一個已經成爲事實上標準的獨立,自由和開放的協議.而不會被限制在任何的專利中

如果在沒有使用Appium的情況,你使用了Apple的UIAutomation庫就只能通過Javascript,並且只能通過Instruments application插樁應用來運行你的測試. 同樣的,在Google的UiAutomator體系下,你只能用Java寫你的測試案例. Appium最終開啓了跨平臺原生移動自動化的可能.

工作原理

Appium通過多種原生自動化框架來提供基於Selenium的 WebDriver JSON wire protocolapi

Appium驅動Apple的UIAutomation庫提供IOS支持. UIAutomation基於Dan Cuellar’s

Android支持上, 在新版本的Android使用了Uiautomator框架,老版本的android上使用了Selendroid

FirefoxOS的支持依賴一個基於Gecko平臺並且兼容WebDriver的自動化驅動Marionette,不過暫不翻譯了.因爲暫時用不到

 

Android

支持版本: android 2.3 平臺及以上

 android 4.2 平臺及以上通過Appium自有的 UiAutomator類 庫支持. 默認在自動化後臺。

 從android 2.3 到 4.3 平臺 ,Appium是通過綁定Selendroid,實 現自動化測試的,

windows

如果你在windows上安裝appium,你沒法使用預編譯專用於OS X的.app文件,你也將不能測試IOS apps,

因爲appium依賴OS X專用的庫來支持IOS測試。這意味着你只能通過在mac上來運行IOS的app測試。這點限制挺大。

發佈了17 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章