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

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

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

    對圖1所示的界面進行功能測試,測試的主要功能為界面操作與數(shù)據(jù)庫數(shù)據(jù)是否吻合,為了使測試過程通過數(shù)據(jù)驅(qū)動在QTP上自動完成,設(shè)計了如圖2所示的測試數(shù)據(jù)設(shè)計格式(限于篇幅,圖2中只包含修改功能的用例)。其中,測試用例編號Case002、執(zhí)行前數(shù)據(jù)標志BeforeTest、數(shù)據(jù)庫數(shù)據(jù)標志DataBase、執(zhí)行動作標志【Delete】和【Insert】、數(shù)據(jù)結(jié)束標志***END***、界面數(shù)據(jù)標志Form、測試執(zhí)行后標志AfterTest均為設(shè)計格式中的關(guān)鍵字,其中,測試用例編號不能重復(fù)。在后續(xù)的數(shù)據(jù)驅(qū)動測試腳本開發(fā)中,將根據(jù)這些關(guān)鍵字查找數(shù)據(jù)自動完成測試。
    圖2所示為對學(xué)生基本信息管理界面的修改功能進行測試的測試用例。測試用例執(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ù)是否按界面設(shè)定內(nèi)容發(fā)生改變,AfterTest中為數(shù)據(jù)庫數(shù)據(jù)的預(yù)期結(jié)果值,用于與實際執(zhí)行結(jié)果相比較來判斷結(jié)果的正確性。

 

 

2 數(shù)據(jù)驅(qū)動測試的設(shè)計與實現(xiàn)
    為便于重用,將用于數(shù)據(jù)驅(qū)動測試的過程和函數(shù)設(shè)計在一個函數(shù)庫中。同時,為了減少Excel文件數(shù)據(jù)讀取的I/O次數(shù),首先將工作表中的數(shù)據(jù)一次讀入二維數(shù)組,然后采用二維數(shù)組的數(shù)據(jù)來驅(qū)動測試執(zhí)行。
2.1 函數(shù)庫的設(shè)計
    對圖1所示界面進行功能測試,一條測試用例執(zhí)行的基本步驟為:數(shù)據(jù)庫環(huán)境設(shè)定→界面操作→結(jié)果保留和判斷→測試報告生成。因此,庫函數(shù)主要圍繞上述步驟的實現(xiàn)進行設(shè)計,其中主要實現(xiàn)的功能為用例執(zhí)行前數(shù)據(jù)庫環(huán)境的設(shè)定、用例執(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ù)依次為查找關(guān)鍵字、行編號、列編號。功能為查找關(guān)鍵字在二維數(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)境進行設(shè)定,將工作表中對應(yīng)用例編號下面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é)果信息,比較預(yù)期結(jié)果與實際執(zhí)行結(jié)果是否一致,若抽選出的數(shù)據(jù)量或?qū)?yīng)數(shù)據(jù)值一致則返回True;若不一致,則返回值為False,同時將比較結(jié)果的詳細信息通過strMsg變量帶回到主調(diào)測試腳本中。為簡化數(shù)據(jù)比較操作,要求預(yù)期結(jié)果與實際結(jié)果按同樣方式排序,因此查詢結(jié)果的SQL語句必須用ORDER BY語句對抽選結(jié)果進行排序。
2.2 測試腳本設(shè)計
    在編寫測試腳本前,先通過QTP錄制一段簡單的界面操作,錄制過程中,將測試中需要捕獲的對象用鼠標拖選,以便將其添加到對象庫中,然后停止錄制,最后根據(jù)測試流程在專家視圖中編寫測試腳本。以下為圖2所示的測試用例Case002對應(yīng)的測試腳本:
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的界面設(shè)計增刪查改4個測試用例,并在應(yīng)用程序的修改操作中人為制造一個Bug,使Update語句漏掉一個字段的修改,運行測試腳本,測試報告如圖4所示。

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

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