关键字驱动测试框架

自动化测试框架发展的第三个阶段是关键字驱动测试框架阶段,它是当前比较流行的一种框架之一,并且现在的自动化测试工具QuickTest已经将关键字驱动框架融入到工具中。在录制过程中自动化测试工具会将对象及操作属性保存到对象库中。

录制完成后的每个测试步骤主要有三个元素组成:

  1.          Item:指对象名,可以是一个窗口、按钮等;
  2.          Operation:指要执行的动作,如Select、Click等;
  3.          Value:操作动作所输入的数据值;

以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自动化测试与框架模型设计》书中的关键字驱动测试框架

你可能感兴趣的:(框架,function,object,测试,dialog,login)