李 艷,任洪敏,劉 芳
(上海海事大學(xué) 信息工程學(xué)院,上海 201306)
基于Selenium JS UI的自動(dòng)化測(cè)試框架設(shè)計(jì)與實(shí)現(xiàn)
李 艷,任洪敏,劉 芳
(上海海事大學(xué) 信息工程學(xué)院,上海 201306)
Web技術(shù)的發(fā)展,以及Web UI組件的廣泛應(yīng)用,給自動(dòng)化測(cè)試帶來了挑戰(zhàn)。因此設(shè)計(jì)了一套基于Selenium JS UI的自動(dòng)化測(cè)試框架。該框架結(jié)合了TestNG、Selenium框架,并且利用了關(guān)鍵字驅(qū)動(dòng)、數(shù)據(jù)驅(qū)動(dòng)技術(shù)。將框架分為關(guān)鍵字、測(cè)試用例、執(zhí)行引擎、配置報(bào)告四層,使測(cè)試用例、測(cè)試腳本、測(cè)試數(shù)據(jù)相分離,跨平臺(tái),不僅解決了自動(dòng)化測(cè)試定位難的問題,而且大大提高了測(cè)試效率。
自動(dòng)化測(cè)試框架;Selenium;Web UI組件;關(guān)鍵字驅(qū)動(dòng)
目前大多數(shù)企業(yè)的應(yīng)用系統(tǒng)都是基于Web的應(yīng)用系統(tǒng),人們可以通過Internet瀏覽器來訪問它們。當(dāng)前很多公司采用持續(xù)改進(jìn)的開發(fā)模式來應(yīng)對(duì)這種趨勢(shì)。在持續(xù)開發(fā)模式中,需要不斷地進(jìn)行迭代測(cè)試。傳統(tǒng)人工測(cè)試會(huì)變得缺乏效率,很難滿足需求,這個(gè)時(shí)候必須引入自動(dòng)化測(cè)試[1]。自動(dòng)化測(cè)試框架是由一些假設(shè)、概念和為自動(dòng)化軟件測(cè)試提供支持的實(shí)踐組成的集合[2]。目前的自動(dòng)化測(cè)試框架主要分為錄制回放、數(shù)據(jù)驅(qū)動(dòng)技術(shù)、關(guān)鍵字驅(qū)動(dòng)技術(shù)、數(shù)據(jù)驅(qū)動(dòng)技術(shù)、混合型驅(qū)動(dòng)技術(shù)等[3]。
文中提出一種基于Selenium JS UI自動(dòng)化測(cè)試框架,主要針對(duì)Web系統(tǒng)頁(yè)面頻繁變化問題,提出一種新的UI定位方法,結(jié)合混合型驅(qū)動(dòng)測(cè)試框架設(shè)計(jì)一套能適應(yīng)于不同Web 應(yīng)用系統(tǒng)的測(cè)試方法,該框架將測(cè)試腳本及測(cè)試數(shù)據(jù)相分離,提高了測(cè)試腳本的可復(fù)用性及測(cè)試效率。
1.1自動(dòng)化測(cè)試框架工作原理
自動(dòng)化測(cè)試平臺(tái)是將多個(gè)開源軟件組合進(jìn)行二次開發(fā),結(jié)合不同的框架優(yōu)勢(shì),從而達(dá)到更好的測(cè)試性能。主要完成的工作是:調(diào)研不同的Web UI組件庫(kù),將UI通用操作設(shè)定為關(guān)鍵字,并將關(guān)鍵字保存在關(guān)鍵字庫(kù)中,提出一種新的UI定位方法,基于Web應(yīng)用系統(tǒng),定位頁(yè)面元素和操作,并從關(guān)鍵字庫(kù)中提取相關(guān)關(guān)鍵字,實(shí)現(xiàn)關(guān)鍵字函數(shù),生成一套測(cè)試用例的語(yǔ)法規(guī)約,編寫執(zhí)行引擎,由執(zhí)行引擎去調(diào)度測(cè)試腳本,并監(jiān)聽測(cè)試結(jié)果,按自定義格式生成測(cè)試報(bào)告。
1.2自動(dòng)化測(cè)試框架架構(gòu)
自動(dòng)化測(cè)試框架總體架構(gòu)如圖1所示,主要分為關(guān)鍵字層、測(cè)試用例層、執(zhí)行引擎層、配置報(bào)告層四大層。
圖1 自動(dòng)化測(cè)試框架結(jié)構(gòu)圖
(1)關(guān)鍵字層中主要包含關(guān)鍵字的定義、關(guān)鍵字函數(shù)的實(shí)現(xiàn)以及關(guān)鍵字庫(kù)管理等。關(guān)鍵字庫(kù)管理主要用來管理關(guān)鍵字、對(duì)其進(jìn)行增刪改等操作。
(2)測(cè)試用例層中包含測(cè)試用例語(yǔ)法規(guī)范以及測(cè)試用例集,測(cè)試用例采用Excel表格維護(hù),一行代表一條測(cè)試用例,測(cè)試用例由測(cè)試?yán)Q、測(cè)試步驟序號(hào)、測(cè)試步驟描述、關(guān)鍵字和操作值,以及測(cè)試結(jié)果組成。
(3)執(zhí)行引擎層主要負(fù)責(zé)解析測(cè)試用例,提取關(guān)鍵字和操作值并進(jìn)行整合,以此執(zhí)行測(cè)試腳本,完成自動(dòng)化測(cè)試及生成測(cè)試報(bào)告等。
(4)配置報(bào)告層主要是配置文件的輸入,以及測(cè)試報(bào)告的輸出。
2.1界面元素定位技術(shù)
Selenium 測(cè)試工具操作簡(jiǎn)單,功能比較單一,對(duì)Web UI 元素支持不全面,最常用的是采用Xpath定位技術(shù),但Xpath定位的不穩(wěn)定性及冗余性給測(cè)試人員帶來諸多麻煩,因此本文提出一種新的UI元素定位技術(shù),在Web UI類庫(kù)中存放UI組件庫(kù)和接口的方法。Web 應(yīng)用系統(tǒng)中UI定位從被測(cè)系統(tǒng)頁(yè)面入手,采用JS 和Web UI庫(kù)中組件接口和方法定位頁(yè)面元素,代替了Selenium 庫(kù)函數(shù)中的findElement(By. xpath(“***”))對(duì)頁(yè)面元素的定位,減少了Xpath的使用,使用Web UI定位技術(shù)的優(yōu)點(diǎn)是定位精確,且效率高。
2.2定義關(guān)鍵字
關(guān)鍵字的思想是將界面元素名與測(cè)試工具對(duì)象名的分離、執(zhí)行動(dòng)作與具體實(shí)現(xiàn)細(xì)節(jié)的分離以及測(cè)試腳本與測(cè)試數(shù)據(jù)的分離[4]。文中提出調(diào)研不同的Web UI組件庫(kù),將這些UI庫(kù)中都具有的、常用的Web UI組件:執(zhí)行動(dòng)作定義為關(guān)鍵字,將這些關(guān)鍵字保存至關(guān)鍵字庫(kù)中,除這些關(guān)鍵字之外,還會(huì)增加一些特定的關(guān)鍵字,即檢查點(diǎn)函數(shù)。如通常會(huì)比較兩個(gè)String 數(shù)組是否相等以及獲取當(dāng)前行數(shù)等,這些都是與特定的Web程序無關(guān)而且本身API沒有提供這些函數(shù)[5],將這些自定義的關(guān)鍵字收集起來統(tǒng)一放在關(guān)鍵字庫(kù)中,進(jìn)而可應(yīng)用于不同的Web 項(xiàng)目中。表1以jEasy UI中DataGrid 控件為例,說明定義關(guān)鍵字的方法。
2.3實(shí)現(xiàn)關(guān)鍵字
關(guān)鍵字的設(shè)計(jì)是將執(zhí)行動(dòng)作與具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行分離,為了增強(qiáng)測(cè)試腳本的可復(fù)用性,需要將測(cè)試數(shù)據(jù)和界面元素從測(cè)試腳本中獨(dú)立出來并存于專用文件中,形成相
表1 定義關(guān)鍵字方法表
應(yīng)的測(cè)試數(shù)據(jù)集和函數(shù)庫(kù)。關(guān)鍵字的實(shí)現(xiàn)是自定義的函數(shù)庫(kù),函數(shù)的命名是與關(guān)鍵字對(duì)應(yīng)的。將頁(yè)面元素的關(guān)鍵字參數(shù)作為函數(shù)的參數(shù)調(diào)用,采用JS框架語(yǔ)言編寫腳本函數(shù)。它具體依賴于Selenium 測(cè)試工具,Selenium的函數(shù)getEval提供了在網(wǎng)頁(yè)中執(zhí)行自定義javaScript腳本的能力[5]。關(guān)鍵字函數(shù)腳本實(shí)現(xiàn)具體如下所示:
function getRows() {
$(‘#showUser’).datagrid(‘getRows’);
}
function selectRow(index) {
$(‘#showUser’).datagrid(‘selectRow’, index);
}
function refreshRow(index) {
$(‘#showUser’).datagrid(‘refreshRow’,index);
}
function deleteRow(index){
$(‘#showUser’).datagrid(‘deleteRow’,index);
}
2.4關(guān)鍵字庫(kù)
對(duì)于關(guān)鍵字庫(kù)中的關(guān)鍵字,在對(duì)不同Web應(yīng)用系統(tǒng)進(jìn)行測(cè)試時(shí),這些關(guān)鍵字可以完全復(fù)用,根據(jù)業(yè)務(wù)邏輯、測(cè)試數(shù)據(jù)的一些差異選擇關(guān)鍵字,不一定所有的關(guān)鍵字都能用上,還需進(jìn)一步篩選。建立關(guān)鍵字庫(kù)的目的是用來對(duì)關(guān)鍵字進(jìn)行維護(hù)、擴(kuò)展及優(yōu)化。
3.1測(cè)試用例語(yǔ)法規(guī)約
基于上文定義Web UI關(guān)鍵字的方法,結(jié)合數(shù)據(jù)驅(qū)動(dòng)思想,提出一套測(cè)試用例的定義語(yǔ)法規(guī)范,并將此規(guī)范用BNF范式描述,用戶可根據(jù)此規(guī)范來編寫測(cè)試用例。語(yǔ)法規(guī)約具體如下:
<測(cè)試用例>::=”(“<測(cè)試用例名稱>”,”<測(cè)試步驟序號(hào)>”,”<測(cè)試步驟描述>”,”<關(guān)鍵字>”,”<操作值>”)”
<測(cè)試用例名稱> ::= <句子>
<測(cè)試步驟序號(hào)> ::= <數(shù)字>
<測(cè)試步驟描述> ::= <句子>
<關(guān)鍵字> ::=<標(biāo)識(shí)符>
<操作值> ::= <數(shù)字><字符串><數(shù)組>
<句子> ::= {{<字母>},{<字母>}}
<標(biāo)識(shí)符> ::= <字母>|<標(biāo)識(shí)符><字母數(shù)字串>
<字母數(shù)字串>::=<字母><數(shù)字><字母數(shù)字串><字母><字母數(shù)字串><數(shù)字>
<字母> ::= -<大寫字母><小寫字母>
<小寫字母> ::= a|b|c|d|e|f|g……
<大寫字母> ::= A|B|C|D|E|F|G……
<數(shù)字> ::= 1|2|3|4|5|6|7|8……
<字符串> ::= <字母><字母><字符串>
<數(shù)組> ::= <數(shù)字><數(shù)字><數(shù)組>
3.2測(cè)試用例結(jié)構(gòu)
本文中提出的測(cè)試用例采用Excel表格維護(hù),測(cè)試用例文件中包括:測(cè)試用例名稱、 測(cè)試步驟序號(hào)、測(cè)試步驟描述、關(guān)鍵字、操作值及測(cè)試結(jié)果。具體如表2所示。
表2 測(cè)試用例結(jié)構(gòu)表
Web 自動(dòng)化測(cè)試就是通過自動(dòng)化測(cè)試工具打開被測(cè)試頁(yè)面,通過鍵盤和鼠標(biāo),點(diǎn)擊或操作該頁(yè)面中的被測(cè)試對(duì)象,判斷整個(gè)程序的正確性[6]。本文中的執(zhí)行引擎圖如圖2所示。
圖2 執(zhí)行引擎圖
執(zhí)行引擎是整個(gè)測(cè)試的核心,實(shí)現(xiàn)了測(cè)試框架中所有的功能。主要是測(cè)試行為的控制,根據(jù)XML 文件配置目標(biāo)路徑加載測(cè)試用例,同時(shí)發(fā)出數(shù)據(jù)驅(qū)動(dòng)引擎來解析測(cè)試用例文件[7],每一行數(shù)據(jù)都是測(cè)試用例,可被框架解析,實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)[8],由解析到的測(cè)試用例中的測(cè)試步驟、關(guān)鍵字及操作值,匹配關(guān)鍵字腳本,在測(cè)試腳本函數(shù)庫(kù)中調(diào)用并執(zhí)行相應(yīng)功能函數(shù),組合生成Selenium 測(cè)試工具可以執(zhí)行的腳本。由Selenium 中的WebDriver對(duì)象來驅(qū)動(dòng)瀏覽器,按照測(cè)試用例的要求,對(duì)界面的元素,通過Selenium 的API模擬人工操作,完成與瀏覽器的交互,最終實(shí)施自動(dòng)化測(cè)試,執(zhí)行引擎將測(cè)試步驟結(jié)果記錄在測(cè)試用例文件中,每個(gè)測(cè)試用例執(zhí)行完畢之后,檢查點(diǎn)函數(shù)對(duì)測(cè)試用例進(jìn)行校驗(yàn),并記錄每個(gè)測(cè)試用例的執(zhí)行結(jié)果。
框架中提出的測(cè)試報(bào)告在TestNG基礎(chǔ)上構(gòu)建,可通過XML配置文件對(duì)測(cè)試用例進(jìn)行設(shè)定,比如測(cè)試的執(zhí)行順序以及依賴關(guān)系等,同時(shí)集成Log4j框架測(cè)試詳細(xì)信息,結(jié)束后會(huì)生成一個(gè)詳細(xì)的測(cè)試結(jié)果報(bào)表,同時(shí)框架中設(shè)定一個(gè)變量對(duì)每個(gè)測(cè)試步驟進(jìn)行監(jiān)控,將單個(gè)測(cè)試結(jié)果寫入Excel測(cè)試用例特定列中,在這些情況下方便測(cè)試人員定位詳細(xì)信息。
文中提出了一種基于Selenium JS UI 的自動(dòng)化測(cè)試框架,該框架采用混合型數(shù)據(jù)驅(qū)動(dòng)技術(shù)進(jìn)行開發(fā)設(shè)計(jì),以關(guān)鍵字為核心,提出一種新的UI定位方法,可以運(yùn)用在不同Web 程序中。該框架具有獨(dú)立性,在運(yùn)用時(shí)可根據(jù)Web 程序特點(diǎn)進(jìn)行擴(kuò)展及設(shè)計(jì),但目前還存在不同之處,如何更好地設(shè)計(jì)關(guān)鍵字庫(kù),更好地設(shè)計(jì)編寫測(cè)試用例,以及更好地輸出詳細(xì)的日志報(bào)表文件,是以后重點(diǎn)的研究方向。
[1] 溫素劍.零成本實(shí)現(xiàn)Web自動(dòng)化測(cè)試-基于Selenium WebDriver和Cucumber[M].北京:電子工業(yè)出版社,2015.
[2] 周娟.蔣外文.基于Web的自動(dòng)化測(cè)試框架[J].計(jì)算機(jī)工程,2009,35(18):65-66.
[3] 吳伶琳.基于關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化測(cè)試的研究與實(shí)現(xiàn)[J].電腦與信息技術(shù), 2013,12(6):47-48.
[4] 王磊.關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化測(cè)試框架設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)試,2010,8(8):87-88.
[5] 陳江勇,許力.Web 自動(dòng)化測(cè)試框架的設(shè)計(jì)實(shí)現(xiàn)[J].福建師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,29(4):42-44.
[6] 陳斌仙,陳佳麗,陳阿妹.基于Selenium的自動(dòng)化測(cè)試研究[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版),2016,32(9):19-21.
[7] 馮振華,高菊,曾紅衛(wèi).Web應(yīng)用自動(dòng)化測(cè)試的研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(1):175-178.
[8] 趙金丹.基于Selenium的Web自動(dòng)化測(cè)試腳本設(shè)計(jì)研究[J].科技傳播,2014(1):94-95.
Design and implementation of automated testing framework based on Selenium JS UI
Li Yan, Ren Hongmin, Liu Fang
(College of Information Engineering, Shanghai Maritime University, Shanghai 201306, China)
The technological development of Web and the extensive use of its UI components pose great challenges to automated testing. Hence this thesis designs a set of automated testing framework, which is based on Selenium JS UI and integrated with TestNG, Selenium framework under the help of keyword-driven and data driven technologies. Dividing the framework into four parts which are keywords, test case, execution engine and configuration report to segregate testing case, script and data, it not only solves the problem of locating in automated testing, but also greatly improves the testing efficiency.
automated testing framework ; Selenium;Web UI components; keyword-driven
TP92
:A
10.19358/j.issn.1674- 7720.2017.17.007
李艷,任洪敏,劉芳.基于Selenium JS UI的自動(dòng)化測(cè)試框架設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2017,36(17):24-26,30.
2017-03-14)
李艷(1990-),女,碩士,主要研究方向:軟件開發(fā)與項(xiàng)目管理。
任洪敏(1969-),通信作者,男,副教授,主要研究方向:軟件工程。E-mail:hmren@shmtu.edu.cn。
劉芳(1991-),女,碩士,主要研究方向:計(jì)算機(jī)系統(tǒng)應(yīng)用。