摘 要: 提出采用面向自動(dòng)化測(cè)試的測(cè)試用例設(shè)計(jì)格式,通過(guò)QTP的編程功能,使用外部數(shù)據(jù)源來(lái)實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)驅(qū)動(dòng)測(cè)試。具體方法是采用Excel作為測(cè)試數(shù)據(jù)源,制定Excel中測(cè)試數(shù)據(jù)的設(shè)計(jì)格式,建立專(zhuān)用的函數(shù)庫(kù)來(lái)操作Excel數(shù)據(jù),實(shí)現(xiàn)以數(shù)據(jù)為驅(qū)動(dòng)的自動(dòng)化測(cè)試。這一方法能有效地實(shí)現(xiàn)測(cè)試數(shù)據(jù)與測(cè)試腳本的分離,同時(shí),測(cè)試數(shù)據(jù)的設(shè)計(jì)操作變得方便,數(shù)據(jù)的可讀性增強(qiáng),提高了測(cè)試效率和測(cè)試數(shù)據(jù)的維護(hù)效率。
關(guān)鍵詞: QTP;函數(shù)庫(kù);測(cè)試腳本;測(cè)試用例;測(cè)試報(bào)告
近年來(lái),軟件測(cè)試工具逐步得到應(yīng)用和普及,在軟件測(cè)試的各個(gè)領(lǐng)域發(fā)揮著應(yīng)有的作用[1]。但也有不少軟件企業(yè)耗巨資購(gòu)買(mǎi)了軟件測(cè)試工具而被閑置,其主要原因是人們對(duì)測(cè)試工具本身提供的功能抱以了過(guò)高的期望值,如果對(duì)測(cè)試人員缺乏必要的自動(dòng)化測(cè)試的理論培訓(xùn)和測(cè)試工具的使用培訓(xùn),一旦遇到困難就容易放棄測(cè)試工具,回歸到人工測(cè)試狀態(tài)。實(shí)際上,大多數(shù)測(cè)試工具只是提供了一個(gè)測(cè)試平臺(tái),要使測(cè)試工具給項(xiàng)目帶來(lái)效率,必須通過(guò)長(zhǎng)期的經(jīng)驗(yàn)積累和資源積累才能實(shí)現(xiàn),其中資源積累主要是基于測(cè)試工具的可重用測(cè)試腳本的開(kāi)發(fā)[2-3]。
功能測(cè)試工具QTP是目前比較流行的測(cè)試工具之一,它可以通過(guò)錄制操作步驟、在關(guān)鍵字視圖參數(shù)化數(shù)據(jù)、設(shè)置各類(lèi)檢查點(diǎn)來(lái)實(shí)現(xiàn)自動(dòng)化測(cè)試[4]。但對(duì)于較為復(fù)雜的測(cè)試過(guò)程,僅僅通過(guò)關(guān)鍵字視圖的簡(jiǎn)單操作很難實(shí)現(xiàn)測(cè)試過(guò)程的自動(dòng)化,QTP提供了專(zhuān)家視圖來(lái)進(jìn)行測(cè)試腳本的開(kāi)發(fā),通過(guò)這種方式能開(kāi)發(fā)更強(qiáng)大和更靈活的測(cè)試腳本。在腳本開(kāi)發(fā)中采用數(shù)據(jù)驅(qū)動(dòng)方式進(jìn)行腳本開(kāi)發(fā)能提高測(cè)試腳本的靈活性,增加測(cè)試覆蓋面。因此,腳本開(kāi)發(fā)與數(shù)據(jù)驅(qū)動(dòng)測(cè)試常常是相輔相成的技術(shù)。
數(shù)據(jù)驅(qū)動(dòng)的測(cè)試方法解決的核心問(wèn)題是把數(shù)據(jù)從測(cè)試腳本中分離出來(lái)。QTP可以通過(guò)Data Table參數(shù)化和環(huán)境變量參數(shù)化來(lái)實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),但Data Table中只包含兩個(gè)工作表,且Data Table工作表的參數(shù)化數(shù)據(jù)只能通過(guò)列標(biāo)題來(lái)識(shí)別,這樣設(shè)計(jì)的測(cè)試數(shù)據(jù)可讀性欠佳,雖然可以將外部Excel工作表的數(shù)據(jù)導(dǎo)入到Data Table來(lái)變向地增加工作表,但由于只能通過(guò)列標(biāo)題識(shí)別數(shù)據(jù),故仍然存在數(shù)據(jù)可讀性和靈活性問(wèn)題,不便于測(cè)試數(shù)據(jù)的維護(hù);采用環(huán)境變量來(lái)參數(shù)化數(shù)據(jù)的方法,每一個(gè)變量只能對(duì)應(yīng)一個(gè)取值,只適合少量的參數(shù)化數(shù)據(jù),不便于對(duì)同一變量不同取值的循環(huán)測(cè)試。因此,要使數(shù)據(jù)驅(qū)動(dòng)測(cè)試的方法在較復(fù)雜的測(cè)試過(guò)程中發(fā)揮作用,上述兩種方法均不能較圓滿地實(shí)現(xiàn),這就需要采用其他外部數(shù)據(jù)源,并針對(duì)數(shù)據(jù)源進(jìn)行腳本開(kāi)發(fā)。
1 面向自動(dòng)化測(cè)試的測(cè)試用例設(shè)計(jì)
軟件工程提出了很多文檔、圖形設(shè)計(jì)和代碼規(guī)范,其目的是便于維護(hù)和實(shí)現(xiàn)對(duì)這些對(duì)象的自動(dòng)化操作,即通過(guò)編程來(lái)處理這些對(duì)象。同樣,制定一個(gè)較為規(guī)范的測(cè)試用例設(shè)計(jì)格式,用于實(shí)現(xiàn)以數(shù)據(jù)為驅(qū)動(dòng)的測(cè)試腳本開(kāi)發(fā),可以降低測(cè)試腳本開(kāi)發(fā)的復(fù)雜程度,也可省略將測(cè)試用例向測(cè)試腳本轉(zhuǎn)化這一步驟。
在實(shí)際項(xiàng)目中,測(cè)試用例設(shè)計(jì)人員一般選用表格化的Excel來(lái)進(jìn)行測(cè)試用例的設(shè)計(jì)[5],這里,也沿用這一方式并以常用的管理信息系統(tǒng)設(shè)計(jì)模式為例來(lái)制定測(cè)試用例的設(shè)計(jì)格式。
測(cè)試用例由測(cè)試輸入、執(zhí)行條件和預(yù)期結(jié)果構(gòu)成[6],因此,測(cè)試用例設(shè)計(jì)應(yīng)包含這3個(gè)要素。由于軟件類(lèi)型千差萬(wàn)別,目前尚無(wú)一個(gè)較好的形式化語(yǔ)言來(lái)定義測(cè)試用例,通常采用的是自然語(yǔ)言,而對(duì)于數(shù)據(jù)量較多的測(cè)試用例,往往采用描述和附加數(shù)據(jù)的方式來(lái)進(jìn)行測(cè)試用例設(shè)計(jì)。采用Excel進(jìn)行測(cè)試用例設(shè)計(jì)時(shí),一個(gè)測(cè)試實(shí)體通常用兩個(gè)工作表來(lái)進(jìn)行設(shè)計(jì),即測(cè)試用例設(shè)計(jì)工作表和測(cè)試數(shù)據(jù)工作表,測(cè)試用例設(shè)計(jì)工作表以表格形式呈現(xiàn),用自然語(yǔ)言對(duì)測(cè)試用例的三要素進(jìn)行描述,測(cè)試數(shù)據(jù)工作表以數(shù)據(jù)為主體呈現(xiàn)數(shù)據(jù)。另外,為了方便確認(rèn)測(cè)試結(jié)果和測(cè)試管理,還會(huì)增加一個(gè)測(cè)試結(jié)果工作表用來(lái)保存實(shí)際執(zhí)行的結(jié)果,采用QTP進(jìn)行GUI相關(guān)的軟件測(cè)試時(shí),它能錄制執(zhí)行界面,因此測(cè)試結(jié)果無(wú)需人工截圖,只需要保留測(cè)試執(zhí)行中QTP不便捕獲的數(shù)據(jù)(如數(shù)據(jù)庫(kù)中的數(shù)據(jù))。該工作表不屬于測(cè)試用例設(shè)計(jì)范圍,但與測(cè)試用例設(shè)計(jì)工作表和測(cè)試數(shù)據(jù)工作表保存于同一工作簿文件中,便于在測(cè)試執(zhí)行過(guò)程中即時(shí)保留相關(guān)數(shù)據(jù)。
本研究主要針對(duì)測(cè)試數(shù)據(jù)工作表的格式進(jìn)行設(shè)計(jì),目標(biāo)是使測(cè)試數(shù)據(jù)既具有較好的可讀性又便于編程實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)測(cè)試。以學(xué)生信息管理模塊為例來(lái)說(shuō)明測(cè)試用例設(shè)計(jì)格式。這里,主要以一般管理信息系統(tǒng)常用的增刪改查功能來(lái)說(shuō)明。測(cè)試對(duì)象界面如圖1所示。
對(duì)圖1所示的界面進(jìn)行功能測(cè)試,測(cè)試的主要功能為界面操作與數(shù)據(jù)庫(kù)數(shù)據(jù)是否吻合,為了使測(cè)試過(guò)程通過(guò)數(shù)據(jù)驅(qū)動(dòng)在QTP上自動(dòng)完成,設(shè)計(jì)了如圖2所示的測(cè)試數(shù)據(jù)設(shè)計(jì)格式(限于篇幅,圖2中只包含修改功能的用例)。其中,測(cè)試用例編號(hào)Case002、執(zhí)行前數(shù)據(jù)標(biāo)志BeforeTest、數(shù)據(jù)庫(kù)數(shù)據(jù)標(biāo)志DataBase、執(zhí)行動(dòng)作標(biāo)志【Delete】和【Insert】、數(shù)據(jù)結(jié)束標(biāo)志***END***、界面數(shù)據(jù)標(biāo)志Form、測(cè)試執(zhí)行后標(biāo)志AfterTest均為設(shè)計(jì)格式中的關(guān)鍵字,其中,測(cè)試用例編號(hào)不能重復(fù)。在后續(xù)的數(shù)據(jù)驅(qū)動(dòng)測(cè)試腳本開(kāi)發(fā)中,將根據(jù)這些關(guān)鍵字查找數(shù)據(jù)自動(dòng)完成測(cè)試。
圖2所示為對(duì)學(xué)生基本信息管理界面的修改功能進(jìn)行測(cè)試的測(cè)試用例。測(cè)試用例執(zhí)行前,由于界面中的“所屬”顯示的內(nèi)容來(lái)自Department表,因此需要制作該表的數(shù)據(jù),同時(shí)還需要制作Student中用于修改操作的對(duì)象數(shù)據(jù)。為簡(jiǎn)化數(shù)據(jù)制作的實(shí)現(xiàn),統(tǒng)一采用刪除后再插入數(shù)據(jù)的方式來(lái)制作數(shù)據(jù)庫(kù)測(cè)試數(shù)據(jù)。測(cè)試用例執(zhí)行后,需要驗(yàn)證數(shù)據(jù)庫(kù)中Student表的數(shù)據(jù)是否按界面設(shè)定內(nèi)容發(fā)生改變,AfterTest中為數(shù)據(jù)庫(kù)數(shù)據(jù)的預(yù)期結(jié)果值,用于與實(shí)際執(zhí)行結(jié)果相比較來(lái)判斷結(jié)果的正確性。
2 數(shù)據(jù)驅(qū)動(dòng)測(cè)試的設(shè)計(jì)與實(shí)現(xiàn)
為便于重用,將用于數(shù)據(jù)驅(qū)動(dòng)測(cè)試的過(guò)程和函數(shù)設(shè)計(jì)在一個(gè)函數(shù)庫(kù)中。同時(shí),為了減少Excel文件數(shù)據(jù)讀取的I/O次數(shù),首先將工作表中的數(shù)據(jù)一次讀入二維數(shù)組,然后采用二維數(shù)組的數(shù)據(jù)來(lái)驅(qū)動(dòng)測(cè)試執(zhí)行。
2.1 函數(shù)庫(kù)的設(shè)計(jì)
對(duì)圖1所示界面進(jìn)行功能測(cè)試,一條測(cè)試用例執(zhí)行的基本步驟為:數(shù)據(jù)庫(kù)環(huán)境設(shè)定→界面操作→結(jié)果保留和判斷→測(cè)試報(bào)告生成。因此,庫(kù)函數(shù)主要圍繞上述步驟的實(shí)現(xiàn)進(jìn)行設(shè)計(jì),其中主要實(shí)現(xiàn)的功能為用例執(zhí)行前數(shù)據(jù)庫(kù)環(huán)境的設(shè)定、用例執(zhí)行后數(shù)據(jù)庫(kù)結(jié)果的保留以及測(cè)試結(jié)果判斷,其中作為測(cè)試結(jié)果的界面部分由QTP的Active Screen功能自動(dòng)保存。另外,測(cè)試用例執(zhí)行及測(cè)試報(bào)告生成功能在各個(gè)測(cè)試對(duì)象的測(cè)試腳本中實(shí)現(xiàn)。為減少測(cè)試腳本與函數(shù)庫(kù)過(guò)程和函數(shù)間的參數(shù)傳遞,將二維數(shù)組作為公共變量(arrRange)定義在函數(shù)庫(kù)中,函數(shù)庫(kù)中定義的主要過(guò)程和函數(shù)如下:
(1)測(cè)試數(shù)據(jù)讀入過(guò)程
ReadExcelData(strPath,strSheet),參數(shù)順次為Excel文件保存路徑、工作表名,其功能是將工作表中的數(shù)據(jù)保存于二維數(shù)組(arrRange)中,供后續(xù)測(cè)試使用,實(shí)現(xiàn)代碼如下:
Sub ReadExcel(strFileName,strSheetName)
Dim objExcel
Dim objRange
'打開(kāi)Excel指定工作表
On error Resume Next
Set objExcel=CreateObject("Excel.Application")
objExcel.Workbooks.Open(strFileName)
Set objRange=objExcel.Worksheets(strSheetName).UsedRange
If err.Number<>0 Then
Exit Sub
End If
On error Goto 0
'將Excel轉(zhuǎn)成二維數(shù)組
arrRange=objRange.Value
objExcel.WorkBooks.Item(1).close
Set objRange=nothing
objExcel.quit
Set objExcel=nothing
End Sub
(2)數(shù)據(jù)查找過(guò)程SearchData (strKey,Byref m,Byref n),參數(shù)依次為查找關(guān)鍵字、行編號(hào)、列編號(hào)。功能為查找關(guān)鍵字在二維數(shù)組中的位置,參數(shù)m、n既帶入查找開(kāi)始位置,又將查找結(jié)果帶回到主調(diào)腳本中,實(shí)現(xiàn)代碼如下:
Sub Search(strKey,Byref m,Byref n)
Dim blnLoop
blnLoop=True
On error Goto 0
For i=m to UBound(arrRange)
For j=1 to UBound(arrRange,2)
If cstr(arrRange(i,j))=strKey Then
m=i
n=j
blnLoop=False
Exit for
End If
Next
If blnLoop=False Then
Exit for
End If
Next
End Sub
(3)數(shù)據(jù)庫(kù)環(huán)境構(gòu)建過(guò)程
CreateDbData(strCaseNo,Byref m,Byref n),參數(shù)依次為測(cè)試用例編號(hào)、行編號(hào)和列編號(hào),該過(guò)程的功能是對(duì)指定用例執(zhí)行前的數(shù)據(jù)庫(kù)環(huán)境進(jìn)行設(shè)定,將工作表中對(duì)應(yīng)用例編號(hào)下面DataBase與/DataBase之間的數(shù)據(jù)按順序先刪除再插入,該過(guò)程將調(diào)用SearchData過(guò)程來(lái)定位數(shù)據(jù)位置。其處理流程如圖3所示。
(4)測(cè)試結(jié)果保留過(guò)程
SaveDbData(strCaseNo,strResultSheet),參數(shù)為測(cè)試用例編號(hào),功能為從測(cè)試數(shù)據(jù)工作表中讀取AfterTest中的SQL語(yǔ)句,將數(shù)據(jù)庫(kù)中查詢的數(shù)據(jù)結(jié)果依次保存到測(cè)試結(jié)果工作表中。
(5)測(cè)試結(jié)果判斷函數(shù)
JudgeResult(strCaseNo,ByRef strMsg),參數(shù)為測(cè)試用例編號(hào)和測(cè)試結(jié)果信息,比較預(yù)期結(jié)果與實(shí)際執(zhí)行結(jié)果是否一致,若抽選出的數(shù)據(jù)量或?qū)?yīng)數(shù)據(jù)值一致則返回True;若不一致,則返回值為False,同時(shí)將比較結(jié)果的詳細(xì)信息通過(guò)strMsg變量帶回到主調(diào)測(cè)試腳本中。為簡(jiǎn)化數(shù)據(jù)比較操作,要求預(yù)期結(jié)果與實(shí)際結(jié)果按同樣方式排序,因此查詢結(jié)果的SQL語(yǔ)句必須用ORDER BY語(yǔ)句對(duì)抽選結(jié)果進(jìn)行排序。
2.2 測(cè)試腳本設(shè)計(jì)
在編寫(xiě)測(cè)試腳本前,先通過(guò)QTP錄制一段簡(jiǎn)單的界面操作,錄制過(guò)程中,將測(cè)試中需要捕獲的對(duì)象用鼠標(biāo)拖選,以便將其添加到對(duì)象庫(kù)中,然后停止錄制,最后根據(jù)測(cè)試流程在專(zhuān)家視圖中編寫(xiě)測(cè)試腳本。以下為圖2所示的測(cè)試用例Case002對(duì)應(yīng)的測(cè)試腳本:
Dim i,j
Dim strCaseNo,strMsg
Dim strPath,strTestDesign,strResultSheet
i=1
j=1
strPath="D:\QTP\Student.xls"
strTestDesign="TestDesign"
strResultSheet ="TestResult"
Call ReadExcel(strPath, strTestDesign)
'Case001
strCaseNo="Case001"
……(略)
'Case002
strCaseNo="Case002"
Call CreateDbData (strCaseNo,i,j)
Call Search("Form",i,j)
i=i+2
VbWindow("frmStudent").VbRadioButton("修改").Set
VbWindow("frmStudent").VbEdit("txtNo").Set GetValue(i,j)
VbWindow("frmStudent").VbButton("檢索").Click
VbWindow("frmStudent").VbEdit("txtName").Set GetValue(i,j)
VbWindow("frmStudent").VbComboBox("cobSex").Select GetValue(i,j)
VbWindow("frmStudent").VbEdit("txtBirthday").Set GetValue(i,j)
VbWindow("frmStudent").VbComboBox("cobDept").Select GetValue(i,j)
VbWindow("frmStudent").VbEdit("txtTel").Set GetValue(i,j)
VbWindow("frmStudent").VbEdit("txtYou").Set GetValue(i,j)
VbWindow("frmStudent").VbEdit("txtAddress").Set GetValue(i,j)
VbWindow("frmStudent").VbButton("執(zhí)行").Click
Call SaveDbData(strCaseNo,strResultSheet)
If JudgeResult(strCaseNo,strMsg)=false then
reporter.ReportEvent 1,strCaseNo ,strMsg ' 失敗
else
reporter.ReportEvent 0,strCaseNo,strMsg '成功
end if
……(略)
腳本中調(diào)用了函數(shù)GetValue來(lái)動(dòng)態(tài)獲取輸入界面的數(shù)據(jù),該函數(shù)定義在函數(shù)庫(kù)中,用來(lái)獲取行列為i、j的數(shù)組值,由于是按列依次獲取數(shù)據(jù),在函數(shù)中將j值自動(dòng)加1來(lái)實(shí)現(xiàn)。
2.3 測(cè)試結(jié)果
對(duì)圖1的界面設(shè)計(jì)增刪查改4個(gè)測(cè)試用例,并在應(yīng)用程序的修改操作中人為制造一個(gè)Bug,使Update語(yǔ)句漏掉一個(gè)字段的修改,運(yùn)行測(cè)試腳本,測(cè)試報(bào)告如圖4所示。
軟件測(cè)試工具給自動(dòng)化測(cè)試提供了一個(gè)實(shí)用的平臺(tái),但要對(duì)應(yīng)各種復(fù)雜的測(cè)試,基于測(cè)試工具的二次開(kāi)發(fā)是必不可少的。本研究主要針對(duì)一般管理信息系統(tǒng)的基本功能設(shè)計(jì)了一個(gè)測(cè)試數(shù)據(jù)設(shè)計(jì)格式,并基于這一格式建立了一個(gè)能通用于類(lèi)似系統(tǒng)的函數(shù)庫(kù)。后續(xù)研究中將繼續(xù)在QTP測(cè)試平臺(tái)對(duì)實(shí)際項(xiàng)目中常用的一些測(cè)試模式進(jìn)行可重用函數(shù)庫(kù)的開(kāi)發(fā)研究,以提升QTP的自動(dòng)化測(cè)試能力和效率。
參考文獻(xiàn)
[1] 陳技能.QTP自動(dòng)化測(cè)試進(jìn)階[M].北京:電子工業(yè)出版社,2011:153-179.
[2] 張鶴.基于QTP的自動(dòng)化功能測(cè)試研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2011.
[3] 杜麗潔.基于QTP自動(dòng)化測(cè)試框架的開(kāi)發(fā)與應(yīng)用[D].武漢:武漢理工大學(xué),2012.
[4] 區(qū)立斌.基于層次關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化測(cè)試框架設(shè)計(jì)與應(yīng)用[D].廣州:中山大學(xué),2012.
[5] 王敏,陳亞光.數(shù)據(jù)庫(kù)系統(tǒng)輔助測(cè)試工具[J].微型機(jī)與應(yīng)用,2013,32(3):13-15.
[6] 佟偉光.軟件測(cè)試[M].北京:人民郵電出版社,2008.