3.4.3.2 高效数据字典的实现
QTP自带有DataTable,相信大多数自动化测试工程师都会使用DataTable来作为数据驱动测试,它与QTP结合的非常好,并且使用起来也非常简单。但是由于QTP源代码是封闭的,因此功能上存在着一定的局限性使得我们无法对其进行扩展或者更改。但如果使用Dictionary字典对象与ADO结合就可以打造一个完美、高效、灵活的外部自定义DataTable,并且可以自己进行任意的扩展。
前一小节已经介绍了怎样使用数据源ADO来控制Excel的数据,在控制数据方面上,其优势比EOM明显方便很多。接下来就来尝试一下使用数据源与Dictionary对象结合一起的操作。这里仍然延续使用上一小节D盘中的“1.xls”,并在其中多加两列属性和对应的数据,如图3-41所示。
图3-41
接着定义一个数据类,用于QTP直接来调用它,方便以后的使用,脚本如下所示:
Class oDataDic Private oDic '定义Dictionary对象 Public oWorkBookPath '定义WorkBook路径变量 Public oSheetName '定义Sheet名称 Public oRowNo '定义包含数据的Excel行数 '==================================================== '载入Excel Public Default Function Load(oWorkBookPath, oSheetName, oRowNo) With Me .oWorkBookPath = oWorkBookPath .oSheetName = oSheetName .oRowNo = oRowNo End With BuildContext Set Load = oDict End Function '======================================================= Private Function BuildContext Dim oConn, oRS, arrData, x Set oConn = CreateObject("ADODB.Connection") Set oRS = CreateObject("ADODB.RecordSet") '打开数据源 oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &_ "Data Source=" & Me.oWorkBookPath & ";" & _ "Extended Properties=""Excel 8.0;HDR=Yes;"";" '查询语句 sQuery = "Select * From [" & Me.oSheetName & "$]" '执行查询 oRS.Open sQuery, oConn, 3, 3, 1 '移动数据库游标 For x = 2 to oRowNo - 1 : oRS.MoveNext : Next
'创建Dictionary对象 oDict = CreateObject("Scripting.Dictionary") '使用For循环重构Dictionary对象 For x = 0 to oRS.Fields.Count - 1 With oDict .Add "" & oRS(x).Name, "" & oRS.Fields(x) End With Next End Function Private Property Let oDict(ByVal Val) Set oDic = Val End Property
Private Property Get oDict() Set oDict = oDic End Property
End Class
'创建oDataDic类 Set mDataContext = New oDataDic |