解析自動化測試工具-Selenium&Appium
自動化測試,利用自動化測試工具,通過錄制/編程方式實現測試活動,發(fā)現被測對象存在的缺陷,從而替代手工測試活動。自動化測試不局限于某個具體測試階段,也不局限被測對象的類型,只要滿足自動化測試的必要條件即可實施。
自動化測試條件
自動化測試與手工測試不同,工具不具備主觀能動性,無法針對被測對象的現狀做出智能判斷(至少目前尚不能),無法像人一樣具體問題具體分析,因此,在測試過程中實施自動化測試,必須具備以下幾個條件。
(1)長期項目或者產品,需求變化較小,UI相對穩(wěn)定;
(2)機械或頻繁的業(yè)務操作;
(3)系統(tǒng)接口劃分清晰,可獨立運行或者設置擋板程序模擬運行;
(4)測試活動開展初期制定自動化測試策略;
(5)有足夠的人力/財力投入
根據被測系統(tǒng)的結構形式,目前業(yè)內主要有兩款開源的基于UI層面的自動化測試工具應用較為廣泛,一是測試Web結構的Selenium,二是測試移動應用結構的Appium。商用的自動化測試工具則是HP公司生產的UFT(Unified Functional Testing)相對應用較為廣泛,但業(yè)內未來的應用趨勢是首選開源軟件,因此本書不介紹Selenium和Appium之外的自動化測試工具。
1.1 Selenium
Selenium由 thoughtworks公司研發(fā)、提供了豐富測試函數用于實施Web自動化的一款非常流行的測試工具。Selenium直接運行于瀏覽器中,更真實的模擬了用戶的業(yè)務行為,驗證被測對象的功能表現及在不同瀏覽器中的兼容性特性。與傳統(tǒng)的自動化測試工具不同,Selenium沒有獨立的操作UI界面,支持更多的編程語言,如Java、Python等,更為簡潔與快捷,易于測試工程師掌握應用。
Selenium實際上不是一個測試工具,而是一個工具集,其主要由三個核心組件構成:Selenium IDE、Selenium RC(Remote Control )及Selenium Grid。
1.Selenium IDE
Selenium開發(fā)測試腳本的集成開發(fā)環(huán)境,像FireFox的一個插件,可以錄制/回放用戶的基本操作,生成測試用例,運行單個測試用例或測試用例集。
2.Selenium Remote Control (RC)
支持多種平臺(Windows、Linux)和多種瀏覽器(IE、FireFox、Opera、Safari),可以用多種語言(Java,Ruby,Python,Perl,PHP,C#)編寫測試用例。Selenium為這些語言提供了不同的API及開發(fā)庫,便于自動編譯環(huán)境集成,從而構建高效的自動化測試框架。
3.Selenium Grid
允許Selenium-RC 針對規(guī)模龐大的測試案例集或者需要在不同環(huán)境中運行的測試案例集進行擴展。這樣,許多的測試集可以并行運行,從而提高測試效率。
Selenium自2004年誕生以來,從經歷了三個大版本變化:Selenium 1、Selenium 2及Selenium 3。Selenium 2又稱為WebDriver,WebDriver對瀏覽器的支持需要對應框架開發(fā)工程師做對應的開發(fā),Selenium必須操作真實瀏覽器,但是WebDriver可以用HTML Unit Driver來模擬瀏覽器,在內存中執(zhí)行用例,更加輕便。Selenium 1中測試工程師使用Selenium IDE錄制開發(fā)對應的測試腳本,但在WebDriver中,僅需引入對應的API,即可利用Java或Python等語言開發(fā)工具進行測試腳本開發(fā),Selenium IDE漸漸被放棄。
利用Selenium進行Web自動化測試時,可采用Python語言,Python常用的開發(fā)平臺為PyCharm。PyCharm是由JetBrains打造的一款Python IDE,功能齊全,編譯方便,目前軟件測試行業(yè)應用其做Python腳本開發(fā)較多。
Selenium與基于UI層面的自動化測試工具相比更為簡單,無須管理太多的對象,被測對象如果前端設計相對規(guī)范的話,自動化腳本開發(fā)相對較為容易。
Selenium本身擁有非常強大的功能,因為篇幅有限,本文僅做簡要介紹,感興趣的讀者可通過官網或者聯(lián)系作者,學習更多更實用的技能。
1.2 Appium
Web系統(tǒng)自動化因為歷史悠久,發(fā)展相對成熟,而移動應用自動化測試則是最近幾年才流行起來,兩者在測試技術上存在一些差異。
1. 測試工具不同
在Web測試上,測試人員一般使用UFT或者是Selenium等作為自動化測試工具,而在移動應用上一般采用Selenroid或者Appium等工具作為自動化測試工具
2. 測試平臺不同
在Web測試上一般測試平臺為Windows、Mac、Linux上,移動應用關注平臺為iOS、Android、FirefoxOS等
3. 技術成熟度不同
因Web與桌面應用程序比移動應用出生時間較早,自動化測試工具比移動應用自動化工具更加成熟。移動端的自動化測試仍需時間發(fā)展革新。
Appium支持Selenium WebDriver支持的所有語言,如Java、Object-C、Java、Php、Python、Ruby、C#或者Perl語言,更可以使用Selenium WebDriver的Api,實現了真正的跨平臺自動化測試。
1. Appium工作原理
Appium支持Android及iOS平臺的App測試,兩者的運行原理大體相同。
(1)Android平臺
?、儆蒀lient發(fā)起請求,經過中間服務套件,驅動App執(zhí)行相關的操作。 Client是測試人員開發(fā)的WebDriver測試腳本。
?、谥虚g服務套件則是Appium解析服務,Appium在服務端啟用4723端口,通過該端口實現Client與Appium Server通信。Appium Server把請求轉發(fā)給中間件Bootstrap.jar。Bootstrap.jar安裝在手機上.Bootstrap監(jiān)聽4724端口并接收Appium 命令,最終通過調?用UIAutomator命令來實現測試過程。
③Bootstrap將執(zhí)行的結果返回給Appium Server。Appium Server再將結果返回給Client。
(2)iOS平臺
?、儆蒀lient發(fā)起請求,經過中間服務套件,驅動App執(zhí)行相關的操作。 Client是測試人員開發(fā)的Webdriver測試腳本。
?、谥虚g服務套件則是Appium解析服務,Appium在服務端啟用4723端口,通過該端口實現Client與Appium Server通信。Appium Server調用instruments.js 啟動一個Socket Server,同時分出一個?進程運?instruments.app,將bootstrap.js(一個UIAutomation腳本)注入到設備從而與外界進行交互。
③Bootstrap.js將執(zhí)行的結果返回給Appium Server,Appium Server再將結果返回給 Client。
Android與iOS區(qū)別在于Appium 將請求轉發(fā)到bootstrap.js或者bootstrap.jar.然后由bootstrap 驅動UIAutomation或UIAutomator去設備上完成具體的動作。
2. Appium腳本架構
進行Appium自動化測試之前,需啟動Appium及被測對象,啟動了Appium客戶端后,利用編程工具執(zhí)行腳本時,Appium才能將腳本與被測設備建立聯(lián)接,從而實現自動化測試。如果不啟動客戶端,則不能使用WebDriver。
腳本中需首先導入WebDriver,然后配置Server,告訴Appium測試環(huán)境。使用Desired_caps函數進行設備聯(lián)接信息。
以Android為例,設備聯(lián)接參數主要有以下常用參數:
(1) desired_caps={}:設備參數信息,聲明為一個字典
(2) desired_caps['platformName']:應用平臺的類型,通常為Android、IOS或FirefoxOS
(3) desired_caps['platformVersion']:被測設備系統(tǒng)版本,此處使用的是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測試結束后,重置輸入法到原有狀態(tài)。默認值為False。
(9) driver=webdriver.Remote('http://www.ryjiaoyu.com:4723/wd/hub',desired_caps) 設置監(jiān)聽的端口信息。
上述內容設置了Appium與設備的通信信息。如果相關信息設置不正確,則無法實施測試。
3. UIAutomatorviewer查找元素
利用Appium實現App自動化測試時,與Selenium測試Web系統(tǒng)一樣,同樣需要定位UI中的元素,在Android-Sdk中提供了UIAutomatorviewer工具用來查看UI中的元素。
UIAutomatorviewer在Android-Sdk安裝目錄中的tools中,名稱為UIAutomatorviewer.bat。啟動后的界面如圖1-1所示。

圖1-1UIAutomatorviewer啟動界面
當真機或模擬器沒有啟動時,UIAutomatorviewer無法實現UI界面同步。因此,使用UIAutomatorviewer識別對象時,需先連接真機或啟動模擬器。這里以模擬器為例。
啟動Android-Sdk自帶的模擬器AVD Manager,創(chuàng)建Android模擬機,如圖1-2所示。

圖1-2創(chuàng)建Android模擬機
創(chuàng)建完成后啟動該模擬機,如圖1-3所示。

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

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

圖1-5同步App UI信息
此時即可進行App元素識別,便于后續(xù)的Appium腳本編程。
4. Hierarchyviewer
在設置設備啟動參數時,需確定被測對象的Activity,Android-Sdk開發(fā)包提供了hierarchyviewer.bat方便測試人員查找App的Activity。Hierarchyviewer.bat在Android-Sdk的tools目錄下。
進入Android-Sdk的tools目錄,雙擊Hierarchyviewer.bat,如果聯(lián)接了真機或啟動了虛擬機,Hierarchyviewer將會自動獲取設備主屏信息,如圖1-6所示。

圖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相同,這里不做過多闡述。

