自动化测试框架发展的第三个阶段是关键字驱动测试框架阶段,它是当前比较流行的一种框架之一,并且现在的自动化测试工具QuickTest已经将关键字驱动框架融入到工具中。在录制过程中自动化测试工具会将对象及操作属性保存到对象库中。
录制完成后的每个测试步骤主要有三个元素组成:
以QuickTest自带的飞机订票系统为例,录制其登录过程,生成的代码如下:
Dialog("Login").WinEdit("Agent Name:").Set "test"
Dialog("Login").WinEdit("Password:").SetSecure "4d410e55b694bada39e235f9896e6eb810ba0e60"
Dialog("Login").WinButton("OK").Click
这是QuickTest以关键驱动的方式生成的代码,但也可以通过代码来实现关键字驱动测试。关键字驱动测试最核心的是关键字表格。以飞机订票系统的登录为例,其关键字表格见表19-1。
父对象 |
孩子对象 |
描述 |
事件 |
值 |
Dialog |
|
text:=Login |
Launch |
D:\QuickTest Professional\samples\flight\app\flight4a.exe |
Dialog |
WinEdit |
attached text:=Agent Name: |
Set |
test |
Dialog |
WinEdit |
attached text:=Password: |
Set |
mercury |
Dialog |
WinButton |
text:=ok |
Click |
|
关键字驱动的思路是将关键字表中的对象及数据提取出来并构造成每个测试步骤,如步骤:
Dialog("Login").WinEdit("Agent Name:").Set "test"
需要将关键字表中的对象、属性及输入的数据读取出来,将它们构造同以上格式的代码步骤,通过这种方式来实现关键字驱动的功能。
下面是调试好的一个的关键字驱动的框架,代码如下:
—————————————————————————————————
''
' 工程名:关键字驱动
'
' 方法:
' GetExcelCells —————读取单元格中的值
' GetExcleSheetRowsCount—————获取关键字驱动表中的行数
' oParentObject—————构造父对象
' oChildObject—————构造子对象
' oEventObject —————对对象属性赋值
'
' 版本:v1.0
'作者:黄文高
'时间:2011-01-27
'———————————————————————————————————
Dim arrObjectName
Dim oParent
Dim oChild
Dim oClassName
Dim oValue
dim object
'———————————————————————————————————
''
' 函数名:GetExcelCells
'
' 参数:
' ExcelPath —————关键字驱动表的路径
' SheetName—————关键字驱动表的sheet名
' SheetRow—————单元格中的行
' SheetColumn—————单元格中的列
'
'时间:2011-01-27
'——————————————————————————————————
Function GetExcelCells(ExcelPath,SheetName,SheetRow,SheetColumn)
Set ExcelBook = CreateObject("Excel.Application")
Set ExcelSheet = CreateObject("Excel.Sheet")
Set myExcelBook = ExcelBook.WorkBooks.Open(ExcelPath)
Set myExcelSheet = myExcelBook.WorkSheets(SheetName)
SheetValue = myExcelSheet.cells(SheetRow,SheetColumn).value
GetExcelCells = SheetValue
ExcelBook.Quit
set ExcelSheet = Nothing
Set ExcelBook = Nothing
End Function
'——————————————————————————————————
''
' 函数名:GetExcleSheetRowsCount
'
' 参数:
' ExcelPath —————关键字驱动表的路径
' SheetName—————关键字驱动表的sheet名
'
'时间:2011-01-27
'——————————————————————————————————
Function GetExcleSheetRowsCount(ExcelPath,SheetName)
Set ExcelBook = CreateObject("Excel.Application")
Set ExcelSheet = CreateObject("Excel.Sheet")
Set myExcelBook = ExcelBook.WorkBooks.Open(ExcelPath)
Set myExcelSheet = myExcelBook.WorkSheets(SheetName)
GetExcleSheetRowsCount = myExcelSheet.UsedRange.Rows.Count
ExcelBook.Quit
set ExcelSheet = Nothing
Set ExcelBook = Nothing
End Function
'——————————————————————————————————
''
' 函数名:oParentObject
'
' 参数:
' parentobject —————关键字驱动表的Parent列
'
'时间:2011-01-27
'——————————————————————————————————
Function oParentObject(parentobject)
arrObjectName = array("text:=Login","regexpwndtitle:=Flight Reservation")
'在这里可以添加其它的一些对象类型,如Browser对象
'因为在关键字驱动表中可能存在多种对象
Select Case LCase(parentobject)
Case "window"
Set object = window(arrObjectName(1))
Case "dialog"
Set object = dialog(arrObjectName(0))
Case else
print "对象错误"
End Select
End Function
'——————————————————————————————————
''
' 函数名:oChildObject
'
' 参数:
' childobject —————关键字驱动表的Child列
' childobjectName —————关键字驱动表的Description列
'
'时间:2011-01-27
'————————————————————————————————
Function oChildObject(childobject,childobjectName)
If childobject <> "" Then
'在这里可以添加其它的一些子对象类型
'如WebList对象
Select Case LCase(childobject)
Case "winedit"
Set object = object.WinEdit(childobjectName)
Case "winbutton"
Set object = object.WinButton(childobjectName)
End Select
End If
End Function
'———————————————————————————————————
''
' 函数名:oEventObject
'
' 参数:
' eventobject —————关键字驱动表的Event列
' oValue —————关键字驱动表的Value列
'
'时间:2011-01-27
'——————————————————————————————————
Function oEventObject(eventobject,oValue)
If eventobject <> "" Then
'在这里可以添加其它的多种属性,如Type
Select Case LCase(eventobject)
Case "set"
object.set oValue
Case "click"
object.click
Case else
print "属性错误"
End Select
End If
End Function
systemutil.Run "D:\QuickTest Professional\samples\flight\app\flight4a.exe","","",""
For i =5 to GetExcleSheetRowsCount("C:\Data.xls","TestCase")
oParent = GetExcelCells("C:\Data.xls","TestCase",i,1)
oChild = GetExcelCells("C:\Data.xls","TestCase",i,2)
oClassName = GetExcelCells("C:\Data.xls","TestCase",i,3)
oEvent = GetExcelCells("C:\Data.xls","TestCase",i,4)
oValue = GetExcelCells("C:\Data.xls","TestCase",i,5)
oParentObject oParent
oChildObject oChild,oClassName
oEventObject oEvent,oValue
Next
摘自《QTP自动化测试与框架模型设计》书中的关键字驱动测试框架