自動化測試,利用自動化測試工具,通過錄制/編程方式實現測試活動,發(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相同,這里不做過多闡述。