吳 瑩
上海同濟(jì)大學(xué)軟件學(xué)院,上海 201804
基于Selenium 的Web自動(dòng)化測(cè)試框架
吳 瑩
上海同濟(jì)大學(xué)軟件學(xué)院,上海 201804
隨著Web應(yīng)用的快速發(fā)展,Agile開發(fā)方法和持續(xù)集成被廣泛運(yùn)用。軟件測(cè)試對(duì)于保證軟件產(chǎn)品的質(zhì)量至關(guān)重要,而通過(guò)搭建良好的測(cè)試框架來(lái)實(shí)現(xiàn)自動(dòng)化測(cè)試,可以降低各測(cè)試模塊之間的耦合,提高測(cè)試的效率和覆蓋率,同時(shí)也降低了測(cè)試的成本,更好的保證軟件質(zhì)量。
自動(dòng)化測(cè)試;測(cè)試框架;Selenium;TestNG
隨著Web應(yīng)用的增多,新的模式解決方案中以Web為核心的應(yīng)用也越來(lái)越多。而Web應(yīng)用程序的驗(yàn)收測(cè)試常常涉及一些手工任務(wù),例如打開一個(gè)瀏覽器,并執(zhí)行一個(gè)測(cè)試用例中所描述的操作。但是手工執(zhí)行的任務(wù)容易出現(xiàn)操作人員人為的錯(cuò)誤,也比較浪費(fèi)時(shí)間。因此,盡可能將這些任務(wù)自動(dòng)化,以消除人為因素,這是一種很好的做法。不僅可以提高軟件測(cè)試的可靠性,而且節(jié)約了成本,更好的保證軟件的質(zhì)量。如何提高自動(dòng)化測(cè)試腳本的維護(hù)性和移植性,成為一個(gè)亟待解決的問(wèn)題。
本文通過(guò)介紹自動(dòng)化測(cè)試工具Selenium,并結(jié)合測(cè)試框架TestNG,構(gòu)建分層的Selenium框架進(jìn)行復(fù)雜的Web應(yīng)用的自動(dòng)化測(cè)試。
軟件測(cè)試對(duì)軟件質(zhì)量的保證起著至關(guān)重要的作用,當(dāng)前軟件開發(fā)往往采取Agile開發(fā)方法和持續(xù)集成的策略。當(dāng)測(cè)試人員一次又一次地完成相同的測(cè)試時(shí),這些測(cè)試將變得非常令人厭煩。因此,通過(guò)自動(dòng)化測(cè)試來(lái)實(shí)現(xiàn)重復(fù)的和一致的回歸測(cè)試,可以提高測(cè)試效率、降低測(cè)試成本、保證一致性、實(shí)現(xiàn)快讀的回歸測(cè)試、提高測(cè)試的可靠性、避免人為因素。
自動(dòng)化測(cè)試工具很多,有開源的,也有商業(yè)化的,它們各有各的特點(diǎn)。常見的Web自動(dòng)化測(cè)試工具有:QTP、Win Runner、Load Runner、Robot、SilkTest、Selenium等。而 Selenium可以說(shuō)是測(cè)試Web最全面的開源自動(dòng)化工具,它支持多種瀏覽器和多種操作系統(tǒng),可以在Windows、Linux、Mac和Solaris上運(yùn)行,而且可以使用多種編程語(yǔ)言進(jìn)行構(gòu)建,如Java、C#、Perl、PHP、Python、Ruby,它可以測(cè)試的瀏覽器有IE、Firefox、Opera、Safari、Chrome。
1.2.1 Selenium組件
Selenium通過(guò)模擬用戶對(duì)Web頁(yè)面的各種操作,可以精確重現(xiàn)測(cè)試人員編寫的測(cè)試用例的步驟。Selenium包含的組件有:
1)Selenium Core:是驅(qū)動(dòng)Selenium工作的核心部分,它是用JavaScript編寫的函數(shù)集合,是Selenium IDE和Selenium RC 的引擎;
2)Selenium IDE:是Firefox 的一個(gè)插件,能夠錄制回放用戶在 Firefox 中的行為,具有代碼轉(zhuǎn)換功能,可以將Selenium語(yǔ)言的測(cè)試用例轉(zhuǎn)換為C#、Java、Python、Ruby等語(yǔ)言的測(cè)試用例,在Selenium-RC 中修改復(fù)用;
3)Selenium RC:Selenium Remote Control的縮寫,是使用具體的語(yǔ)言來(lái)編寫測(cè)試類。它支持多種瀏覽器,可以使用C#、Java等語(yǔ)言編寫測(cè)試用例,易于維護(hù),同時(shí)提供了很好的擴(kuò)展性。Selenium RC在 Web 瀏覽器與需要測(cè)試的 Web 應(yīng)用程序間架設(shè)代理服務(wù)器(Selenium Server),使得 JavaScript 引擎與被測(cè) Web 應(yīng)用程序同源,繞開同源策略的限制,進(jìn)而取得對(duì) Web 頁(yè)面進(jìn)行各種操作的權(quán)限。
1.2.2 Selenium基本原理
Selenium Server通過(guò)網(wǎng)絡(luò)與Selenium客戶端通訊,接受Selenium測(cè)試指令。Selenium Core被Selenium Server嵌入到瀏覽器頁(yè)面中,就是通過(guò)這些JavaScript函數(shù),實(shí)現(xiàn)了用程序?qū)g覽器進(jìn)行控制,執(zhí)行Selenium客戶端腳本中的測(cè)試用例,并通過(guò)網(wǎng)絡(luò)將執(zhí)行結(jié)果返回給Selenium客戶端,從而實(shí)現(xiàn)Web測(cè)試的自動(dòng)化。如下圖所示:
圖1 Selenium基本原理
1.2.3 Selenium Grid實(shí)現(xiàn)并行的web測(cè)試
Selenium Grid是Selenium 的一個(gè)擴(kuò)展,提供了一個(gè)類似于網(wǎng)絡(luò)集線器(Hub)的遠(yuǎn)程測(cè)試控制器,能夠?qū)y(cè)試請(qǐng)求發(fā)送到若干個(gè)遠(yuǎn)程機(jī)器的Selenium RC上。允許同時(shí)并行地、在不同的環(huán)境上運(yùn)行多個(gè)測(cè)試任務(wù),極大的加快了Web應(yīng)用的功能測(cè)試。如下圖所示:
圖2 Selenium Grid
1.2.4 Selenium2.0與WebDriver
WebDriver是一個(gè)自動(dòng)化測(cè)試Web應(yīng)用程序的工具,它的目的是提供一個(gè)友好的API,易于探索和理解,有助于使我們的測(cè)試更易于閱讀和維護(hù)。它不依賴于任何特定的測(cè)試框架,因此在單元測(cè)試或者一個(gè)普通的main方法中都可以很好的使用它。WebDriver是完全獨(dú)立的,在使用它之前不需要啟動(dòng)任何額外的進(jìn)程或者運(yùn)行任何安裝程序,這與Selenium RC中的代理服務(wù)器是不同的。
而Selenium2.0的主要的新功能是將WebDriver API集成到Selenium 1.0中,這將解決隨著提供替代編程接口所帶來(lái)的局限性。它的目標(biāo)是建立一個(gè)面向?qū)ο蟮腁PI,它提供了對(duì)大量瀏覽器的更多的支持,以及對(duì)現(xiàn)代先進(jìn)的web應(yīng)用程序中的測(cè)試問(wèn)題的更好的支持。
TestNG尤其適合與Selenium結(jié)合使用,可以實(shí)現(xiàn)其他測(cè)試框架無(wú)法實(shí)現(xiàn)的測(cè)試,例如使用依賴項(xiàng)進(jìn)行測(cè)試,重新運(yùn)行失敗了的測(cè)試,以及使用單獨(dú)文件中定義的參數(shù)進(jìn)行參數(shù)化測(cè)試。所有這些特性結(jié)合在一起,使它在眾多 Web 應(yīng)用程序測(cè)試框架中脫穎而出。
在測(cè)試自動(dòng)化中,測(cè)試代碼不僅僅包含測(cè)試邏輯,還包含許多其他的代碼,比如URL拼接、Html/xml解析、訪問(wèn)UI控件,等等。若把測(cè)試邏輯與這些無(wú)關(guān)的代碼混在一起,測(cè)試邏輯將很難理解,也不容易維護(hù)。而采用分層結(jié)構(gòu)可以解決這一問(wèn)題。在分層的測(cè)試框架中,其三層結(jié)構(gòu)為:1)數(shù)據(jù)層,包含UI數(shù)據(jù)和測(cè)試數(shù)據(jù);2)測(cè)試用例層,包含業(yè)務(wù)邏輯和控制邏輯。驅(qū)動(dòng)程序WebDriver負(fù)責(zé)測(cè)試數(shù)據(jù)的載入和測(cè)試腳本的運(yùn)行;3)待測(cè)系統(tǒng)層。如下圖所示:
圖3 分層測(cè)試框架
TestNG支持三個(gè)級(jí)別的測(cè)試,分別是:Test Suite、Test、Test Method,通過(guò)結(jié)合注釋(annotation)的使用,可以實(shí)現(xiàn)測(cè)試用例的分組。通過(guò)使用testng.xml配置文件,可以實(shí)現(xiàn)參數(shù)化測(cè)試,這樣使測(cè)試案例的實(shí)現(xiàn)更加靈活。如下示例代碼可以看到:
圖4 示例代碼
上面的代碼中,注釋Parameters指定的參數(shù)在TestNG測(cè)試框架的配置文件testng.xml里具體定義,只要修改testng.xml中的參數(shù)值,就能由輸入?yún)?shù)驅(qū)動(dòng)不同的測(cè)試用例。如下所示:
圖5 testng.xml配置文件
Selenium極大的簡(jiǎn)化了用戶驗(yàn)收測(cè)試,尤其當(dāng)使用TestNG驅(qū)動(dòng)的時(shí)候,在完全自動(dòng)化的驗(yàn)收測(cè)試中使用這些特性令它更加出眾?;赟elenium和TestNG搭建的測(cè)試平臺(tái),可以廣泛的應(yīng)用于Web自動(dòng)化測(cè)試。
[1]馮振華,高菊,曾紅衛(wèi).Web 應(yīng)用自動(dòng)化測(cè)試的研究[M].計(jì)算機(jī)工程與設(shè)計(jì),2010.
[2]周景才,楊家紅,陳毅波.模型驅(qū)動(dòng)的自動(dòng)化測(cè)試架構(gòu)[M].計(jì)算機(jī)工程與應(yīng)用,2010.
[3]鄧青華.軟件自動(dòng)化測(cè)試工具研究[J].軟件導(dǎo)刊,2011.[4]Antawan Holmes,Marc Kellogg.Automating Functional Tests Using Selenium[M],2009.
[5]Xinchun Wang,Peijie Xu,Build an Auto Testing Framework Based on Selenium and FitNesse,2009 International Conference on Information Technology and Computer Science.
[6]http://seleniumhq.org/docs/.
[7]http://testng.org/doc/documentation-main.html
[8]Chris McMahon,History of a Large Test Automation Project Using Selenium,2009 Agile Conference.
TP311.5
A
1674-6708(2011)51-0187-02
吳瑩,碩士,研究方向:軟件測(cè)試