《電子技術(shù)應用》
您所在的位置:首頁 > 測試測量 > 設計應用 > 基于QTP的數(shù)據(jù)驅(qū)動測試開發(fā)
基于QTP的數(shù)據(jù)驅(qū)動測試開發(fā)
來源:微型機與應用2014年第2期
王 敏,,高 霞,王智超
(武昌理工學院 信息工程學院,,湖北 武漢430223)
摘要: 提出采用面向自動化測試的測試用例設計格式,通過QTP的編程功能,,使用外部數(shù)據(jù)源來實現(xiàn)較復雜的數(shù)據(jù)驅(qū)動測試,。具體方法是采用Excel作為測試數(shù)據(jù)源,制定Excel中測試數(shù)據(jù)的設計格式,,建立專用的函數(shù)庫來操作Excel數(shù)據(jù),,實現(xiàn)以數(shù)據(jù)為驅(qū)動的自動化測試。這一方法能有效地實現(xiàn)測試數(shù)據(jù)與測試腳本的分離,,同時,,測試數(shù)據(jù)的設計操作變得方便,數(shù)據(jù)的可讀性增強,,提高了測試效率和測試數(shù)據(jù)的維護效率,。
Abstract:
Key words :

摘  要: 提出采用面向自動化測試的測試用例設計格式,通過QTP的編程功能,,使用外部數(shù)據(jù)源來實現(xiàn)較復雜的數(shù)據(jù)驅(qū)動測試,。具體方法是采用Excel作為測試數(shù)據(jù)源,制定Excel中測試數(shù)據(jù)的設計格式,,建立專用的函數(shù)庫來操作Excel數(shù)據(jù),,實現(xiàn)以數(shù)據(jù)為驅(qū)動的自動化測試。這一方法能有效地實現(xiàn)測試數(shù)據(jù)與測試腳本的分離,,同時,,測試數(shù)據(jù)的設計操作變得方便,數(shù)據(jù)的可讀性增強,,提高了測試效率和測試數(shù)據(jù)的維護效率,。
關鍵詞: QTP;函數(shù)庫,;測試腳本,;測試用例;測試報告

    近年來,,軟件測試工具逐步得到應用和普及,,在軟件測試的各個領域發(fā)揮著應有的作用[1]。但也有不少軟件企業(yè)耗巨資購買了軟件測試工具而被閑置,,其主要原因是人們對測試工具本身提供的功能抱以了過高的期望值,,如果對測試人員缺乏必要的自動化測試的理論培訓和測試工具的使用培訓,一旦遇到困難就容易放棄測試工具,,回歸到人工測試狀態(tài),。實際上,大多數(shù)測試工具只是提供了一個測試平臺,,要使測試工具給項目帶來效率,,必須通過長期的經(jīng)驗積累和資源積累才能實現(xiàn),,其中資源積累主要是基于測試工具的可重用測試腳本的開發(fā)[2-3]。
    功能測試工具QTP是目前比較流行的測試工具之一,,它可以通過錄制操作步驟,、在關鍵字視圖參數(shù)化數(shù)據(jù)、設置各類檢查點來實現(xiàn)自動化測試[4],。但對于較為復雜的測試過程,,僅僅通過關鍵字視圖的簡單操作很難實現(xiàn)測試過程的自動化,QTP提供了專家視圖來進行測試腳本的開發(fā),,通過這種方式能開發(fā)更強大和更靈活的測試腳本,。在腳本開發(fā)中采用數(shù)據(jù)驅(qū)動方式進行腳本開發(fā)能提高測試腳本的靈活性,增加測試覆蓋面,。因此,,腳本開發(fā)與數(shù)據(jù)驅(qū)動測試常常是相輔相成的技術(shù)。
    數(shù)據(jù)驅(qū)動的測試方法解決的核心問題是把數(shù)據(jù)從測試腳本中分離出來,。QTP可以通過Data Table參數(shù)化和環(huán)境變量參數(shù)化來實現(xiàn)數(shù)據(jù)驅(qū)動,,但Data Table中只包含兩個工作表,且Data Table工作表的參數(shù)化數(shù)據(jù)只能通過列標題來識別,,這樣設計的測試數(shù)據(jù)可讀性欠佳,,雖然可以將外部Excel工作表的數(shù)據(jù)導入到Data Table來變向地增加工作表,但由于只能通過列標題識別數(shù)據(jù),,故仍然存在數(shù)據(jù)可讀性和靈活性問題,,不便于測試數(shù)據(jù)的維護;采用環(huán)境變量來參數(shù)化數(shù)據(jù)的方法,,每一個變量只能對應一個取值,,只適合少量的參數(shù)化數(shù)據(jù),,不便于對同一變量不同取值的循環(huán)測試,。因此,要使數(shù)據(jù)驅(qū)動測試的方法在較復雜的測試過程中發(fā)揮作用,,上述兩種方法均不能較圓滿地實現(xiàn),,這就需要采用其他外部數(shù)據(jù)源,并針對數(shù)據(jù)源進行腳本開發(fā),。
1 面向自動化測試的測試用例設計
    軟件工程提出了很多文檔,、圖形設計和代碼規(guī)范,其目的是便于維護和實現(xiàn)對這些對象的自動化操作,,即通過編程來處理這些對象,。同樣,制定一個較為規(guī)范的測試用例設計格式,,用于實現(xiàn)以數(shù)據(jù)為驅(qū)動的測試腳本開發(fā),,可以降低測試腳本開發(fā)的復雜程度,也可省略將測試用例向測試腳本轉(zhuǎn)化這一步驟。
    在實際項目中,,測試用例設計人員一般選用表格化的Excel來進行測試用例的設計[5],,這里,也沿用這一方式并以常用的管理信息系統(tǒng)設計模式為例來制定測試用例的設計格式,。
    測試用例由測試輸入,、執(zhí)行條件和預期結(jié)果構(gòu)成[6],因此,,測試用例設計應包含這3個要素,。由于軟件類型千差萬別,目前尚無一個較好的形式化語言來定義測試用例,,通常采用的是自然語言,,而對于數(shù)據(jù)量較多的測試用例,往往采用描述和附加數(shù)據(jù)的方式來進行測試用例設計,。采用Excel進行測試用例設計時,,一個測試實體通常用兩個工作表來進行設計,即測試用例設計工作表和測試數(shù)據(jù)工作表,,測試用例設計工作表以表格形式呈現(xiàn),,用自然語言對測試用例的三要素進行描述,測試數(shù)據(jù)工作表以數(shù)據(jù)為主體呈現(xiàn)數(shù)據(jù),。另外,,為了方便確認測試結(jié)果和測試管理,還會增加一個測試結(jié)果工作表用來保存實際執(zhí)行的結(jié)果,,采用QTP進行GUI相關的軟件測試時,,它能錄制執(zhí)行界面,因此測試結(jié)果無需人工截圖,,只需要保留測試執(zhí)行中QTP不便捕獲的數(shù)據(jù)(如數(shù)據(jù)庫中的數(shù)據(jù)),。該工作表不屬于測試用例設計范圍,但與測試用例設計工作表和測試數(shù)據(jù)工作表保存于同一工作簿文件中,,便于在測試執(zhí)行過程中即時保留相關數(shù)據(jù),。
    本研究主要針對測試數(shù)據(jù)工作表的格式進行設計,目標是使測試數(shù)據(jù)既具有較好的可讀性又便于編程實現(xiàn)數(shù)據(jù)驅(qū)動測試,。以學生信息管理模塊為例來說明測試用例設計格式,。這里,主要以一般管理信息系統(tǒng)常用的增刪改查功能來說明,。測試對象界面如圖1所示,。

    對圖1所示的界面進行功能測試,測試的主要功能為界面操作與數(shù)據(jù)庫數(shù)據(jù)是否吻合,,為了使測試過程通過數(shù)據(jù)驅(qū)動在QTP上自動完成,,設計了如圖2所示的測試數(shù)據(jù)設計格式(限于篇幅,,圖2中只包含修改功能的用例)。其中,,測試用例編號Case002,、執(zhí)行前數(shù)據(jù)標志BeforeTest、數(shù)據(jù)庫數(shù)據(jù)標志DataBase,、執(zhí)行動作標志【Delete】和【Insert】,、數(shù)據(jù)結(jié)束標志***END***、界面數(shù)據(jù)標志Form,、測試執(zhí)行后標志AfterTest均為設計格式中的關鍵字,,其中,測試用例編號不能重復,。在后續(xù)的數(shù)據(jù)驅(qū)動測試腳本開發(fā)中,,將根據(jù)這些關鍵字查找數(shù)據(jù)自動完成測試。
    圖2所示為對學生基本信息管理界面的修改功能進行測試的測試用例,。測試用例執(zhí)行前,,由于界面中的“所屬”顯示的內(nèi)容來自Department表,因此需要制作該表的數(shù)據(jù),,同時還需要制作Student中用于修改操作的對象數(shù)據(jù),。為簡化數(shù)據(jù)制作的實現(xiàn),統(tǒng)一采用刪除后再插入數(shù)據(jù)的方式來制作數(shù)據(jù)庫測試數(shù)據(jù),。測試用例執(zhí)行后,,需要驗證數(shù)據(jù)庫中Student表的數(shù)據(jù)是否按界面設定內(nèi)容發(fā)生改變,AfterTest中為數(shù)據(jù)庫數(shù)據(jù)的預期結(jié)果值,,用于與實際執(zhí)行結(jié)果相比較來判斷結(jié)果的正確性,。

 

 

2 數(shù)據(jù)驅(qū)動測試的設計與實現(xiàn)
    為便于重用,將用于數(shù)據(jù)驅(qū)動測試的過程和函數(shù)設計在一個函數(shù)庫中,。同時,,為了減少Excel文件數(shù)據(jù)讀取的I/O次數(shù),首先將工作表中的數(shù)據(jù)一次讀入二維數(shù)組,,然后采用二維數(shù)組的數(shù)據(jù)來驅(qū)動測試執(zhí)行,。
2.1 函數(shù)庫的設計
    對圖1所示界面進行功能測試,,一條測試用例執(zhí)行的基本步驟為:數(shù)據(jù)庫環(huán)境設定→界面操作→結(jié)果保留和判斷→測試報告生成,。因此,庫函數(shù)主要圍繞上述步驟的實現(xiàn)進行設計,,其中主要實現(xiàn)的功能為用例執(zhí)行前數(shù)據(jù)庫環(huán)境的設定,、用例執(zhí)行后數(shù)據(jù)庫結(jié)果的保留以及測試結(jié)果判斷,其中作為測試結(jié)果的界面部分由QTP的Active Screen功能自動保存,。另外,,測試用例執(zhí)行及測試報告生成功能在各個測試對象的測試腳本中實現(xiàn),。為減少測試腳本與函數(shù)庫過程和函數(shù)間的參數(shù)傳遞,將二維數(shù)組作為公共變量(arrRange)定義在函數(shù)庫中,,函數(shù)庫中定義的主要過程和函數(shù)如下:
    (1)測試數(shù)據(jù)讀入過程
    ReadExcelData(strPath,,strSheet),參數(shù)順次為Excel文件保存路徑,、工作表名,,其功能是將工作表中的數(shù)據(jù)保存于二維數(shù)組(arrRange)中,供后續(xù)測試使用,,實現(xiàn)代碼如下:
Sub ReadExcel(strFileName,strSheetName)
    Dim objExcel
    Dim objRange
    '打開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ù)查找過程SearchData (strKey,,Byref m,Byref n),,參數(shù)依次為查找關鍵字,、行編號、列編號,。功能為查找關鍵字在二維數(shù)組中的位置,,參數(shù)m、n既帶入查找開始位置,,又將查找結(jié)果帶回到主調(diào)腳本中,實現(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ù)庫環(huán)境構(gòu)建過程
    CreateDbData(strCaseNo,,Byref m,Byref n),,參數(shù)依次為測試用例編號,、行編號和列編號,該過程的功能是對指定用例執(zhí)行前的數(shù)據(jù)庫環(huán)境進行設定,,將工作表中對應用例編號下面DataBase與/DataBase之間的數(shù)據(jù)按順序先刪除再插入,,該過程將調(diào)用SearchData過程來定位數(shù)據(jù)位置。其處理流程如圖3所示,。

    (4)測試結(jié)果保留過程
    SaveDbData(strCaseNo,,strResultSheet),參數(shù)為測試用例編號,,功能為從測試數(shù)據(jù)工作表中讀取AfterTest中的SQL語句,,將數(shù)據(jù)庫中查詢的數(shù)據(jù)結(jié)果依次保存到測試結(jié)果工作表中。
    (5)測試結(jié)果判斷函數(shù)
    JudgeResult(strCaseNo,,ByRef strMsg),,參數(shù)為測試用例編號和測試結(jié)果信息,比較預期結(jié)果與實際執(zhí)行結(jié)果是否一致,,若抽選出的數(shù)據(jù)量或?qū)獢?shù)據(jù)值一致則返回True,;若不一致,則返回值為False,,同時將比較結(jié)果的詳細信息通過strMsg變量帶回到主調(diào)測試腳本中,。為簡化數(shù)據(jù)比較操作,,要求預期結(jié)果與實際結(jié)果按同樣方式排序,因此查詢結(jié)果的SQL語句必須用ORDER BY語句對抽選結(jié)果進行排序,。
2.2 測試腳本設計
    在編寫測試腳本前,,先通過QTP錄制一段簡單的界面操作,錄制過程中,,將測試中需要捕獲的對象用鼠標拖選,以便將其添加到對象庫中,,然后停止錄制,最后根據(jù)測試流程在專家視圖中編寫測試腳本,。以下為圖2所示的測試用例Case002對應的測試腳本:
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來動態(tài)獲取輸入界面的數(shù)據(jù),,該函數(shù)定義在函數(shù)庫中,用來獲取行列為i,、j的數(shù)組值,,由于是按列依次獲取數(shù)據(jù),在函數(shù)中將j值自動加1來實現(xiàn),。
2.3 測試結(jié)果
    對圖1的界面設計增刪查改4個測試用例,,并在應用程序的修改操作中人為制造一個Bug,使Update語句漏掉一個字段的修改,,運行測試腳本,,測試報告如圖4所示。

    軟件測試工具給自動化測試提供了一個實用的平臺,,但要對應各種復雜的測試,,基于測試工具的二次開發(fā)是必不可少的。本研究主要針對一般管理信息系統(tǒng)的基本功能設計了一個測試數(shù)據(jù)設計格式,,并基于這一格式建立了一個能通用于類似系統(tǒng)的函數(shù)庫,。后續(xù)研究中將繼續(xù)在QTP測試平臺對實際項目中常用的一些測試模式進行可重用函數(shù)庫的開發(fā)研究,以提升QTP的自動化測試能力和效率,。
參考文獻
[1] 陳技能.QTP自動化測試進階[M].北京:電子工業(yè)出版社,,2011:153-179.
[2] 張鶴.基于QTP的自動化功能測試研究與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學,2011.
[3] 杜麗潔.基于QTP自動化測試框架的開發(fā)與應用[D].武漢:武漢理工大學,,2012.
[4] 區(qū)立斌.基于層次關鍵字驅(qū)動的自動化測試框架設計與應用[D].廣州:中山大學,,2012.
[5] 王敏,陳亞光.數(shù)據(jù)庫系統(tǒng)輔助測試工具[J].微型機與應用,,2013,,32(3):13-15.
[6] 佟偉光.軟件測試[M].北京:人民郵電出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。