【软件测试自动化-QTP NOTE 14】 == 如何创建高效的Test-Data Dictionary 2nd ==

为了高效地从Excel返回数据,有两种比较好的方法:1. 使用遍历  2.SQL 查询
这次以SQL查询为例,因为它表现更为高效。

用Excel,我们可以高效的使用DataClass类来建立我们的Dictionary并且和我们手工创建Dictionary一样不需要太多的资源。

Public DataBuilder

Class DataClass
 
'声明变量

    Public FileName     'Excel WorkBook
    Public vSheet       'Excel WorkSheet
    Public iRow         'Excel Row where test data is contained
    
    '------------------------------------------------------
    ' Name: Load函数
    '
    ' Purpose: TestData Dictionary创建
    '
    ' Input:
    '    FileName : Workbook路径
    '    vSheet   : Worksheet文件名以及路径
    '    iRow     : 数据返回的行数
    '
    ' Output:
    '     Object- Scripting.Dictionary
    '------------------------------------------------------
    Public Property Get Load(FileName, vSheet, iRow)
 
        If Not CreateObject("Scripting.FileSystemObject").FileExists(FileName) Then
            Reporter.ReportEvent micFail, "Load", "文件 '" & FileName & "' 不存在。"
            Exit Property
        End If
 
         With Me
            .FileName = FileName
            .vSheet = vSheet
            .iRow = iRow
        End With
 
        Set Load = BuildHashTable
    End Property
 
    '------------------------------------------------------
    ' Name: BuildHashTable函数
    '
    ' Purpose: 连接Excel后SQL查询,Test Data Dictionary 
    '
    ' Input:
    '    None
    '
    ' Output:
    '     None
    '------------------------------------------------------
    Private Property Get BuildHashTable  '注:不能被Class外函数调用
        Set BuildHashTable = Nothing
 
        Dim oConn, oRS, arrData, x, oDict, sQuery
        CONST adOpenStatic = 3      '静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动
        CONST adLockOptimistic = 3  '只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等 
        CONST adCmdText = "&H0001"  'adCmdText是将CommandText作为命令或存储过程调用的文本化定义进行计算
 
        'On Error Resume Next
            Set oConn = CreateObject("ADODB.Connection")
            Set oRS = CreateObject("ADODB.RecordSet")
 
            'Open Connection
            oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &_
                        "Data Source=" & Me.FileName & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=Yes;"";"
 
            'SQL 查询
            sQuery = "Select * From [" & Me.vSheet & "$]"
 
            'Run query against WorkBook
            oRS.Open sQuery, oConn, 3, 3, 1
 
            If Err.Number > 0 Then
                Reporter.ReportEvent micFail, "BuildHashTable", Err.Description
                Err.Clear : Exit Property
            End If
 
            'Move RecordSet to the target Row
            For x = 2 to Me.iRow - 1 : oRS.MoveNext : Next
 
            Set oDict = CreateObject("Scripting.Dictionary")
 
            'Use a For..Loop to Build Scripting.Dictionary
            For x = 0 to oRS.Fields.Count - 1
                With oDict
                    .Add "" & oRS(x).Name, "" & oRS.Fields(x)
                End With
            Next
 
            'Error here generally occurs if there is an invalid character
            'in the Heading -> (oRS(x).Name)
            If Err.Number > 0 Then
                Reporter.ReportEvent micFail, "BuildHashTable", Err.Description
                Err.Clear : Exit Property
            End If
 
            Set BuildHashTable = oDict
        On Error Goto 0    
    End Property
 
End Class
 
'New instance
Set DataBuilder = New DataClass





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值