51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 13400|回复: 37
打印 上一主题 下一主题

[原创] 自己整合的比较经典的qtp框架+excel报告

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-12-25 13:19:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 auuppp 于 2011-12-25 13:23 编辑

自己整合的比较经典的qtp框架+excel报告,两个都是网上下载的,我整合到一起了,可以导出excel的报告,完美哦。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

推荐
 楼主| 发表于 2011-12-25 13:21:11 | 只看该作者
testCaseFile =parameter("testCaseFile")  
testCaseSheetName =parameter("testCaseSheetName")   
caseName =parameter("caseName")   
'msgbox caseName
'msgbox testCaseSheetName
ExecuteFile "D:\测试技术\qtp\project1\project\frameUtil\ClassExcelReport.vbs" '加载task脚本文件
Set oReport = Environment("oReport")

sBusinessCase=taskFileName
call Driver_TestCase(testCaseFile,testCaseSheetName)
function Driver_TestCase(testCaseFile,testCaseSheetName)
   'testCaseFile 该传入参数是一个绝对路径的 Excel文件
   'testCaseSheetName该传入参数是Excel文件中存放测试用例数据 的 Sheet的名称,
        TEST_SHEET = Environment("TEST_SHEET")

        ' 导入测试用例的数据,默认为第一个Sheet
        call DataTable.AddSheet(TEST_SHEET)
        If testCaseSheetName<>"" Then
                call DataTable.ImportSheet(  testCaseFile, testCaseSheetName, TEST_SHEET )
        else
                call DataTable.ImportSheet(  testCaseFile, 1, TEST_SHEET )
        End If
        logPrint("测试用例的数据加载完成。"&testCaseFile)
        row_count = DataTable.GetSheet(TEST_SHEET).GetRowCount
        set taskFile = createobject("scripting.dictionary") ' taskFIle Key为存放task的文件名称,值为其路径
        set testDataTable = createobject("scripting.dictionary") ' testDataSheet ,Key为存放Excel文件名+Sheet名,值为Sheet名


        '首先找到需要加载的task文件
        DataTable.GetSheet(TEST_SHEET).SetCurrentRow( 1 )
    For i=1 to row_count
                If DataTable("IDX",TEST_SHEET) = "√" Then
                        taskFileName = DataTable("bizName",TEST_SHEET)
                       
                        if NOT taskFile.Exists(taskFileName) Then
                                taskFilePath = pathFind(Environment("testScriptFolderName"),taskFileName,"vbs")
                call taskFile.add(taskFileName,taskFilePath)
                            ExecuteFile taskFilePath '加载task脚本文件
               ' ExecuteFile "D:\测试技术\qtp\project1\project\frameUtil\ClassExcelReport.vbs" '加载task脚本文件
        '                 Set oReport = New ExcelReport
                                logPrint("加载Task脚本文件完成。"&taskFilePath)
                               
               

                                Execute "Set obj"&taskFileName&" = new "&taskFileName '初始化task的类
                               
                        End If
                End If
                DataTable.GetSheet(TEST_SHEET).SetNextRow
        Next
        '存放业务的Task的文件加载完毕

        '加载测试数据所在的Sheet
        DataTable.GetSheet(TEST_SHEET).SetCurrentRow( 1 )
        For i=1 to row_count
                If DataTable("IDX",TEST_SHEET) = "√" Then
                        testDataSheetName = DataTable("bizDataTable",TEST_SHEET)
                        If NOT testDataTable.Exists(testDataSheetName)  and testDataSheetName<>"" Then
                                tempArray = split(testDataSheetName,".") 'tempArray(0)是sheet名称
                                If Ubound(tempArray)=0 and tempArray(0)<>"" Then
                                        '如果只有Sheet名称,则加载当前Excel文件的Sheet
                                        call testDataTable.add(testDataSheetName,tempArray(0))
                                        call DataTable.AddSheet(tempArray(0))
                                        call DataTable.ImportSheet( testCaseFile, tempArray(0), tempArray(0) )   
                                elseif Ubound(tempArray)=1 and tempArray(1)<>"" Then
                                        '如果是引用的外部Excel的sheet,那么。。。
                                        call testDataTable.add(testDataSheetName,tempArray(1))
                                        testDataFilePath = pathFind(Environment("testDataFolderName"),tempArray(0),"xls")
                                        call DataTable.AddSheet(tempArray(1))
                                        call DataTable.ImportSheet( testDataFilePath, tempArray(1), tempArray(1) )  
                    
                                        logPrint("加载测试数据完成。"&tempArray(1))
                                else
                                        logPrint("数据文件的dataTable列格式错误。"&testDataSheetName)   
                                End If
                        End If
                End If
                DataTable.GetSheet(TEST_SHEET).SetNextRow
        Next
       
        '开始按照顺序执行测试用例中的具体的各个Task
        DataTable.GetSheet(TEST_SHEET).SetCurrentRow(1)
        For i = 1 to row_count
                If DataTable("IDX",TEST_SHEET) = "√" Then
                        '执行该脚本文件中的具体方法,方法名称为Excel表格中的taskName的值,暂时不做中英文名称的字典匹配,直接使用英文
                        className = DataTable("bizName",TEST_SHEET)
                        taskName = DataTable("taskName",TEST_SHEET)
                        bizDataTableName = DataTable("bizDataTable",TEST_SHEET)
                        filterExp =DataTable("filter",TEST_SHEET)   '过滤测试数据的条件语句

                        If bizDataTableName<>"" Then
                                '如果task有对应的测试数据,那么加载对应的测试数据
                                Sheet_Name = testDataTable.item(DataTable("bizDataTable",TEST_SHEET))
                                test_data_row_count = DataTable.GetSheet(Sheet_Name).GetRowCount
                                For j=1 To test_data_row_count
                                        DataTable.GetSheet(Sheet_Name).SetCurrentRow( j )
                                        If Eval(generateFilterExp(Sheet_Name,filterExp)) Then
                                                        'Eval(generateFilterExp(Sheet_Name,filterExp)) ,解析测试数据的条件语句,符合此条件的,则执行该行测试数据,否则不执行
                            str = "obj"&className&"."&taskName&" "&chr(34)&Sheet_Name&chr(34)
                                                       
                                                        logPrint("执行测试步骤 "&i&", "&str)
                                                        Execute str     ''执行 objlogin.login "login","TEST_SHEET"

                                        End If
                'oReport.AddReport caseName,className,taskName,,0,"成功","成功","明细"
                'msgbox testCaseSheetName
               
                                        DataTable.GetSheet(Sheet_Name).SetNextRow
                                       
                                Next
                               
            
                        else
                                '如果task没有对应的测试数据,则不加载测试数据,如退出登录logout()方法
                                str = "Call obj"&className&"."&taskName&"()"
                                logPrint("执行测试步骤 "&i&", "&str)
                                Execute str
                        end if       
                        oReport.AddReport caseName,className,taskName,0,"成功","成功","明细"
                End If
               
                DataTable.GetSheet(TEST_SHEET).SetNextRow
                 
        Next
  
        logPrint("所有测试步骤执行完成。")
   
        '释放定义的所有对象
        tempArray = taskFile.keys
        For i=0 to taskFile.Count-1
                Execute "Set obj"&tempArray(i)&" = nothing"
        Next
   Set taskFile = nothing
   tempArray = testDataTable.items
   For i=0 to testDataTable.Count -1
           If tempArray(i)<>"" Then
                   Call DataTable.DeleteSheet(tempArray(i))
           End If
   Next
   Set testDataTable = nothing
   Call DataTable.DeleteSheet(TEST_SHEET)
   Driver_TestCase= 0
End Function
回复 支持 1 反对 0

使用道具 举报

  • TA的每日心情
    开心
    2016-4-27 10:20
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    37#
    发表于 2016-6-20 13:40:32 | 只看该作者
      table = pathFind(testDataFolderName,testCaseFileName,"xls")  有这个用法么?到这通过不了呀!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-12-5 21:42
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    36#
    发表于 2013-11-21 14:31:06 | 只看该作者
    下来看看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35#
    发表于 2013-11-20 10:17:20 | 只看该作者
    回复 1# auuppp


       不错的~顶
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34#
    发表于 2013-9-10 14:03:39 | 只看该作者
    回复 29# nonesense


        你把exel文件重新另存为97-2003版本的应该就可以了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2013-9-10 14:03:35 | 只看该作者
    回复 29# nonesense


        你把exel文件重新另存为97-2003版本的应该就可以了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2013-7-23 09:50:19 | 只看该作者
    楼主是“QTP轻量级自动化测试框架”的作者吗?目测该框架和那个几乎一样.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
    发表于 2013-7-22 21:14:19 | 只看该作者
    Private Sub Report_Click()
        Dim input_report As String
        Dim long_input As Long
        Dim serrial_project As Integer: serrial_project = 0
       
        If Date_Month.Text = "" Then
            MsgBox "Please input Report Date !"
            End
        End If
        input_report = Date_Month.Text
        long_input = CLng(CDate(input_report))   'change date to long
       
        While (Sheets("Month").Cells(serrial_project + 5, 3).Value <> "")
            Call each_project(serrial_project, long_input)
            serrial_project = serrial_project + 1
        Wend
       
    End Sub

    '
    Private Function each_project(a, b)
        Dim j, k As Integer:  k = 0
        Dim sourch_report As String
        Dim p1, p2 As Integer
        Dim q1, q2 As String
        Dim long_source As Long
        Dim sum_ports As Integer: sum_ports = 0
       
        For j = 1 To Sheets.Count
            If UCase(Sheets(j).Name) = UCase(Sheets("month").Cells(a + 5, 3).Value) Then
                While (UCase(Sheets(j).Cells(4 + k, 13).Value) <> "")
                    If (UCase(Sheets(j).Cells(4 + k, 13).Value) = "YES") Then
                        sourch_report = Sheets(j).Cells(4 + k, 10).Value
                        p1 = InStr(sourch_report, "/")
                        p2 = InStrRev(sourch_report, "/")
                        q1 = Left(sourch_report, p1 - 1)
                        q2 = Right(sourch_report, Len(sourch_report) - p2)
                        long_source = CLng(CDate(q1 & "/" & q2))
                        If long_source = b Then
                            sum_ports = sum_ports + Val(Sheets(j).Cells(4 + k, 11).Value)
                        End If
                    End If
                    k = k + 1
                Wend
                Sheets("month").Cells(a + 5, 5).Value = sum_ports
                sum_ports = 0: k = 0
                Exit For
            End If
        Next j
    End Function

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
    发表于 2013-7-19 20:56:16 | 只看该作者
    SET_SHEET = Environment("SET_SHEET")
    TEST_SHEET = Environment("TEST_SHEET")
    不明白Environment("SET_SHEET")和 Environment("TEST_SHEET")的值是什么?在QTP中查看也没查出来。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-10 21:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    29#
    发表于 2013-7-10 12:32:14 | 只看该作者
    回复 27# xiaohuazhong5

    这个问题解决了,我创建了几个文件夹以后就可以了。
    但是心的问题又出现了,是不是我环境变量设置的有问题?应该如何设置?

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-10 21:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    28#
    发表于 2013-7-10 11:32:18 | 只看该作者
    回复 27# xiaohuazhong5


        您好,我用你的代码跑了一下,出现错误,请问这个如何解决?

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
    发表于 2013-6-21 21:19:36 | 只看该作者

    RE: 自己整合的比较经典的qtp框架+excel报告(zip)

    qtp framework zip format.  

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2013-6-20 14:35:35 | 只看该作者
    先顶一下,再下载。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-10-20 14:47
  • 签到天数: 564 天

    连续签到: 1 天

    [LV.9]测试副司令

    25#
    发表于 2013-6-18 10:55:11 | 只看该作者
    hao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-3-2 10:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    24#
    发表于 2013-6-18 10:49:25 | 只看该作者
    为什么每次执行到sBusinessCase=taskFileName这个话的时候就报错呢。。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-20 05:34
  • 签到天数: 1188 天

    连续签到: 89 天

    [LV.10]测试总司令

    23#
    发表于 2012-11-12 11:14:15 | 只看该作者
    学习了,最近我正好也在研究框架,参考了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2012-11-9 10:20:18 | 只看该作者
    fjh
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2012-11-9 09:02:40 | 只看该作者
    sadfasdf sadf
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 06:12 , Processed in 0.101933 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表