auuppp 发表于 2011-12-25 13:19:23

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

本帖最后由 auuppp 于 2011-12-25 13:23 编辑

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

auuppp 发表于 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

auuppp 发表于 2011-12-25 13:19:57

ProjectDir = getParentFolderPath(Environment.Value("TestDir")) '项目所在的根目录,如"D:\project\",这个路径的末位是有一个反斜线的
TestSetExcelFile = ProjectDir&"testCases.xls"   '管理所有测试用例的Excel文件的路径
testScriptFolderName =ProjectDir&"testScript" 'task脚本文件所在的根目录
testDataFolderName = ProjectDir&"testData"'测试数据文件所在的根目录
testLogFolder=ProjectDir&"logs\"
testReportFolder=ProjectDir&"reports\"
Environment("ProjectDir")= ProjectDir
Environment("TestSetExcelFile")= TestSetExcelFile
Environment("testScriptFolderName")= testScriptFolderName
Environment("testDataFolderName")= testDataFolderName
Environment("Log_Dir")=testLogFolder
Environment("Report_Dir")=testReportFolder
SET_SHEET = Environment("SET_SHEET")
TEST_SHEET = Environment("TEST_SHEET")
ExecuteFile ProjectDir&"frameUtil\ClassExcelReport.vbs" '加载task脚本文件
Set oReport = New ExcelReport
Environment("oReport")= oReport

Call Driver_Test_Set()
Function Driver_Test_Set()
   oReport.AddSheet_BusinessListEnvironment("Report_Dir"),formatdatetime(now(),2)
        Dim row_count '记录的测试用例集一共有多少个
   
        ' import the Set table to QTP's data table
        call DataTable.AddSheet(SET_SHEET)
        call DataTable.ImportSheet(TestSetExcelFile,1, SET_SHEET)
        row_count = DataTable.GetSheet(SET_SHEET).GetRowCount
        logPrint("最多执行"&row_count&"个测试用例")
       
        For i=1 to row_count

                '获取测试用例的名称,存放测试用例的Excel文件名称,是否运行这三个重要字段。默认Excel的第一个Sheet就是测试用例
                DataTable.GetSheet(SET_SHEET).SetCurrentRow(i)
                isRun        = DataTable.Value("IDX", SET_SHEET)
                caseName = datatable.value("name", SET_SHEET)
                testCaseFileName = datatable.value("table", SET_SHEET)
                testCaseSheetName = datatable.value("sheet", SET_SHEET)
                caseDesc = DataTable.Value("description", SET_SHEET)

      ' 如果该行测试用例是要被执行的,那么就执行,否则跳过。
                If isRun = "√"then
            table = pathFind(testDataFolderName,testCaseFileName,"xls")
                        logPrint("开始运行测试用例 "&caseName&" , 数据存放位置: "&table)

                   ' rc = Driver_TestCase(table)   

oReport.AddData_BusinessList caseName,table
RunAction "Driver_TestCase", oneIteration, table, testCaseSheetName,caseName
                   logPrint("执行完成。测试用例 "&caseName&" , 数据存放位置: "&table)
                end if
        Next
        DataTable.DeleteSheet(SET_SHEET)
        logPrint("所有测试用例执行完成。")
        'Driver_Test_Set = rc
End Function

auuppp 发表于 2011-12-25 13:22:41

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

本帖最后由 auuppp 于 2011-12-25 13:24 编辑

ding

lyscser 发表于 2011-12-25 19:45:45

松木玩意?

JulianHuang 发表于 2011-12-26 10:28:35

详细描述一下功能吧,说清楚了才能多赚点吗!

hbycyf123 发表于 2012-6-6 16:48:00

完全看不懂?解释一下会受益匪浅

walkingsky 发表于 2012-7-12 17:57:15

一咬牙,一跺脚!买!!!!

Rickyone 发表于 2012-7-19 15:24:42

ggggggggggggggggggggggggggg

TestWith1314 发表于 2012-7-19 16:40:37

UP UP

九十度二锅头 发表于 2012-7-23 16:36:12

请问楼主,test_sheet,set_sheet需要如何设置

hellowang123 发表于 2012-8-22 14:24:15

xia lai kankan

yaoxlong1031 发表于 2012-8-22 17:23:00

真实的,就不能便宜一点啊~!

yaoxlong1031 发表于 2012-8-22 17:23:23

弄得我现在身无分文了~!

chylx 发表于 2012-9-19 16:19:48

正在研究中,有好些地方不是很懂,可能还要请教楼主哦

temp20121017 发表于 2012-10-27 14:20:24

不懂啊

ccption 发表于 2012-10-31 21:43:29

是不是真的啊?

番茄钟 发表于 2012-11-5 15:42:36

学习

悾歽枝 发表于 2012-11-6 16:51:24

呀 啥子东东嘛

104509426 发表于 2012-11-8 15:59:57

hao
页: [1] 2
查看完整版本: 自己整合的比较经典的qtp框架+excel报告