王 津,左 春,2,張 正
(1.中科軟科技股份有限公司,北京 100190; 2.中國科學院軟件研究所,北京 100190)
在行業(yè)應用軟件開發(fā)測試過程中,樣本程序[1]的普遍使用提高了行業(yè)軟件開發(fā)的規(guī)范性和效率,尤其是保險行業(yè)的軟件,其主流核心業(yè)務系統基本都使用基于樣本程序的開發(fā)方式。
借鑒已有樣本程序[2]可提高代碼的開發(fā)效率,同時,隨著樣本程序的普及,對所開發(fā)或維護的系統軟件質量的要求也逐步提升,軟件質量逐漸成為衡量相關企業(yè)技術水平的重要標準,軟件測試的重要性也不斷提高。例如,在保險行業(yè),基于樣本程序的軟件系統成為主流開發(fā)方式。由于保險行業(yè)每月有大量IT業(yè)務需求上線,因此對自動化測試的快速實施提出了更高要求。
為提高測試效率和準確性,加快自動化測試的實施速度,減少維護成本,加快腳本編寫速度,研究人員已提出相應的自動化測試工具,進一步提升基于樣本程序的行業(yè)軟件質量。 目前已有的自動化測試工具(如QTP[3])具有很強的功能,但基于樣本程序的行業(yè)應用軟件因其個性化的測試需求,并不能提供便捷的自動化腳本編寫方案。同時,由于樣本程序的架構模式以及功能開發(fā)規(guī)范化,自動化測試工具變得更加專業(yè)化。
本文提出一種自動化測試工具。該工具基于樣本程序,同時使用領域數據[4],通過識別樣本程序的注釋內容,自動化地構建測試的程序代碼框架,并結合領域數據生成的用例數據,組成自動化測試的腳本代碼。在修改并調試運行代碼后,對系統進行自動化測試,并將其應用于軟件的開發(fā)、測試和運維等環(huán)節(jié)。
基于樣本程序和領域數據的自動化測試工具以樣本程序為基礎,通過識別樣本程序及其衍生程序的骨架注釋,生成基礎的規(guī)則庫和衍生數據。同時,利用抽取引擎識別領域數據并將其整理成測試數據,然后通過生成引擎將規(guī)則庫、衍生數據和測試數據進行識別和組裝,生成自動化測試腳本。在生成腳本后,執(zhí)行代碼就可對系統進行自動化測試,該自動化測試工具的結構如圖1所示。
圖1 自動化測試工具的體系結構
自動化測試工具首先要通過抽取引擎抽取數據,主要包括3個方面的內容,分別是樣本程序、衍生程序和領域數據。
1.1.1 樣本程序
行業(yè)應用軟件在整個開發(fā)過程中,通過從頭到尾的組裝方法開發(fā)出的程序叫樣本程序。樣本程序是目前保險行業(yè)軟件開發(fā)的主要方式,下文樣本程序的例子均是基于保險行業(yè)系統代碼的內容,主要以核心系統的代碼樣例進行展示。
基于樣本程序的自動化測試,首先需要了解樣本程序的代碼結構。樣本程序的代碼就是在每段代碼中都有對應的注釋內容,稱之為骨架注釋。骨架注釋是標識樣本程序結構特征的標記注釋,是樣本程序的重要組成部分。對于注釋的格式則要根據樣本程序系列進行統一命名和封裝,注釋內容的屬性要統一完整,方便后續(xù)處理。在設置識別規(guī)則時,可以根據同一系列的樣本程序設置標準的識別規(guī)則,其內容需要參考詞根表和基于自動化測試修正后的命名規(guī)則。
注釋的編寫格式如下(以Java語言為例):
/**@TypicalProgram{id:′id′,step:step,description:′desc′}*/
說明:該注釋包含id、step、description 3個屬性。
以上是原有的注釋格式,基于自動化測試的需要,在原有屬性基礎上增加一個屬性tag,同時對description屬性進行標準格式化??傮w格式變?yōu)槿缦滦问?
/**@TypicalProgram{id:′id′,step:step,description:′desc′,tag:′tag′}*/
基于保險行業(yè)的樣本程序的骨架注釋樣例如下:
public void prpallToCarInfo() throws Business Exception,Exception {
/**@TypicalProgram{id:′prpallToCarInfo′,
step:1,description:′承保系統-投保錄入-獲取車輛信息對象′,tag:′JAVA-get′} */
…
/**@TypicalProgram{id:′prpallToCarInfo′,step:2,description:′承保系統-投保錄入-保存車輛信息′,tag:′JAVA-save′} */
…
}
該樣本程序的唯一標識為prpallToCarInfo,step屬性表示步驟序號,description屬性表示該步驟的操作功能,tag屬性表示該步驟對應的標識。其中,description屬性在原骨架注釋要求的基礎上進行了格式化,格式內容為:系統名稱-系統功能菜單-功能模塊操作。tag屬性的標識則為:前后臺代碼標識-對應方法操作的英文標識。
對于滿足自動化測試要求的骨架注釋,需在不同代碼類型上進行區(qū)分。針對前臺jsp頁面?zhèn)鬟f的數據,需根據識別規(guī)則要求進行規(guī)則化描述,例如,在如下jsp表單中:
其對應的description則需要補充成如下形式:
/*@TypicalProgram{id:′prpallToCarInfo′,
step:12,
description:′承保系統-投保錄入-保存車輛信息-車輛顏色′,
tag:′JSP-[input]name.carcolor′} */
通過在不同的程序代碼類型上進行統一格式的注釋,自動化測試工具的抽取引擎就可以正確掃描并提取骨架注釋的內容。
1.1.2 衍生程序
衍生程序是根據樣本程序進行“相似性復用”產生的代碼,對于骨架注釋的內容,衍生程序可以繼承使用。因自動化測試工具的識別需要,對于基于樣本程序的衍生程序,也要嚴格按照樣本程序的方式進行注釋。
1.1.3 領域數據
在行業(yè)應用軟件的開發(fā)和測試過程中,會形成大量的業(yè)務數據,這些數據具有很強的變化性,統稱領域數據[5]。領域數據基于其參考模型而生成,展現對應領域內業(yè)務的組成關系。保險業(yè)務領域參考模型[6]的體系架構如圖2所示。
圖2 領域數據參考模型的體系架構
由圖2可知,參考模型的底部是通用橫向數據,其為整個行業(yè)軟件應用數據的通用部分。特定領域的術語貫穿每個領域數據模型(以保險行業(yè)領域作為參考),其內容則是基于該領域業(yè)務內公認標準化的數據。
在領域術語的基礎上建立特定的領域數據模型,包含縱向和橫向兩個部分。其中,橫向領域數據是該領域內通用的數據,例如用戶的組織形式、機構劃分等,縱向領域數據則是該領域具體的業(yè)務數據,可根據業(yè)務范圍進行細分,但其需要橫向領域數據作為支撐。以保險行業(yè)的車險領域數據為基礎樣例,其領域數據的具體組成如下:
1)橫向數據組成
分析橫向數據各個維度的屬性內容,根據關鍵維度劃分數據序列,具體如下:
險類={險類代碼,險類名稱,狀態(tài),標識}
險種={險類代碼,險類名稱,所屬險類,生效時間,標識}
險別={險類代碼,險類名稱,所屬險種,費率代碼,額定保額,最大浮動比率,標識}
2)縱向數據組成
分析縱向數據各個維度的屬性內容,根據業(yè)務含義有層次地進行對應層次的劃分,具體如下:
車險投保單={投保單號,車輛信息,費用信息,…}
車輛信息={車牌號,車架號,車型,顏色,車輛使用性質,…}
費用信息={實際費率,基準保費,實際浮動比例,…}
基于1.1節(jié)3個基礎組件的內容進行數據抽取,形成基礎的自動化測試數據。對于生成數據的存儲,則選擇Mysql[7]作為數據庫。
1.2.1 抽取引擎
抽取引擎是自動化測試工具中,抽取和處理數據的引擎,它主要負責對樣本程序、衍生程序和領域數據的內容進行抽取,通過腳本規(guī)則生成對應規(guī)則庫、衍生數據和測試數據。
1.2.2 規(guī)則庫
規(guī)則庫是基礎的規(guī)則匹配庫,規(guī)則庫的生成建立在對樣本程序的骨架注釋進行抽取的基礎上,然后根據骨架注釋的內容進行分類處理。規(guī)則庫關系如圖3所示。
圖3 規(guī)則庫關系
由圖3可知,規(guī)則庫分為基礎流程數據、流程順序規(guī)則、基礎元素數據、元素順序規(guī)則、流程與元素順序規(guī)則5個部分,具體分析如下:
1)基礎流程數據部分
通過抽取樣本程序的骨架注釋內容,分別將id、step、description和tag分類存儲。其中,description的格式為:系統名稱-系統功能菜單-功能模塊操作,以“-”作為分隔符進行字符串分割處理,并按照對應的功能模塊或類別進行分類存儲,形成基礎流程數據部分。
2)流程順序規(guī)則部分
流程順序規(guī)則部分是行業(yè)領域的通用業(yè)務流程規(guī)則,依照自動化測試工具所需的規(guī)范要求進行內容格式化處理,按照業(yè)務流程進行排序和整理,同時與基礎流程數據中的id、description和step相對應,形成對照關系。
流程順序對應內容,除了預定義一套基礎的通用對照關系,還根據不同的衍生程序,自定義分支流程順序的對照關系。
3)基礎元素數據部分
基礎元素數據部分通過識別前臺頁面上的注釋屬性tag的內容,然后根據規(guī)則抽取對應的基礎元素數據,例如tag:′JSP-[input]name.carcolor′,測試抽取出關鍵字JSP、input、name、carcolor,分別對應注釋來源、元素標簽、元素屬性名稱、元素屬性值,并分別進行存儲,形成基礎元素數據部分的內容。
同時,規(guī)則庫在處理基礎元素數據時,根據其元素標簽內容自動對應元素操作,其對應關系是根據自動化測試的通用HTML標簽和操作得到的。例如,input對應sendkeys。
4)元素順序規(guī)則部分
元素順序規(guī)則部分先根據樣本程序中對應頁面的元素順序預定義基礎元素順序,然后通過前臺頁面上的注釋內容進行修正,分別匹配id、step、description的內容修正預定義的內容,形成元素順序規(guī)則部分。
5)流程與元素順序規(guī)則部分
流程與元素順序規(guī)則部分根據樣本程序的基礎業(yè)務流程,預定義流程與元素間的順序對照關系。通過id、description進行順序邏輯的匹配,并按照不同的業(yè)務場景定義對應的順序關系。
1.2.3 衍生數據
衍生數據是根據衍生程序的骨架注釋內容抽取處理所形成的。衍生數據的主要作用是形成衍生程序對應的流程數據和元素數據,分別通過其id、step、description、tag屬性內容進行數據的抽取和處理。
在完成衍生程序的流程和元數據的處理后,形成衍生數據。衍生數據的存儲和分類規(guī)則與規(guī)則庫的基礎流程數據部分和基礎元素數據部分一致。
1.2.4 測試數據
測試數據是通過抽取引擎識別領域數據,并將獲得的數據根據行業(yè)領域的業(yè)務知識進行分類標識并存儲。例如,車輛信息中的車輛顏色有紅、黃、藍、黑等,這些數據就是領域數據的內容。
對于橫向數據,基于樣本程序的業(yè)務歸屬關系進行數據分類。例如,對于險類、險種、險別的內容,與樣本程序的實際內容進行匹配對應,獲取同一歸屬的數據,再根據規(guī)則庫預定義的對應關系進行數據標識,標出骨架注釋中tag里面的關鍵字??v向數據的處理方式與橫向數據一致。
數據構成主要闡述對應規(guī)則庫、衍生數據和測試數據中所對應數據的內容構成樣例。
1.3.1 基礎流程數據構成
在完成樣本程序骨架注釋的識別后進行數據抽取,匯總抽取后的序列形成基礎的流程數據,為規(guī)則庫提供流程的基礎數據。
根據自動化測試所需的基礎流程數據的內容需求,定義基本流程數據的屬性,其基礎元素組成如下:
FEM:=(K,D)
其中,K表示該數據是主鍵唯一描述的流程內容,D則表示該主鍵的描述。例如,樣本程序prpallTo Claim骨架注釋抽取后的數據處理如下:
K=com.java.prpallToCarInfo.1.get
D=承保系統-投保錄入-車輛信息-獲取對象
通過基本流程數據的組成定義,將識別的數據結果進行二次處理,形成基礎流程數據,并將其作為規(guī)則庫的流程生成基礎數據。衍生程序的衍生數據,在流程數據部分基本與規(guī)則庫中的基礎流程數據部分一致。
1.3.2 基礎元素數據構成
基礎元素數據通過規(guī)則庫進行基礎元素的匹配,同時結合基礎流程數據,添加元素的對應操作和定位屬性。
業(yè)務元素的組成如下:
SEM:= (K,L,O,D)
其中,K表示該數據是主鍵唯一描述基礎元素內容,L表示該主鍵對應的定位屬性,O表示該主鍵的操作內容,D則表示該主鍵的描述內容。
例如,結合注釋識別的樣例如下:
K=com.prpall.carInfo.jsp
L=name.carcolor
O=web.sendkeys
D=承保系統-投保錄入-車輛信息-車身顏色
對于添加元素的定位屬性,例如上述例子,則是根據骨架中的注釋JSP-[input]name.carcolor匹配業(yè)務規(guī)則庫中的定位屬性識別規(guī)則,并提取出后面的內容name.carcolor作為L的數值。
對于添加元素的操作,則針對上面骨架注釋的內容識別JSP-[input],將結果作為規(guī)則映射的對象,依據規(guī)則庫的對應關系查找對應的值web.sendkeys,即為O的數值。
1.3.3 測試數據構成
根據自動化測試所需業(yè)務測試數據的內容需求,定義測試數據的屬性,其基礎元素組成如下:
VEM:=(K,V,D)
其中,K表示該數據是主鍵唯一描述基礎元素內容,V表示該主鍵所對應的數據值,D則表示該主鍵的描述內容。
通過測試數據的組成定義,將橫向和縱向基礎數據根據定義進行分割處理。對于不同范圍的領域數據,按照基本元素的情況進行符合范圍主題的排列組合,實現領域數據的層級結構構建。同時,根據自動化測試所需的數據樣式進行格式化處理,以關聯表格形式或數據庫的形式保存。
例如,車險業(yè)務數據樣例如下:
K=com.prpall.carInfo.carcolor
V=紅色
D=承保系統-投保錄入-車輛信息-車身顏色
根據上面的樣例形式進行數據的處理,形成符合自動化測試規(guī)范需求的測試數據。
自動化測試工具的腳本生成通過生成引擎組裝完成,其以規(guī)則庫為基礎,分別匹配衍生數據和測試數據,并根據數據間的關聯關系生成基礎用例數據,然后依照生成引擎的程序規(guī)則組裝出自動化測試的腳本。
1.4.1 生成引擎
生成引擎的功能是抽取識別規(guī)則庫,獲取匹配衍生數據,提取對應規(guī)則下的測試數據,然后進行程序處理。在形成基礎用例數據后,依據自動化測試工具所使用的底層執(zhí)行框架,例如Selenium[8],撰寫基礎格式和內容要求,自動生成可執(zhí)行的腳本文件,并將腳本文件按照自動化測試工具中對目錄層級的要求進行腳本歸檔,自動化測試工具按照約定目錄格式內容執(zhí)行代碼腳本。
1.4.2 基礎用例數據構成
基礎用例組裝是自動化測試用例生成的關鍵步驟,其內容是對基礎元素數據與基礎流程數據,通過對規(guī)則庫中的流程順序對應規(guī)則、元素順序對應規(guī)則和流程與元素順序對應規(guī)則進行匹配處理,實現數據的整合和組裝,為生成腳本提供數據準備。
基礎用例的數據元素的組成如下:
ACEM:=(K,SK,FK,N,D)
其中,K表示該數據是主鍵唯一描述內容,SK表示元素主鍵的標識,FK表示流程主鍵的標識,N表示該主鍵對應的業(yè)務編號,D則表示該主鍵的描述內容。
結合注釋識別的樣例如下:
K=auto.prpall.toubao.dza
SK=com.db.prpall.carInfo.carcolor
FK=com.java.prpallToCarInfo.1.get
N=auto.dza.n001
D=投保錄入-交強險-單獨-客車-家庭自用
以上是基礎用例數據的構成,其為腳本生成的基礎數據。
1.4.3 腳本組裝
腳本組裝以基礎用例數據為數據模板,通過生成引擎生成自動化測試的腳本,主要包括以下2個步驟:
1)基礎用例數據的內容對應腳本中各個代碼標識。
2)生成引擎以選擇的基礎自動化框架為模板,按照自動化測試工具的整體框架,對應匹配腳本語言的規(guī)范內容。
在完成腳本的自動生成后,自動化測試工具根據配置參數,執(zhí)行對應的腳本,自動化測試工程師再根據執(zhí)行情況調試并修改腳本。
在自動化測試工具的體系結構中,樣本程序作為輸入內容經過抽取引擎的識別和抽取,將基礎的規(guī)則數據插入規(guī)則庫的數據表中,形成基礎的規(guī)則庫數據。衍生程序作為第2個輸入內容,通過抽取引擎抽取識別后,輸出對應的元素和流程數據。對于領域數據,通過抽取引擎的SQL語句處理,獲取可用的基礎測試數據。簡言之,規(guī)則庫來源于樣本程序,衍生數據來源于衍生程序,測試數據來源于領域數據。
生成引擎首先針對衍生數據進行分析,然后匹配規(guī)則庫實現數據的提取,再與測試數據匹配組合,依照生成引擎的代碼生成規(guī)則,自動生成測試腳本。
本文提出的自動化測試工具框架基于Java語言開發(fā),底層對Web頁面的驅動和識別基于Selenium框架實現,同時,使用JUnit[9]進行函數的調用和執(zhí)行。該工具主要包括測試腳本模塊、運行配置模塊、調用執(zhí)行模塊、報告輸出模塊、引擎模塊和數據庫模塊6個部分,如圖4所示。
圖4 自動化測試工具架構
綜合圖1和圖4可知,外部輸入的數據經由引擎模塊中的抽取引擎進行修正,并插入對應工具的數據庫中,最后通過生成引擎自動生成測試腳本,并放入對應測試腳本模塊的分層目錄中。利用運行配置模塊設置自動化測試工具的運行參數,調用執(zhí)行模塊根據配置執(zhí)行的腳本流程,運行自動化測試,最終通過報告輸出模塊輸出測試結果,完成Web自動化測試。
2.2.1 測試腳本模塊
測試腳本模塊主要用于存放自動生成的代碼腳本。目錄包含element、testflow和testcase 3個部分,分別存儲自動生成的類文件。其中,element的腳本是元素定位屬性腳本集合,結合第1節(jié)樣本程序獲取的樣例,生成腳本內容如下:
public class prpallToCarInfoElement {
…
/*用戶名*/
public WebElement carcolor_inputBox(){
return
basedriver.findElement(By.name("carcolor"));
}
…
}
testflow的腳本是業(yè)務流程代碼,生成的代碼是基礎業(yè)務流程,每個流程用例都是獨立的業(yè)務流程功能,代碼樣例如下:
public class prpallToCarInfoFlow {
…
/*登錄操作*/
public void prpallToCarInfoInput(){
…
basedriver.sendKeys(prpallToCarInfoElement.carcolor_inputBox(),"紅色");
…
}
}
testcase的腳本生成的內容是業(yè)務流程的測試用例,通過調用多個testflow形成完整的業(yè)務流程腳本,代碼樣例如下:
public class TestCase_prpallToCar extends
BaseCase{
…
@Test
public void main() throws
ClassNotFoundException {
…
/*車輛信息-車輛顏色輸入*/
prpallToCarInfoFlow.prpallToCarInfoInput();
…
System.out.println("成功");
}
}
2.2.2 運行配置模塊
運行配置模塊主要用于設置數據庫的參數配置、Selenium的瀏覽器驅動配置以及超時配置,代碼樣例如下:
# main configuration
conf.chromedriver.path=./config/chromedriver.exe
conf.iedriver.path=./driver/IEDriverServer32.exe
conf.firefoxdriver.path=/driver/geckodriver.exe
conf.pauseTime.second=20
conf.loadTime.second=20
conf.timeOut.second=20
conf.screenshot.path=./capture
conf.db.jdbc.driver=
conf.db.jdbc.url=;
conf.db.user=
conf.db.pwd=
…
2.2.3 執(zhí)行調用模塊
執(zhí)行調用模塊的功能是運行自動化測試腳本,其支持兩種方式進行腳本執(zhí)行,一種是通過IDE編輯器的JUnit插件方式運行調試Java測試腳本,另外一種是通過testNG[10]開源框架調用編寫完成的XML[11]配置文件,執(zhí)行腳本。XML配置文件的代碼樣例如下:
其中,classes標簽部分就是所要執(zhí)行的自動化測試腳本,對應到testcase中的java類文件名。這種通過XML配置執(zhí)行腳本的方式可方便快速地定義執(zhí)行內容[12],并進行修改和管理。
2.2.4 報告輸出模塊
報告輸出模塊的功能主要是顯示當前腳本執(zhí)行的結果,包含是否有報錯以及報錯的當前步驟的截圖,方便自動化測試人員定位報錯[13]。
2.2.5 引擎模塊
引擎模塊結合第1節(jié)闡述的內容,主要是分為兩個部分,分別是抽取和生成,抽取即提取組成腳本的必要數據,生成即是通過提出的必要數據和規(guī)則完成自動化測試腳本的組裝,形成可執(zhí)行的測試代碼。
2.2.6 數據庫模塊
數據庫模塊包含規(guī)則庫、衍生數據庫和測試數據庫3個數據庫。本文3個數據庫的數據均來源于抽取引擎的處理結果。
通過程序自動生成的基礎用例腳本,需要檢查代碼內容的正確性。統計在不修改腳本的情況下,待測業(yè)務流程是否符合系統的業(yè)務流程,頁面上的元素是否識別正確,具體數據如表1(以某車險承保投保錄入為例)。從表1結果可知,對于基于樣本程序和領域數據的自動化測試,其基礎用例生成的正確率達74%。
表1 腳本執(zhí)行結果Table 1 Results of script execution
自動化測試工具通過自動生成基礎用例,大幅減少腳本初期編寫的工作量,實現自動化測試工作的快速實施,減少前期投入。其中,錯誤部分需要修改的內容主要包括以下2個方面:
1)業(yè)務元素方面,主要是修改默認生成的元素定位信息。在瀏覽器解析頁面元素Xpath[14]的定位信息時,可能會出現相同標簽屬性值,此時,需要重新修改Xpath路徑或其他定位[15]參數。
2)業(yè)務流程方面,主要是修改因流程校驗和個性業(yè)務需求所導致的業(yè)務流程不正確。當缺少前置或后置流程時,針對具體的流程進行添加和修改。
綜上所述,錯誤部分的腳本修改數量小于腳本數量的50%,達到預期效果,且修改內容主要分布在流程順序調整以及頁面彈框處理過程中。
本文的自動化測試工具依賴于樣本程序所衍生的程序和系統,同時,基于該領域的數據,可以依據規(guī)則庫快速生成基礎用例。本文工具使用Java語言編寫,可通過調用成熟的API和直接編寫代碼的方式,利用樣本程序的骨架注釋和領域數據。
其他通用的自動化測試工具存在一些問題。例如,QTP在編寫用例的過程中主要在錄制[16]后修改代碼,會在工具內部生成一個對象庫[17],過程較繁瑣。如果要使用基于樣本程序的骨架注釋和領域數據,則需要基于工具本身的限制進行代碼開發(fā)。例如,QTP使用VBA語言,需要基于VBA語言單獨開發(fā)對應的掃描引擎和數據讀取方法等[18],其通用性不高,無法快速實現自動化測試。本文工具與QTP編寫測試用例的速度對比結果如圖5所示(以某車險承保投保錄入為例)。本文工具自動生成的腳本和QTP錄制腳本的修改情況對比如圖6所示。
圖5 編寫腳本速度對比
圖6 腳本修改情況對比
結合圖5和圖6可知,在基于樣本程序的目標系統下,本文工具可快速生成基礎用例,然后針對有問題的基礎用例進行二次修改調試,而QTP自動化測試工具則需要單獨錄制腳本并進行對應修改,效率相對較低。在測試速度方面,整體車險83個業(yè)務測試流程,本文工具平均需要5天的工作量,QTP工具則平均需要11天完成,本文自動化測試工具實施自動化測試的速度較快。在本文工具自動生成的腳本,在調試過程中,有61個腳本在調試時直接運行通過,其中有22個需要修改代碼和流程。QTP進行錄制腳本,需要修改對象庫內容,并調整因錄制功能缺陷問題導致部分元素和流程未錄制上的情況,其需要修改的腳本數為45個。此外,由于車險投保流程中需要針對數據庫進行操作,Java對于數據庫操作支持穩(wěn)定且代碼編寫靈活,而QTP工具則需要通過JDBC等方式進行連接[19],設置繁瑣且不穩(wěn)定。
本文基于樣本程序和領域數據進行自動化測試,其效果分析如下:
1)分析樣本程序的骨架注釋方式,在樣本程序代碼復用的基礎上,可以利用樣本程序段進一步提高骨架注釋分析的速度和準確率。
2)基于領域數據可以豐富和完善基礎用例。
3)通過規(guī)則庫的匹配可以快速整合骨架注釋和領域數據的內容,形成基礎的測試用例數據。
4)利用Java語言編寫,其功能擴展方便且編寫成本低[20]。
本文提出一種基于樣本程序和領域數據的自動化測試方案。以樣本程序為基礎實現代碼層骨架注釋的識別和處理,將領域數據作為基礎測試數據,通過引擎的抽取和識別自動生成代碼,從而快速實施自動化測試,保證基于樣本程序的行業(yè)應用軟件的質量。實驗結果表明,該自動化測試工具的效率和腳本正確率均高于QTP工具。下一步將擴充骨架注釋的規(guī)則庫,加強開發(fā)人員編寫樣本程序的規(guī)范性和完整性,同時提高領域數據的準確度并進一步統一通用數據內容,以優(yōu)化自動化測試方案的復用性和規(guī)范性。