蔣桂梅
(廣東女子職業技術學院 應用設計系,廣東 廣州511450)
自動化測試是使用軟件來控制測試執行過程,需要在適當的時間使已形式化的手工測試過程自動化,最好的自動化測試工具是能夠將工具與測試需求達成一致,并且提供高度可自定義的工作流程和跟蹤報告能力[1]。
Mercury QuickTest Professional(簡稱QTP)是企業級自動化測試工具,已被惠普公司收購,QTP 主要適用于功能和回歸測試的自動化,采用關鍵字驅動的理論來簡化對測試用例的創建和維護,用戶可以直接錄制屏幕上的操作流程,自動生成功能測試或回歸測試腳本。當腳本錄制完成,并不能完全立即使用,主要原因是錄制的腳本只能覆蓋一條測試用例,并且對數據的依賴性很強,更換數據后就會出錯,這種線性的自動化測試方式缺點很明顯,需要對腳本進行優化和增強。
適當調整和增強測試腳本,提高腳本的靈活性,數據驅動方式的測試腳本是解決這類問題的重要方式。數據驅動的測試方法要解決的核心問題是把數據從測試腳本中分離出來,從而實現測試腳本的參數化[2]。
數據驅動測試一般按以下步驟進行[3]:
1)參數化測試數據,綁定到數據表格中的各個字段;
2)在表格中編輯多行的測試數據,取決于測試用例及測試覆蓋率的需要;
3)設置迭代次數,每次迭代選擇一行數據。
本測試是測試飛行程序的登錄用戶名和密碼,將多組測試數據放在DataTable 的Global 或當前Action 表中。DataTable 是一種最容易實現參數化的方式。

圖1

圖2

圖3

圖4
參數化在“Value Configuration Option”對話框中設置“Name”和“Value”框中進行設置,環境變量實現參數化當在同一個Test 中多個Action 調用同一個參數時,使用環境變量作為參數是一種很好的方式,但每個參數值都要指定,如果測試多組數據工作量就大了。
先在腳本根目錄中創建txt 文件,將內容輸入文件中,輸入格式如圖4。
QTP 腳本代碼如下:
Const ForReading=1
FilePath = Environment ("TestDir")&"login.txt" '取得存儲數據的txt文件的路徑
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DataFile = Fso.OpenTextFile(FilePath,ForReading,False)
Do while DataFile.AtEndOfLine<>true
systemutil.Run "D:Program FilesHPQuickTest
Professionalsamplesflightappflight4a.exe","","",""
ReadString = DataFile.ReadLine '讀取txt 文件中的行記錄
DataStr = split (ReadString,",") '將行記錄以逗號為分隔符分開,并存入數組中
Dialog("Login").WinEdit("Agent Name:").Set datastr(0) '輸入用戶名
Dialog("Login").WinEdit("Password:").SetSecure datastr(1) '輸入密碼
Dialog("Login").WinButton("OK").Click
If Dialog("Flight Reservations").Exist (5) then
Dialog("Flight Reservations").winbutton("確定").Click
Dialog("Login").winbutton("cancel").Click
else
Window("Flight Reservation").Close
end if
wait(3)
loop
DataFile.close
do-loop 結構是為了使多組數據循環執行下去,直到文件結尾,ifelse-endif 結構是判斷對話框“Flight Reservations”的存在與否來推斷用戶和密碼是否輸入錯誤的情況處理,讓循環能繼續下一組數據的驗證。
先在腳本根目錄中創建xls 文件,將內容輸入文件中,輸入格式如圖5。

圖5

圖6
QTP 腳本代碼如下:
datatable.ImportSheet "login.xls","login_sheet","Action1"
'第一個參數是源文件,第二個參數是源文件工作表名稱,第三個參數是目的路徑表名稱
Dim i,rowcount
i=1
rowcount=datatable.GetSheet ("Action1").GetRowCount
Do while(i<=rowcount)
systemUtil.Run "D:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exe","","",""
datatable.SetCurrentRow (i)
Dialog ("Login").WinEdit ("Agent Name:").Set DataTable("user",dtLocalSheet)
Dialog ("Login").WinEdit ("Password:").Set DataTable ("pwd",dtLocalSheet)
Dialog("Login").WinButton("OK").Click
If Dialog("Login").Dialog("Flight Reservations").Exist (5) then
Dialog("Login").Dialog("Flight Reservations").winbutton(" 確定").Click
Dialog("Login").winbutton("cancel").Click
else
Window("Flight Reservation").Close
end if
i=i+1 Loop
datatable.ImportSheet 語句是導入 Excel 外部文件到 DataTable 的Action1 中,do-loop 結構依然是為了使多組數據循環執行下去。
先在腳本根目錄中創建XML 文件,將內容輸入文件中,輸入格式如圖6。
QTP 腳本代碼如下:
set xmldoc=CreateObject("microsoft.xmldom")
TestPath = Environment("TestDir")&" login.xml"
xmldoc.load(TestPath)
Set Root=xmldoc.documentElement
For i = 0 To Root.childNodes.Length-1
systemutil.Run "D:Program FilesHPQuickTest
Professionalsamplesflightappflight4a.exe","","",""
Set TestCases = Root.childNodes.Item(i)
For j = 0 To TestCases.childNodes.Length-1
Set TestCase = TestCases.childNodes.Item(j)
If cstr(TestCase.nodeName)="UserName"Then
Dialog ("Login").WinEdit("Agent Name:").Set TestCase.text
end if
If cstr(TestCase.nodeName)="PW" Then
Dialog ("Login").WinEdit ("Password:").SetSecure TestCase.text
End If
Next
Dialog("Login").WinButton("OK").Click
If Dialog("Login").Dialog("Flight Reservations").Exist (5) then
Dialog("Login").Dialog("Flight Reservations").winbutton(" 確
定").Click
Dialog("Login").winbutton("cancel").Click
else
Window("Flight Reservation").Close
end if
wait(3)
Next
Set root=nothing
Set xml=nothing
QTP 腳本中用到了雙層for 語句,外層for 語句用于多組數據的循環,內層for 用于同組數據多個字段間的循環。
通過參數化方式,從外部數據源或數據產生器讀取測試數據,從而擴大測試的覆蓋面,提高了測試的靈活性。除了以上方式實現參數化,還可以使用數據庫表作為數據源。在實際的測試工作中,我們可以根據需要靈活組合方式來進行使用。
[1]王磊.關鍵字驅動的自動化測試框架設計與實現[J].電子測試,2010,41(8):91-97.
[2]王蕾.基于數據驅動的軟件自動化測試框架系統的研究與實現EJ1[J].軟件導刊,2009,38(6):33-34.
[3]陳能技.QTP 自動化測試技術進階[M].北京:電子工業出版社,2010.