自動化測試,利用自動化測試工具,通過錄制/編程方式實現測試活動,發現被測對象存在的缺陷,從而替代手工測試活動。自動化測試不局限于某個具體測試階段,也不局限被測對象的類型,只要滿足自動化測試的必要條件即可實施。

自動化測試條件

自動化測試與手工測試不同,工具不具備主觀能動性,無法針對被測對象的現狀做出智能判斷(至少目前尚不能),無法像人一樣具體問題具體分析,因此,在測試過程中實施自動化測試,必須具備以下幾個條件。

(1)長期項目或者產品,需求變化較小,UI相對穩定;

(2)機械或頻繁的業務操作;

(3)系統接口劃分清晰,可獨立運行或者設置擋板程序模擬運行;

(4)測試活動開展初期制定自動化測試策略;

(5)有足夠的人力/財力投入

根據被測系統的結構形式,目前業內主要有兩款開源的基于UI層面的自動化測試工具應用較為廣泛,一是測試Web結構的Selenium,二是測試移動應用結構的Appium。商用的自動化測試工具則是HP公司生產的UFT(Unified Functional Testing)相對應用較為廣泛,但業內未來的應用趨勢是首選開源軟件,因此本書不介紹Selenium和Appium之外的自動化測試工具。

1.1 Selenium

Selenium由 thoughtworks公司研發、提供了豐富測試函數用于實施Web自動化的一款非常流行的測試工具。Selenium直接運行于瀏覽器中,更真實的模擬了用戶的業務行為,驗證被測對象的功能表現及在不同瀏覽器中的兼容性特性。與傳統的自動化測試工具不同,Selenium沒有獨立的操作UI界面,支持更多的編程語言,如Java、Python等,更為簡潔與快捷,易于測試工程師掌握應用。

Selenium實際上不是一個測試工具,而是一個工具集,其主要由三個核心組件構成:Selenium IDE、Selenium RC(Remote Control )及Selenium Grid。

1.Selenium IDE

Selenium開發測試腳本的集成開發環境,像FireFox的一個插件,可以錄制/回放用戶的基本操作,生成測試用例,運行單個測試用例或測試用例集。

2.Selenium Remote Control (RC)

支持多種平臺(Windows、Linux)和多種瀏覽器(IE、FireFox、Opera、Safari),可以用多種語言(Java,Ruby,Python,Perl,PHP,C#)編寫測試用例。Selenium為這些語言提供了不同的API及開發庫,便于自動編譯環境集成,從而構建高效的自動化測試框架。

3.Selenium Grid

允許Selenium-RC 針對規模龐大的測試案例集或者需要在不同環境中運行的測試案例集進行擴展。這樣,許多的測試集可以并行運行,從而提高測試效率。

Selenium自2004年誕生以來,從經歷了三個大版本變化:Selenium 1、Selenium 2及Selenium 3。Selenium 2又稱為WebDriver,WebDriver對瀏覽器的支持需要對應框架開發工程師做對應的開發,Selenium必須操作真實瀏覽器,但是WebDriver可以用HTML Unit Driver來模擬瀏覽器,在內存中執行用例,更加輕便。Selenium 1中測試工程師使用Selenium IDE錄制開發對應的測試腳本,但在WebDriver中,僅需引入對應的API,即可利用Java或Python等語言開發工具進行測試腳本開發,Selenium IDE漸漸被放棄。

利用Selenium進行Web自動化測試時,可采用Python語言,Python常用的開發平臺為PyCharm。PyCharm是由JetBrains打造的一款Python IDE,功能齊全,編譯方便,目前軟件測試行業應用其做Python腳本開發較多。

Selenium與基于UI層面的自動化測試工具相比更為簡單,無須管理太多的對象,被測對象如果前端設計相對規范的話,自動化腳本開發相對較為容易。

Selenium本身擁有非常強大的功能,因為篇幅有限,本文僅做簡要介紹,感興趣的讀者可通過官網或者聯系作者,學習更多更實用的技能。

1.2 Appium

Web系統自動化因為歷史悠久,發展相對成熟,而移動應用自動化測試則是最近幾年才流行起來,兩者在測試技術上存在一些差異。

1. 測試工具不同

在Web測試上,測試人員一般使用UFT或者是Selenium等作為自動化測試工具,而在移動應用上一般采用Selenroid或者Appium等工具作為自動化測試工具

2. 測試平臺不同

在Web測試上一般測試平臺為Windows、Mac、Linux上,移動應用關注平臺為iOS、Android、FirefoxOS等

3. 技術成熟度不同

因Web與桌面應用程序比移動應用出生時間較早,自動化測試工具比移動應用自動化工具更加成熟。移動端的自動化測試仍需時間發展革新。

Appium支持Selenium WebDriver支持的所有語言,如Java、Object-C、Java、Php、Python、Ruby、C#或者Perl語言,更可以使用Selenium WebDriver的Api,實現了真正的跨平臺自動化測試。

1. Appium工作原理

Appium支持Android及iOS平臺的App測試,兩者的運行原理大體相同。

(1)Android平臺

①由Client發起請求,經過中間服務套件,驅動App執行相關的操作。 Client是測試人員開發的WebDriver測試腳本。

②中間服務套件則是Appium解析服務,Appium在服務端啟用4723端口,通過該端口實現Client與Appium Server通信。Appium Server把請求轉發給中間件Bootstrap.jar。Bootstrap.jar安裝在手機上.Bootstrap監聽4724端口并接收Appium 命令,最終通過調?用UIAutomator命令來實現測試過程。

③Bootstrap將執行的結果返回給Appium Server。Appium Server再將結果返回給Client。

(2)iOS平臺

①由Client發起請求,經過中間服務套件,驅動App執行相關的操作。 Client是測試人員開發的Webdriver測試腳本。

②中間服務套件則是Appium解析服務,Appium在服務端啟用4723端口,通過該端口實現Client與Appium Server通信。Appium Server調用instruments.js 啟動一個Socket Server,同時分出一個?進程運?instruments.app,將bootstrap.js(一個UIAutomation腳本)注入到設備從而與外界進行交互。

③Bootstrap.js將執行的結果返回給Appium Server,Appium Server再將結果返回給 Client。

Android與iOS區別在于Appium 將請求轉發到bootstrap.js或者bootstrap.jar.然后由bootstrap 驅動UIAutomation或UIAutomator去設備上完成具體的動作。

2. Appium腳本架構

進行Appium自動化測試之前,需啟動Appium及被測對象,啟動了Appium客戶端后,利用編程工具執行腳本時,Appium才能將腳本與被測設備建立聯接,從而實現自動化測試。如果不啟動客戶端,則不能使用WebDriver。

腳本中需首先導入WebDriver,然后配置Server,告訴Appium測試環境。使用Desired_caps函數進行設備聯接信息。

以Android為例,設備聯接參數主要有以下常用參數:

(1) desired_caps={}:設備參數信息,聲明為一個字典

(2) desired_caps['platformName']:應用平臺的類型,通常為Android、IOS或FirefoxOS

(3) desired_caps['platformVersion']:被測設備系統版本,此處使用的是Android 4.4.2版本

(4) desired_caps['deviceName']:設備名稱,通常為手機類型或模擬器模擬。通過adb devices查看。

(5) desired_caps['appPackage']:Android 應用程序包的包名,如此處的'com.test.ride'

(6) desired_caps['appActivity']:Android應用包中需啟動的Activity名稱,通常需要最先聲明。Activity可通過源代碼直接看到,如果沒有源代碼,則可以反向編譯或者通過打印的方式檢測。

(7) desired_caps['unicodeKeyboard']:設置鍵盤輸入法類型為unicode,默認值為False

(8) desired_caps['resetKeyboard']:Unicode測試結束后,重置輸入法到原有狀態。默認值為False。

(9) driver=webdriver.Remote('http://www.ryjiaoyu.com:4723/wd/hub',desired_caps) 設置監聽的端口信息。

上述內容設置了Appium與設備的通信信息。如果相關信息設置不正確,則無法實施測試。

3. UIAutomatorviewer查找元素

利用Appium實現App自動化測試時,與Selenium測試Web系統一樣,同樣需要定位UI中的元素,在Android-Sdk中提供了UIAutomatorviewer工具用來查看UI中的元素。

UIAutomatorviewer在Android-Sdk安裝目錄中的tools中,名稱為UIAutomatorviewer.bat。啟動后的界面如圖1-1所示。

解析自動化測試工具-Selenium&Appium

圖1-1UIAutomatorviewer啟動界面

當真機或模擬器沒有啟動時,UIAutomatorviewer無法實現UI界面同步。因此,使用UIAutomatorviewer識別對象時,需先連接真機或啟動模擬器。這里以模擬器為例。

啟動Android-Sdk自帶的模擬器AVD Manager,創建Android模擬機,如圖1-2所示。

解析自動化測試工具-Selenium&Appium

圖1-2創建Android模擬機

創建完成后啟動該模擬機,如圖1-3所示。

解析自動化測試工具-Selenium&Appium

圖1-3 虛擬機成功啟動界面

虛擬機啟動后,在cmd窗口中通過adb devices檢查是否成功識別該設備。如圖1-4所示。

解析自動化測試工具-Selenium&Appium

圖1-4設備成功識別界面

虛擬機被成功識別后,即可運行UIAutomatorviewer通信虛擬機,獲取App信息。如圖1-5所示。

解析自動化測試工具-Selenium&Appium

圖1-5同步App UI信息

此時即可進行App元素識別,便于后續的Appium腳本編程。

4. Hierarchyviewer

在設置設備啟動參數時,需確定被測對象的Activity,Android-Sdk開發包提供了hierarchyviewer.bat方便測試人員查找App的Activity。Hierarchyviewer.bat在Android-Sdk的tools目錄下。

進入Android-Sdk的tools目錄,雙擊Hierarchyviewer.bat,如果聯接了真機或啟動了虛擬機,Hierarchyviewer將會自動獲取設備主屏信息,如圖1-6所示。

解析自動化測試工具-Selenium&Appium

圖1-6獲取App Activity信息

上圖顯示了虛擬機中App的Activity為:

com.choucheng.ride.ui.activity.login.LoginActivity

通過上面的相關介紹,設置設備啟動信息如下:

desired_caps={}

desired_caps['platformName']='Android'

desired_caps['platformVersion']='4.4.2'

desired_caps['deviceName']='hzdl'

desired_caps['appPackage']='com.test.ride'

desired_caps['appActivity']='com.choucheng.ride.ui.activity.login.LoginActivity'

desired_caps['unicodeKeyboard']='Ture'

desired_caps['resetKeyboard']='Ture'

driver=webdriver.Remote('http:// http://www.ryjiaoyu.com:4723/wd/hub',desired_caps)

5. Appium與UnitTest

與Selenium一樣,Appium同樣可以使用UnitTest實施測試組織。

6. Appium與HTMLTestRunner

Appium除了可以利用UnitTest外,還可以使用HTMLTestRunner處理測試報告,具體應用方法與Selenium相同,這里不做過多闡述。