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

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

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

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

 

 

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

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

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国产成人影院在线观看 | 日本三级2021最新理论在线观看 | 99久久精品国产国产毛片 | 国产成人精品久久一区二区小说 | 国产欧美日韩一区二区三区在线 | 精品日韩一区二区三区视频 | 免费看欧美成人性色生活片 | 久久免费视频在线 | 特大一级aaaaa毛片 | 亚洲精品日韩一区二区 | 亚洲精品综合一区在线 | 成人免费视频一区二区 | 亚洲自拍高清 | 欧美黄区| 国产三级午夜理伦三级 | 91视频欧美 | 特级黄色毛片视频 | 亚洲欧美一级久久精品 | 久草久在线| 制服丝袜怡红院 | 久久视频在线视频 | 欧美一级毛片免费播放aa | 日日噜噜噜夜夜爽爽狠狠69 | 日本高清精品 | 成人a视频在线观看 | 一个人看的www日本高清视频 | 久久欧美久久欧美精品 | 麻豆国产视频 | 亚洲成人免费在线视频 | 中文字幕一区二区三区在线观看 | 中文字幕亚洲区 | 91网站网站网站在线 | 久久久久在线观看 | 免费一级肉体全黄毛片 | 日本 亚洲 欧美 | 亚洲日本在线看片 | 天堂一区二区三区在线观看 | 亚洲国产日韩综合久久精品 | 国产高清精品自在久久 | 亚洲影院在线播放 | 国产成人综合网亚洲欧美在线 |