自動(dòng)化測(cè)試,利用自動(dòng)化測(cè)試工具,通過錄制/編程方式實(shí)現(xiàn)測(cè)試活動(dòng),發(fā)現(xiàn)被測(cè)對(duì)象存在的缺陷,從而替代手工測(cè)試活動(dòng)。自動(dòng)化測(cè)試不局限于某個(gè)具體測(cè)試階段,也不局限被測(cè)對(duì)象的類型,只要滿足自動(dòng)化測(cè)試的必要條件即可實(shí)施。

自動(dòng)化測(cè)試條件

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

(1)長(zhǎng)期項(xiàng)目或者產(chǎn)品,需求變化較小,UI相對(duì)穩(wěn)定;

(2)機(jī)械或頻繁的業(yè)務(wù)操作;

(3)系統(tǒng)接口劃分清晰,可獨(dú)立運(yùn)行或者設(shè)置擋板程序模擬運(yùn)行;

(4)測(cè)試活動(dòng)開展初期制定自動(dòng)化測(cè)試策略;

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

根據(jù)被測(cè)系統(tǒng)的結(jié)構(gòu)形式,目前業(yè)內(nèi)主要有兩款開源的基于UI層面的自動(dòng)化測(cè)試工具應(yīng)用較為廣泛,一是測(cè)試Web結(jié)構(gòu)的Selenium,二是測(cè)試移動(dòng)應(yīng)用結(jié)構(gòu)的Appium。商用的自動(dòng)化測(cè)試工具則是HP公司生產(chǎn)的UFT(Unified Functional Testing)相對(duì)應(yīng)用較為廣泛,但業(yè)內(nèi)未來(lái)的應(yīng)用趨勢(shì)是首選開源軟件,因此本書不介紹Selenium和Appium之外的自動(dòng)化測(cè)試工具。

1.1 Selenium

Selenium由 thoughtworks公司研發(fā)、提供了豐富測(cè)試函數(shù)用于實(shí)施Web自動(dòng)化的一款非常流行的測(cè)試工具。Selenium直接運(yùn)行于瀏覽器中,更真實(shí)的模擬了用戶的業(yè)務(wù)行為,驗(yàn)證被測(cè)對(duì)象的功能表現(xiàn)及在不同瀏覽器中的兼容性特性。與傳統(tǒng)的自動(dòng)化測(cè)試工具不同,Selenium沒有獨(dú)立的操作UI界面,支持更多的編程語(yǔ)言,如Java、Python等,更為簡(jiǎn)潔與快捷,易于測(cè)試工程師掌握應(yīng)用。

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

1.Selenium IDE

Selenium開發(fā)測(cè)試腳本的集成開發(fā)環(huán)境,像FireFox的一個(gè)插件,可以錄制/回放用戶的基本操作,生成測(cè)試用例,運(yùn)行單個(gè)測(cè)試用例或測(cè)試用例集。

2.Selenium Remote Control (RC)

支持多種平臺(tái)(Windows、Linux)和多種瀏覽器(IE、FireFox、Opera、Safari),可以用多種語(yǔ)言(Java,Ruby,Python,Perl,PHP,C#)編寫測(cè)試用例。Selenium為這些語(yǔ)言提供了不同的API及開發(fā)庫(kù),便于自動(dòng)編譯環(huán)境集成,從而構(gòu)建高效的自動(dòng)化測(cè)試框架。

3.Selenium Grid

允許Selenium-RC 針對(duì)規(guī)模龐大的測(cè)試案例集或者需要在不同環(huán)境中運(yùn)行的測(cè)試案例集進(jìn)行擴(kuò)展。這樣,許多的測(cè)試集可以并行運(yùn)行,從而提高測(cè)試效率。

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

利用Selenium進(jìn)行Web自動(dòng)化測(cè)試時(shí),可采用Python語(yǔ)言,Python常用的開發(fā)平臺(tái)為PyCharm。PyCharm是由JetBrains打造的一款Python IDE,功能齊全,編譯方便,目前軟件測(cè)試行業(yè)應(yīng)用其做Python腳本開發(fā)較多。

Selenium與基于UI層面的自動(dòng)化測(cè)試工具相比更為簡(jiǎn)單,無(wú)須管理太多的對(duì)象,被測(cè)對(duì)象如果前端設(shè)計(jì)相對(duì)規(guī)范的話,自動(dòng)化腳本開發(fā)相對(duì)較為容易。

Selenium本身?yè)碛蟹浅?qiáng)大的功能,因?yàn)槠邢蓿疚膬H做簡(jiǎn)要介紹,感興趣的讀者可通過官網(wǎng)或者聯(lián)系作者,學(xué)習(xí)更多更實(shí)用的技能。

1.2 Appium

Web系統(tǒng)自動(dòng)化因?yàn)闅v史悠久,發(fā)展相對(duì)成熟,而移動(dòng)應(yīng)用自動(dòng)化測(cè)試則是最近幾年才流行起來(lái),兩者在測(cè)試技術(shù)上存在一些差異。

1. 測(cè)試工具不同

在Web測(cè)試上,測(cè)試人員一般使用UFT或者是Selenium等作為自動(dòng)化測(cè)試工具,而在移動(dòng)應(yīng)用上一般采用Selenroid或者Appium等工具作為自動(dòng)化測(cè)試工具

2. 測(cè)試平臺(tái)不同

在Web測(cè)試上一般測(cè)試平臺(tái)為Windows、Mac、Linux上,移動(dòng)應(yīng)用關(guān)注平臺(tái)為iOS、Android、FirefoxOS等

3. 技術(shù)成熟度不同

因Web與桌面應(yīng)用程序比移動(dòng)應(yīng)用出生時(shí)間較早,自動(dòng)化測(cè)試工具比移動(dòng)應(yīng)用自動(dòng)化工具更加成熟。移動(dòng)端的自動(dòng)化測(cè)試仍需時(shí)間發(fā)展革新。

Appium支持Selenium WebDriver支持的所有語(yǔ)言,如Java、Object-C、Java、Php、Python、Ruby、C#或者Perl語(yǔ)言,更可以使用Selenium WebDriver的Api,實(shí)現(xiàn)了真正的跨平臺(tái)自動(dòng)化測(cè)試。

1. Appium工作原理

Appium支持Android及iOS平臺(tái)的App測(cè)試,兩者的運(yùn)行原理大體相同。

(1)Android平臺(tái)

①由Client發(fā)起請(qǐng)求,經(jīng)過中間服務(wù)套件,驅(qū)動(dòng)App執(zhí)行相關(guān)的操作。 Client是測(cè)試人員開發(fā)的WebDriver測(cè)試腳本。

②中間服務(wù)套件則是Appium解析服務(wù),Appium在服務(wù)端啟用4723端口,通過該端口實(shí)現(xiàn)Client與Appium Server通信。Appium Server把請(qǐng)求轉(zhuǎn)發(fā)給中間件Bootstrap.jar。Bootstrap.jar安裝在手機(jī)上.Bootstrap監(jiān)聽4724端口并接收Appium 命令,最終通過調(diào)?用UIAutomator命令來(lái)實(shí)現(xiàn)測(cè)試過程。

③Bootstrap將執(zhí)行的結(jié)果返回給Appium Server。Appium Server再將結(jié)果返回給Client。

(2)iOS平臺(tái)

①由Client發(fā)起請(qǐng)求,經(jīng)過中間服務(wù)套件,驅(qū)動(dòng)App執(zhí)行相關(guān)的操作。 Client是測(cè)試人員開發(fā)的Webdriver測(cè)試腳本。

②中間服務(wù)套件則是Appium解析服務(wù),Appium在服務(wù)端啟用4723端口,通過該端口實(shí)現(xiàn)Client與Appium Server通信。Appium Server調(diào)用instruments.js 啟動(dòng)一個(gè)Socket Server,同時(shí)分出一個(gè)?進(jìn)程運(yùn)?instruments.app,將bootstrap.js(一個(gè)UIAutomation腳本)注入到設(shè)備從而與外界進(jìn)行交互。

③Bootstrap.js將執(zhí)行的結(jié)果返回給Appium Server,Appium Server再將結(jié)果返回給 Client。

Android與iOS區(qū)別在于Appium 將請(qǐng)求轉(zhuǎn)發(fā)到bootstrap.js或者bootstrap.jar.然后由bootstrap 驅(qū)動(dòng)UIAutomation或UIAutomator去設(shè)備上完成具體的動(dòng)作。

2. Appium腳本架構(gòu)

進(jìn)行Appium自動(dòng)化測(cè)試之前,需啟動(dòng)Appium及被測(cè)對(duì)象,啟動(dòng)了Appium客戶端后,利用編程工具執(zhí)行腳本時(shí),Appium才能將腳本與被測(cè)設(shè)備建立聯(lián)接,從而實(shí)現(xiàn)自動(dòng)化測(cè)試。如果不啟動(dòng)客戶端,則不能使用WebDriver。

腳本中需首先導(dǎo)入WebDriver,然后配置Server,告訴Appium測(cè)試環(huán)境。使用Desired_caps函數(shù)進(jìn)行設(shè)備聯(lián)接信息。

以Android為例,設(shè)備聯(lián)接參數(shù)主要有以下常用參數(shù):

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

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

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

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

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

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

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

(8) desired_caps['resetKeyboard']:Unicode測(cè)試結(jié)束后,重置輸入法到原有狀態(tài)。默認(rèn)值為False。

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

上述內(nèi)容設(shè)置了Appium與設(shè)備的通信信息。如果相關(guān)信息設(shè)置不正確,則無(wú)法實(shí)施測(cè)試。

3. UIAutomatorviewer查找元素

利用Appium實(shí)現(xiàn)App自動(dòng)化測(cè)試時(shí),與Selenium測(cè)試Web系統(tǒng)一樣,同樣需要定位UI中的元素,在Android-Sdk中提供了UIAutomatorviewer工具用來(lái)查看UI中的元素。

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

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-1UIAutomatorviewer啟動(dòng)界面

當(dāng)真機(jī)或模擬器沒有啟動(dòng)時(shí),UIAutomatorviewer無(wú)法實(shí)現(xiàn)UI界面同步。因此,使用UIAutomatorviewer識(shí)別對(duì)象時(shí),需先連接真機(jī)或啟動(dòng)模擬器。這里以模擬器為例。

啟動(dòng)Android-Sdk自帶的模擬器AVD Manager,創(chuàng)建Android模擬機(jī),如圖1-2所示。

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-2創(chuàng)建Android模擬機(jī)

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

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-3 虛擬機(jī)成功啟動(dòng)界面

虛擬機(jī)啟動(dòng)后,在cmd窗口中通過adb devices檢查是否成功識(shí)別該設(shè)備。如圖1-4所示。

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-4設(shè)備成功識(shí)別界面

虛擬機(jī)被成功識(shí)別后,即可運(yùn)行UIAutomatorviewer通信虛擬機(jī),獲取App信息。如圖1-5所示。

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-5同步App UI信息

此時(shí)即可進(jìn)行App元素識(shí)別,便于后續(xù)的Appium腳本編程。

4. Hierarchyviewer

在設(shè)置設(shè)備啟動(dòng)參數(shù)時(shí),需確定被測(cè)對(duì)象的Activity,Android-Sdk開發(fā)包提供了hierarchyviewer.bat方便測(cè)試人員查找App的Activity。Hierarchyviewer.bat在Android-Sdk的tools目錄下。

進(jìn)入Android-Sdk的tools目錄,雙擊Hierarchyviewer.bat,如果聯(lián)接了真機(jī)或啟動(dòng)了虛擬機(jī),Hierarchyviewer將會(huì)自動(dòng)獲取設(shè)備主屏信息,如圖1-6所示。

解析自動(dòng)化測(cè)試工具-Selenium&Appium

圖1-6獲取App Activity信息

上圖顯示了虛擬機(jī)中App的Activity為:

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

通過上面的相關(guān)介紹,設(shè)置設(shè)備啟動(dòng)信息如下:

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實(shí)施測(cè)試組織。

6. Appium與HTMLTestRunner

Appium除了可以利用UnitTest外,還可以使用HTMLTestRunner處理測(cè)試報(bào)告,具體應(yīng)用方法與Selenium相同,這里不做過多闡述。