关键字驱动框架(keyword-driven/table-driven testing)
关键字驱动测试框架是目前比较流行的一种框架,QTP实现了一个简单易用的关键字框架。
构建关键字驱动测试框架,首先定义关键字表格,关键字表格一般存储在测试数据库、Excel或文件中。例如下面的表格定义了测试Windows计算器所需要的所有对象、操作、测试数据:
Window | Control | Action | Arguments |
Calculator | Menu | | View, Standard |
Calculator | Pushbutton | Click | 1 |
Calculator | Pushbutton | Click | + |
Calculator | Pushbutton | Click | 3 |
Calculator | Pushbutton | Click | = |
Calculator | | Verify Result | 4 |
Calculator | | Clear | |
Calculator | Pushbutton | Click | 6 |
Calculator | Pushbutton | Click | - |
Calculator | Pushbutton | Click | 3 |
Calculator | Pushbutton | Click | = |
Calculator |
| Verify Result | 3 |
然后编写驱动代码,读取上述表格,分析出测试对象、测试操作、测试数据,编写高度抽象的测试逻辑,下面是一个框架的伪代码:
Main Script. / Program
Connect to data tables.
Read in row and parse out values.
Pass values to appropriate functions.
Close connection to data tables.
Menu Module
Set focus to window.
Select the menu pad option.
Return.
Pushbutton Module
Set focus to window.
Push the button based on argument.
Return.
Verify Result Module
Set focus to window.
Get contents from label.
Compare contents with argument value.
Log results.
Return.
有了驱动框架后,只需要按一定的格式编辑表格的数据,就可以利用驱动框架遍历表格中的每一行数据,执行所有测试用例。
数据驱动框架(Data-Driven Testing)
数据驱动框架与关键字驱动框架类似,测试数据都存储在数据库或Excel文件,但是数据驱动框架的测试用例、测试步骤和测试逻辑是在测试脚本中编写的,而不像关键字驱动框架一样放在表格中。
例如对于图中的测试,可以把每个输入框的数据进行参数化,在Excel文件中存储(如果是使用Rational Robot的话就可以直接使用DataPool)。
如果通过录制产生脚本的话,可得到脚本如下所示:
'Data Driven Framework
'Test Case Script
SubMain
'Make An Order
Window Set Context, "Name=frmOrder", ""
'Card Number
EditBox Click, "Name=txtCreditCard", "Coords=16,9"
InputKeys "3333444455556666"
'Expiration Date
EditBox Click, "Name=txtExpirationDate", "Coords=6,7"
InputKeys "3333444455556666"
'Place Order
PushButton Click, "Name=cmdOrder"
'Confirmation Screen
Window SetContext, "Name=frmConfirm", ""
PushButton Click, "Name=cmdOK"
End Sub
我们可以在表格中填写参数对应的测试数据:
然后在修改脚本如下:
'Data Driven Framework
'Test Case Script
'$Include "SQAUTIL.SBH"
SubMain
Dim Result As Integer
Dim DatapoolHandle As Long
Dim DatapoolReturnValue As Variant
'Open the datapool
DatapoolHandle = SQADatapoolOpen("OrderFormDP")
'...Add error checking....
'Loop through the datapool
While SQADatapoolFetch(DatapoolHandle) = dqaDpSuccess
'Open Order Form
Window SetContext, "Name=frmMain", ""
PushButton Click, "Name=cmdOrder"
Window SetContext, "Name=frmOrder", ""
'Card Number
Result = SQADatapoolValue(DatapoolHanle, "Credit Card Number", DatapoolReturnValue)
"...Add error checking....
EditBox Click, "Name=txtCreditCard", "Coords=16,9"
'...Clear Value....
InputKeys DatapoolReturnValue
'Expiration Date
Result = SQADatapoolValue(DatapoolHandle, "Expiration Date", DatapoolReturnValue)
'...Add error checking....
'...Clear Value...
EditBox Click, "Name=txtExpirationDate", "Coords=6,7"
InputKeys DatapoolReturnValue
'Place Order
Result = SQADatapoolValue(DatapoolHandle, "Order", DatapoolReturnValue)
If UCASE(DatapoolReturnValue) = "YES" Then
PushButton Click, "Name=cmdOrder"
'Confirmation Screen
Window SetContext, "Name=frmConfirm", ""
Pushbutton Click, "Name=cmdOK"
Else
PushButton Click, "Name=cmdCancel"
End If
Wend 'Go fetch next row
'Close datapool
Result = SQADatapoolClose(DatapoolHandle)
'...Add error checking....
End Sub
脚本从表格中读入测试数据,包括测试输入的数据,测试结果验证的数据。通过循环遍历数据表格中的所有行,可以极大地增大测试覆盖面,测试各种输入条件下应用程序的表现。
混合框架(hybrid test automation)
以上每种类型的框架都有其优点和缺点,通常在测试项目中需要混合使用几种框架,因此就有了混合型框架,如图所示。