QTP简单框架(8)之HTML报表
Dim oReporterManager Set oReporterManager = New ReporterManager Call oReporterManager.StartReport("Html","人人围登录1","C:\Report.html","测试下而已1","sirrah") 'Call oReporterManager.StartReport("Excel","人人围登录1","C:\Report.xls","测试下而已1","sirrah") Call oReporterManager.Report("Pass","Test_Case1","成功","成功","步骤详细1") Call oReporterManager.StartReport("Html","人人围登录2","C:\Report.html","测试下而已2","sirrah") 'Call oReporterManager.StartReport("Excel","人人围登录2","C:\Report.xls","测试下而已2","sirrah") Call oReporterManager.Report("Fail","Test_Case2","成功","成功","步骤详细2") Call oReporterManager.StartReport("Html","人人围登录3","C:\Report.html","测试下而已2","sirrah") 'Call oReporterManager.StartReport("Excel","人人围登录2","C:\Report.xls","测试下而已2","sirrah") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细3") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细4") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细35") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细36") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细37") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细38") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细39") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细30") Call oReporterManager.Report("Fail","Test_Case3","成功","成功","步骤详细3-") Call oReporterManager.StopReport Class ReporterManager '定义3个Dictionary,分别存放测试用例、整个测试、已开启的报告格式 Dim Dic_CaseResult,Dic_MyTest,Dic_Filter Dim Str_HtmlReportFile,Str_ExcelReportFile,Str_ReportTypes Dim Bln_Initialized,Bln_NewCase '------------------------------------------------------------------------------- ' 函数名称: StartReport ' 函数说明: 开启生成测试报告机制 ' 参数说明: ' (1).sReportType:报告类型(目前仅支持Excel、Html) ' (2).sCaseName:测试用例名称 ' (3).sFileName:报告输出的路径(文件在磁盘绝对路径位置) ' (4).sCaseDesc:测试用例描述、说明 ' (5).sAuthor:测试用例设计者名称 ' 返回结果: 无 ' 调用方法: ' StartReport("Html","TestLogin","C:\Report.html","TestLoginDesc","Sirrah") '------------------------------------------------------------------------------- Function StartReport(sReportType,sCaseName,sFileName,sCaseDesc,sAuthor) '目前报告所支持的所有格式 Str_ReportTypes = "Html|Excel" '校验sReportType格式,是否是目前所支持的报告格式 If Not CheckType(sReportType,Str_ReportTypes) Then MsgBox "对不起!目前暂不支持"&sReportType&"格式" End If '校验sFileName文件格式是否是合法的报告格式 If Not CheckFile(sReportType,sFileName) Then MsgBox "对不起!您输入的文件名:"&sFileName&"是非法 "&sReportType&" 格式!" End If '检查是否已初始化报告,否则首先初始化报告 If Not Bln_Initialized Then Call InitReport End If '判断当前格式的报告机制是否已开启 If CheckFilter(sReportType) Then If sFileName <> Str_HtmlReportFile And sFileName <> Str_ExcelReportFile Then Dic_MyTest.RemoveAll End If Else Dic_Filter.Add sReportType,"" End If If sFileName <> Str_HtmlReportFile And sFileName <> Str_ExcelReportFile Then If IsFileExist(sFileName) Then '判断当前格式的报告是否存在,如果存在则删除该文件 DeleteFile(sFileName) End If '根据报告格式,获取报告文件名,创建报告文件 Select Case sReportType Case "Html" Str_HtmlReportFile = sFileName CreateReport_Html Case "Excel" Str_ExcelReportFile = sFileName CreateReport_Excel End Select End If '判断当前执行的测试用例是否是新的测试用例 If Dic_CaseResult.Exists("CaseName") Then If Dic_CaseResult.Item("CaseName") <> sCaseName Then '如果是新测试用例,则更新Dic_CaseResult中的成功、失败用例的计数 If Dic_CaseResult.Item("TestResult") = "Pass" Then Dic_MyTest.Item("PassCases_count") = Dic_MyTest.Item("PassCases_count") + 1 Else Dic_MyTest.Item("FailCases_count") = Dic_MyTest.Item("FailCases_count") + 1 End If Call ReportToReport '执行新测试用例,更新Dic_MyTest中总测试用例计数 Dic_MyTest.Item("TotalCases_count") = Dic_MyTest.Item("TotalCases_count") +1 '将Dic_CaseResult中的Item信息清空,记录新测试用例的结果信息 Dic_CaseResult.RemoveAll Bln_NewCase = True End If Else Bln_NewCase = True End If '如果是新测试用例,则创建Dic_CaseResult If Bln_NewCase Then Call CreateDic_Case(sCaseName,sCaseDesc,sAuthor) End If End Function '------------------------------------------------------------------------------- ' 函数名称 : InitReport ' 函数说明 : 初始化报告 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function InitReport Err.clear Set Dic_CaseResult = CreateObject("Scripting.Dictionary") Set Dic_MyTest = CreateObject("Scripting.Dictionary") Set Dic_Filter = CreateObject("Scripting.Dictionary") Call CreateDic_MyTest '判断初始化是否成功,初始化成功设置为True,失败提示信息 If Err.Number = 0 Then Bln_Initialized = True Else MsgBox "对不起!初始化报告失败!"&"#Error:"&Err.Description End If End Function '------------------------------------------------------------------------------- ' 函数名称 : CreateDic_MyTest ' 函数说明 : 创建MyTest Dictionary ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function CreateDic_MyTest Dic_MyTest.Add "TestDate",Date Dic_MyTest.Add "TestStart",Time Dic_MyTest.Add "TestStop",Time Dic_MyTest.Add "TestUse",Time Dic_MyTest.Add "TotalCases_count",1 Dic_MyTest.Add "TotalCheckPoints_count",0 Dic_MyTest.Add "PassCases_count",0 Dic_MyTest.Add "FailCases_count",0 End Function '------------------------------------------------------------------------------- ' 函数名称 : CreateDic_Case ' 函数说明 : 创建Case Dictionary ' 参数说明 : sCaseName:测试用例名称 ' sCaseDesc:测试用例描述 ' sAuthor:测试用例设计者 ' 返回结果: Null '------------------------------------------------------------------------------- Function CreateDic_Case(sCaseName,sCaseDesc,sAuthor) Dic_CaseResult.Add "CaseName",sCaseName Dic_CaseResult.Add "CaseDesc",sCaseDesc Dic_CaseResult.Add "Author",sAuthor Dic_CaseResult.Add "TestResult","" Dic_CaseResult.Add "CheckPointCount",0 Bln_NewCase = False End Function '------------------------------------------------------------------------------- ' 函数名称 : Report ' 函数说明 : 脚本中检查点处调用,记录脚本的运行结果 ' 参数说明 : CP_Result:检查点结果 ' CP_Name:检查点名称 ' CP_ExpectedValue:检查点预期值 ' CP_ActualValue:检查点实际值 ' CP_Detail:检查点描述,可以输入检查点错误信息描述 ' 返回结果: Null '------------------------------------------------------------------------------- Function Report(CP_Result,CP_Name,CP_ExpectedValue,CP_ActualValue,CP_Detail) Set Dic_CheckPoint= CreateObject("Scripting.Dictionary") Dic_CheckPoint.Add "CP_Result",CP_Result Dic_CheckPoint.Add "CP_Name",CP_Name Dic_CheckPoint.Add "CP_ExpectedValue",CP_ExpectedValue Dic_CheckPoint.Add "CP_ActualValue",CP_ActualValue Dic_CheckPoint.Add "CP_Detail",CP_Detail '将检查点Dictionary添加至Dic_CaseResult中 Dic_CaseResult.Add "CheckPoint"&Dic_CaseResult.Count-4,Dic_CheckPoint Dic_CaseResult.Item("CheckPointCount")=Dic_CaseResult.Item("CheckPointCount")+1 Dic_MyTest.Item("TotalCheckPoints_count") = Dic_MyTest.Item("TotalCheckPoints_count") +1 '仅当TestResult为空或者状态为Pass时,每次存储检查点信息时,更新TestResult值 If Trim(Dic_CaseResult.Item("TestResult")) = "" Or Dic_CaseResult.Item("TestResult") = "Pass" Then Dic_CaseResult.Item("TestResult") = CP_Result End If End Function '------------------------------------------------------------------------------- ' 函数名称: IsFolderExist ' 函数说明: 检查文件夹是否存在 ' 参数说明: sFolder:文件夹路径 ' 返回结果: Boolean,文件夹是否存在 '------------------------------------------------------------------------------- Function IsFolderExist(sFolder) Set fso = CreateObject("Scripting.FileSystemObject") IsFolderExist = fso.FolderExists(sFolder) End Function '------------------------------------------------------------------------------- ' 函数名称: IsFileExist ' 函数说明: 检查文件是否存在 ' 参数说明: sFolder:文件路径 ' 返回结果: Boolean,文件夹是否存在 '------------------------------------------------------------------------------- Function IsFileExist(sFile) Set fso = CreateObject("scripting.FileSystemObject") IsFileExist = fso.FileExists(sFile) End Function '------------------------------------------------------------------------------- ' 函数名称 : sFile ' 函数说明 : 删除文件 ' 参数说明: sFile:文件路径 ' 返回结果: Null '------------------------------------------------------------------------------- Function DeleteFile(sFile) Set fso = CreateObject("scripting.FileSystemObject") fso.DeleteFile(sFile) End Function '------------------------------------------------------------------------------- ' 函数名称 : CheckFile ' 函数说明 : 检查文件格式是否符合所选择的 ' 参数说明 : sFile:文件路径 ' 返回结果 : Boolean,文件名称是否合法 '------------------------------------------------------------------------------- Function CheckFile(sType,sFileName) 'sSuffix 获取文件的后缀名 sSuffix=Right(sFileName,Len(sFileName)-InStrRev(sFileName,".")) Select Case sType Case "Html" If LCase(sSuffix) = "html" Or LCase(sSuffix) = "htm" Then CheckFile = True End If Case "Excel" If LCase(sSuffix) = "xls" Or LCase(sSuffix) = "xlsx" Then CheckFile = True End If End Select End Function '------------------------------------------------------------------------------- ' 函数名称 : CheckFile ' 函数说明 : 检查文件格式是否符合所选择的 ' 参数说明 : sFile:文件路径 ' 返回结果 : Boolean,文件名称是否合法 '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' 函数名称 : CheckType ' 函数说明 : 检查报告格式是否是目前所支持的所有报告格式 ' 参数说明 : sType:报告格式 ' sTypes:报告所有支持的格式 ' 返回结果 : Boolean,报告格式是否是目前所有支持的报告格式 '------------------------------------------------------------------------------- Function CheckType(sType,sTypes) Types = Split(sTypes,"|") For Types_Count = 0 To UBound(Types) If Types(Types_Count) = sType Then CheckType = True Exit Function End If Next End Function '------------------------------------------------------------------------------- ' 函数名称 : CheckFilter ' 函数说明 : 检查报告机制是否已开启 ' 参数说明 : sType:报告格式 ' 返回结果 : Boolean,报告格式是否已开启 '------------------------------------------------------------------------------- Function CheckFilter(sType) If Dic_Filter.Exists(sType) Then CheckFilter = True Else CheckFilter = False End If End Function '------------------------------------------------------------------------------- ' 函数名称 : CreateReport_Excel ' 函数说明 : 创建Excel报告 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function CreateReport_Excel Set oExcel=CreateObject("Excel.Application") oExcel.Visible=False oExcel.DisplayAlerts = False oExcel.Workbooks.Add '设置第一个sheet样式 Set oSheet = oExcel.Sheets.Item(1) oExcel.Sheets.Item(1).Select With oSheet '将第一个sheet命名为"测试概要" .Name = "测试概要" '设置顶部第一行标题 .Range("B1").Value = "测试结果" '设置单元格B1到C1合并居中 .Range("B1:E1").Merge '设置单元格背景颜色 .Range("B1:E1").Interior.ColorIndex = 21 '设置单元格对齐方式:居中 .Range("B1:E1").HorizontalAlignment = 3 '设置字体的颜色 .Range("B1:E1").Font.ColorIndex = 19 '设置字体加粗 .Range("B1:E1").Font.Bold = True '设置字体的大小 .Range("B1:E1").Font.Size = 16 '设置测试概要信息内容 .Range("B3").Value = "测试日期: " .Range("D3").Value = "测试开始时间: " .Range("B4").Value = "测试用时: " .Range("D4").Value = "测试结束时间: " .Range("B5").Value = "总用例数:" .Range("D5").Value = "总步骤数:" .Range("B6").Value = "成功用例数:" .Range("D6").Value = "失败用例数:" .Range("C3").Value = Date() .Range("E3").Value = Time() '设置时间的格式为24小时制 .Range("E3").NumberFormat = "hh:mm:ss" .Range("E4").Value = Time() '设置时间的格式为24小时制 .Range("E4").NumberFormat = "hh:mm:ss" '设置时间:结束时间减去开始时间 .Range("C4").Value = "=RC[2]-R[-1]C[2]" .Range("C4").NumberFormat = "hh:mm:ss" .Range("C5").Value = "0" .Range("E5").Value = "0" .Range("C6").Value = "0" .Range("E6").Value = "0" '设置单元格边框样式 .Range("B3:E6").Borders(1).LineStyle = 1 .Range("B3:E6").Borders(2).LineStyle = 1 .Range("B3:E6").Borders(3).LineStyle = 1 .Range("B3:E6").Borders(4).LineStyle = 1 '设置背景色和字体样式 .Range("B3:E6").Font.Bold = True .Range("B3:E6").Font.Size = 10 .Range("B3:B6").Interior.ColorIndex = 50 .Range("B3:B6").Font.ColorIndex = 19 .Range("D3:D6").Interior.ColorIndex = 50 .Range("D3:D6").Font.ColorIndex = 19 .Range("C3:C6").Interior.ColorIndex = 15 .Range("C3:C6").HorizontalAlignment = 3 .Range("C3:C5").Font.ColorIndex = 25 .Range("C6:C6").Font.ColorIndex = 10 .Range("E3:E6").Interior.ColorIndex = 15 .Range("E3:E6").HorizontalAlignment = 3 .Range("E3:E5").Font.ColorIndex = 25 .Range("E6:E6").Font.ColorIndex = 3 '设置测试用例区域标题 .Range("B10").Value = "用例名称" .Range("C10").Value = "测试结果" .Range("D10").Value = "用例步骤数" .Range("E10").Value = "用例描述" .Range("F10").Value = "设计者" .Range("G10").Value = "*点击用例名查看详细的测试结果" '设置背景色和字体样式 .Range("B10:F10").Interior.ColorIndex = 21 .Range("B10:F10").HorizontalAlignment = 3 .Range("B10:F10").Font.ColorIndex = 19 .Range("B10:F10").Font.Bold = True .Range("B10:F10").Font.Size = 14 '设置单元格四周边框 .Range("B10:F10").Borders(1).LineStyle = 1 .Range("B10:F10").Borders(2).LineStyle = 1 .Range("B10:F10").Borders(3).LineStyle = 1 .Range("B10:F10").Borders(4).LineStyle = 1 '设置单元格自动适应大小 .Columns("B:G").Autofit .Range("B11").Select oExcel.ActiveWindow.FreezePanes = True End With '设置第二个sheet样式 Set oSheet = oExcel.Sheets.Item(2) oExcel.Sheets.Item(2).Select With oSheet '设置第二个sheet命名为"测试结果" .Name = "测试结果" '标题栏每列的宽度 .Columns("B:B").ColumnWidth = 20 .Columns("C:C").ColumnWidth = 15 .Columns("D:D").ColumnWidth = 25 .Columns("E:E").ColumnWidth = 25 .Columns("F:F").ColumnWidth = 25 '设置单元格对齐方式:左对齐 .Columns("B:F").HorizontalAlignment = 2 .Columns("B:F").WrapText = True '设置标题栏名称 .Range("B1").Value = "步骤名" .Range("C1").Value = "测试结果" .Range("D1").Value = "预期结果" .Range("E1").Value = "实际结果" .Range("F1").Value = "结果描述" '设置标题栏字体样式 .Range("B1:F1").Interior.ColorIndex = 21 .Range("B1:F1").Font.ColorIndex = 19 .Range("B1:F1").Font.Bold = True .Range("B1:F1").Font.Size = 16 '设置单元格四周边框 .Range("B1:F1").Borders(1).LineStyle = 1 .Range("B1:F1").Borders(2).LineStyle = 1 .Range("B1:F1").Borders(3).LineStyle = 1 .Range("B1:F1").Borders(4).LineStyle = 1 .Range("B2").Select oExcel.ActiveWindow.FreezePanes = True End With '删除多余的第三个sheet Set oSheet = oExcel.Sheets.Item(3) oExcel.Sheets.Item(3).delete oExcel.Sheets.Item(1).Select oExcel.ActiveWorkbook.saveas Str_ExcelReportFile oExcel.Quit Set oSheet=Nothing Set oExcel=Nothing End Function '------------------------------------------------------------------------------- ' 函数名称 : CreateReport_Html ' 函数说明 : 创建Html报告 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function CreateReport_Html Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(Str_HtmlReportFile,2,True) ts.writeline("<!DOCTYPE HTML>") ts.writeline("<html>") ts.writeline("<head><title>自动化测试报告</title>") ts.writeline("<style>") ts.writeline("body {margin:30px auto;background:#D5DAE0;text-align:center;} ") ts.writeline(".commonWrap_1{width:88%;margin:10px auto auto auto;border:1px solid #c2c9cf;background:#FCFDFF;border-radius:10px;}") ts.writeline(".commonWrap_2{width:95%;margin:5px auto 8px auto;border:1px dotted #85614D;background:#FCFDFF;border-radius:2px;}") ts.writeline(".commonWrap_3{width:85%;margin:5px auto 8px auto;border:1px dotted black;background:#FCFDFF;border-radius:3px;}") ts.writeline(".commonWrap_4{width:95%;margin:5px auto 8px auto;border:1px dotted black;background:#FCFDFF;border-radius:3px;}") ts.writeline(".open {font:0/0'宋体'; border:6px solid; border-color:#F5F5F5 #F5F5F5 #F5F5F5 #EF993A;float:left;}") ts.writeline(".close {font:0/0'宋体'; border:6px solid; border-color:#959CEE #F5F5F5 #F5F5F5 #F5F5F5;float:left;}") ts.writeline(".line_1{display:block;border-top:15px solid #D5DAE0;border-bottom:2px solid #616D79;margin:10px auto 5px auto ;}") ts.writeline(".line_2{display:block;border-top:1px solid #D5DAE0;border-bottom:1px solid #FFFFFF;margin:10px auto 5px auto ;}") ts.WriteLine(".line_3{width:99%;display:block;border-top:1px solid #D5DAE0;border-bottom:1px solid #85614D;margin:auto;}") ts.writeline(".MainTitle {width:100%;color:#000080;font:normal normal 35px'Microsoft Yahei'}") ts.writeline(".maintitle_1 {color:black;font:normal normal 25px'Microsoft Yahei'}") ts.writeline(".maintitle_2 {color:black;font:normal normal 25px'Microsoft Yahei'}") ts.writeline("table.TestInformation {width:100%;border-collapse: collapse;border:1px hidden;empty-cells:show;margin:auto;font:normal normal 13px 'Microsoft Yahei'}") ts.writeline("table.Testcase {text-align: center;width:100%;margin:auto auto auto auto ;background:#F5F5F5;font:normal normal 10px'Microsoft Yahei'}") ts.writeline("table.CheckPoint {width:100%;border-collapse: collapse;border:1px hidden;}") ts.writeline("div.foldingbutton{text-align:center;font-size:0.8em;height:0.9em;width:0.9em;float:left;background-color:#F5F5F5;}") ts.writeline("tr.checkpointrow{background-color:#FFFFFF;border: 1px solid #000000;}") ts.writeline("td.Info_Item {width:25%;color:#000000;border: 1px solid #5E5E5E;background:#A9A9A9;}") ts.writeline("td.Info_Value{text-align: center;color:#A52A2A;border: 1px solid #5E5E5E;background:#F5F5F5;}") ts.writeline("td.Info_Value_Pass{text-align: center;color:#008000;border: 1px solid #5E5E5E;background:#F5F5F5;}") ts.writeline("td.Info_Value_Fail{text-align: center;color:#FF0000;border: 1px solid #5E5E5E;background:#F5F5F5;}") ts.writeline("td.Case_Name_1{width:9%;text-align:left;font-size:13px;}") ts.writeline("td.Case_Name_2{width:15%;text-align:left;color:#8B4513;font-size:13px;}") ts.writeline("td.Case_Result{width:8%;text-align:center;}") ts.writeline("td.Case_Result_Pass{width:5%;text-align:center;color:#228B22;}") ts.writeline("td.Case_Result_Fail{width:5%;text-align:center;color:#FF0000;}") ts.writeline("td.Case_Ponts_1{width:7%;text-align:center;}") ts.writeline("td.Case_Ponts_2{width:5%;text-align:center;color:#FF00FF;}") ts.writeline("td.Case_Desc_1{width:8%;text-align:center;font-size:10px;}") ts.writeline("td.Case_Desc_2{width:26%;text-align:left;color:#4169E1;font-size:10px;}") ts.writeline("td.Case_Author_1{width:7%;text-align:Center;}") ts.writeline("td.Case_Author_2{width:9%;text-align:Center;color:#800080;font-style:italic;}") ts.writeline("td.CP_title{text-align:center;background: #A9A9A9;color:#FFFFFF;border: 1px solid #5E5E5E;}") ts.writeline("td.passcentertext{text-align: center;color:#008000;font-size:10px;border: 1px solid #5E5E5E;} ") ts.writeline("td.failedcentertext{text-align: center;color:#FF0000;font-size:10px;border: 1px solid #5E5E5E;}") ts.writeline("td.otherertext{text-align: center;color:#000000;font-size:10px;border: 1px solid #5E5E5E;}") ts.writeline(".backToTop {display: none; width: 18px; line-height: 1.2; padding: 5px 0;") ts.writeline("background-color: #000; color: #fff; font-size: 12px; text-align: center;") ts.writeline("position: fixed; _position: absolute; right: 2px; bottom: 35px;") ts.writeline("_bottom:'auto'; cursor: pointer; opacity: .6; filter: Alpha(opacity=60);}") ts.writeline("</style>") ts.writeline("<script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js'></script>") ts.writeline("<script type='text/javascript'>") ts.writeline("function toggle_child_visibility(element_id) {") ts.writeline("if (document.getElementById(element_id +'_children') != null) {toggle_visibility(element_id +'_children')}") ts.writeline("else {toggle_visibility(element_id)}") ts.writeline("if (document.getElementById(element_id +'_foldlink') != null) {toggle_visibility(element_id +'_foldlink')}") ts.writeline("if (document.getElementById(element_id +'_unfoldlink') != null) {toggle_visibility(element_id +'_unfoldlink')}}") ts.writeline("function toggle_visibility(element_id) {") ts.writeline("var element = document.getElementById(element_id)") ts.writeline("if (element == null) { return }") ts.writeline("if (element.style.display =='none') {element.style.display ='block'}") ts.writeline("else {element.style.display ='none'}}") ts.writeline("function mouseover(obj){obj.style.background='#66CDAA'}") ts.writeline("function mouseout(obj){obj.style.backgroundColor ='white'}") ts.writeline("</script>") ts.writeline("</head>") ts.writeline("<body>") ts.writeline("<b class='MainTitle'>自动化测试报告</b>") ts.writeline("<span class='line_1'></span>") ts.writeline("<div class='commonWrap_1'>") ts.writeline("<br><b class='maintitle_1'>测试概述</b>") ts.writeline("<span class='line_2'></span>") ts.writeline("<div class='commonWrap_3'>") ts.writeline("<table class='TestInformation' align='center'>") ts.writeline("<tr>") ts.writeline("<td class='Info_Item'>测 试 日 期:</td><td class='Info_Value'>%TestDate%</td>") ts.writeline("<td class='Info_Item'>测 试 开 始 时 间:</td><td class='Info_Value'>%TestStart%</td>") ts.writeline("</tr>") ts.writeline("<tr>") ts.writeline("<td class='Info_Item'>测 试 用 时:</td><td class='Info_Value'>%TestUse%</td>") ts.writeline("<td class='Info_Item'>测 试 结 束 时 间:</td><td class='Info_Value'>%TestStop%</td>") ts.writeline("</tr> ") ts.writeline("<tr><td class='Info_Item'>总 用 例 数:</td><td class='Info_Value'>%ToTal_TestCase%</td>") ts.writeline("<td class='Info_Item'>总 步 骤 数:</td><td class='Info_Value'>%Total_CheckPoints%</td>") ts.writeline("</tr>") ts.writeline("<tr><td class='Info_Item'>成 功 用 例 数:</td><td class='Info_Value_Pass'>%Pass_TestCase%</td>") ts.writeline("<td class='Info_Item'>失 败 用 例 数:</td><td class='Info_Value_Fail'>%Fail_TestCase%</td>") ts.writeline("</tr>") ts.writeline("</table>") ts.writeline("</div>") ts.writeline("</div>") ts.writeline("<div class='commonWrap_1'>") ts.writeline("<br><b class='maintitle_2'>测试结果</b>") ts.writeline("<span class='line_2'></span>") End Function '------------------------------------------------------------------------------- ' 函数名称 : AddHtmlButtom ' 函数说明 : 添加Html底部 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function AddHtmlButtom Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(Str_HtmlReportFile,8,False) ts.writeline("</div></div>") ts.writeline("<script type='text/javascript'>(function() {") ts.writeline("var $backToTopTxt ='返回顶部', $backToTopEle = $('<div class="&Chr(34)&"backToTop"&Chr(34)&"></div>').appendTo($('body'))") ts.writeline(".text($backToTopTxt).attr('title', $backToTopTxt).click(function() {") ts.writeline("$('html, body').animate({ scrollTop: 0 }, 120);}), $backToTopFun = function() {") ts.writeline("var st = $(document).scrollTop(), winh = $(window).height();") ts.writeline("(st > 0)? $backToTopEle.show(): $backToTopEle.hide();") ts.writeline("if (!window.XMLHttpRequest) {$backToTopEle.css('top', st + winh - 166);}};") ts.writeline("$(window).bind('scroll', $backToTopFun);$(function() { $backToTopFun(); });})();") ts.writeline("</script>") ts.writeline("</body></html>") End Function '------------------------------------------------------------------------------- ' 函数名称 : ReportToReport ' 函数说明 : 将测试用例的结果信息写入已开启机制的报告 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function ReportToReport '获取Dic_Filter所有的键值 sKeys = Dic_Filter.Keys '遍历所有的键值,将测试用例的结果信息写入已开启机制的报告 For Each sKey In sKeys Select Case sKey Case "Html" Call ReportToHtml Case "Excel" Call ReportToExcel End Select Next End Function '------------------------------------------------------------------------------- ' 函数名称 : ReportToExcel ' 函数说明 : 将测试用例结果信息写入Excel文件 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function ReportToExcel Dim oSheet,oWorkBook Dim Row, TCRow Set oExcel=CreateObject("Excel.Application") Set oWorkBook = oExcel.Workbooks.Open (Str_ExcelReportFile) Set oSheet = oExcel.Sheets("测试概要") '选择Excel文件中,“测试概要”sheet表 oExcel.Sheets("测试概要").Select With oSheet '获取当前测试步骤行 Row = .Range("E5").Value + 2*.Range("C5").Value + 3 '获取当前测试用例行 TCRow = .Range("C5").Value + 11 .Cells(TCRow, 2).Value = Dic_CaseResult.Item("CaseName") '为测试用例名添加链接 oExcel.ActiveSheet.Hyperlinks.Add oSheet.Cells(TCRow, 2), "", "测试结果!B" & Row, Dic_CaseResult.Item("CaseName") .Cells(TCRow, 3).Value = Dic_CaseResult.Item("TestResult") .Cells(TCRow, 4).Value = Dic_CaseResult.Item("CheckPointCount") .Cells(TCRow, 5).Value = Dic_CaseResult.Item("CaseDesc") .Cells(TCRow, 6).Value = Dic_CaseResult.Item("Author") Select Case Dic_CaseResult.Item("TestResult") Case "Fail" .Range("C" & TCRow).Font.ColorIndex = 3 Case "Pass" .Range("C" & TCRow).Font.ColorIndex = 10 End Select '设置测试用例信息单元格边框 .Range("B" & TCRow & ":F" & TCRow).Borders(1).LineStyle = 1 .Range("B" & TCRow & ":F" & TCRow).Borders(2).LineStyle = 1 .Range("B" & TCRow & ":F" & TCRow).Borders(3).LineStyle = 1 .Range("B" & TCRow & ":F" & TCRow).Borders(4).LineStyle = 1 '设置测试用例信息单元格背景色 .Range("B" & TCRow & ":F" & TCRow).Interior.ColorIndex = 19 .Range("B" & TCRow & ":F" & TCRow).HorizontalAlignment = 3 '设置测试用例信息单元格字体颜色 .Range("B" & TCRow).Font.ColorIndex = 53 '设置测试用例信息单元格字体样式 .Range("B" & TCRow & ":D" & TCRow).Font.Bold = True .Range("F" & TCRow & ":F" & TCRow).Font.Bold = True '设置测试用例信息单元格字体大小 .Range("B" & TCRow & ":D" & TCRow).Font.Size=10 .Range("E" & TCRow & ":E" & TCRow).Font.Size=9 .Range("F" & TCRow & ":F" & TCRow).Font.Size=10 '设置测试用例信息单元格自动换行 .Range("B" & TCRow & ":F" & TCRow).WrapText = True .Range("E" & TCRow).Font.ColorIndex=23 '设置测试概要信息内容 .Range("C3").Value = Dic_MyTest.Item("TestDate") .Range("E3").Value = Dic_MyTest.Item("TestStart") .Range("E4").Value = Dic_MyTest.Item("TestStop") .Range("C4").Value = GetTimeDiff(Dic_MyTest.item("TestStart"),Dic_MyTest.item("TestStop")) .Range("C5").Value = Dic_MyTest.Item("TotalCases_count") .Range("E5").Value = Dic_MyTest.Item("TotalCheckPoints_count") .Range("C6").Value = Dic_MyTest.Item("PassCases_count") .Range("E6").Value = Dic_MyTest.Item("FailCases_count") '设置测试用例信息单元格宽度为自动适应 .Columns("B:F").Autofit End With '选择"测试结果"sheet表 Set oSheet = oExcel.Sheets("测试结果") oExcel.Sheets("测试结果").Select With oSheet '输入测试结果内容 .Range("B" & Row & ":F" & Row).Interior.ColorIndex = 2 .Range("B" & Row & ":F" & Row).Merge .Range("B" & Row).Value ="测试用例名:"&VbTab&Dic_CaseResult.Item("CaseName") '设置每个测试用例的标题格式 .Range("B" & Row & ":F" & Row).Interior.ColorIndex = 47 .Range("B" & Row & ":F" & Row).Font.ColorIndex = 2 .Range("B" & Row & ":F" & Row).Font.Bold = True .Range("B" & Row & ":F" & Row).Font.Size = 14 keys_ = Dic_CaseResult.Keys '遍历所有的检查点,依次输入检查点信息 For i = Dic_CaseResult.Count - CInt(Dic_CaseResult.Item("CheckPointCount"))+1 To Dic_CaseResult.Count names_ = keys_(i-1) Row = Row + 1 .Range("B" & Row).Value =Dic_CaseResult.Item(names_).Item("CP_Name") .Range("C" & Row).Value = Dic_CaseResult.Item(names_).Item("CP_Result") .Range("C" & Row).Font.Bold = True Select Case Dic_CaseResult.Item(names_).Item("CP_Result") Case "Pass" .Range("C" & Row).Font.ColorIndex = 10 Case "Fail" .Range("C" & Row).Font.ColorIndex = 3 End Select .Range("C" & Row).Font.Bold = True .Range("D" & Row).Value = Dic_CaseResult.Item(names_).Item("CP_ExpectedValue") .Range("E" & Row).Value = Dic_CaseResult.Item(names_).Item("CP_ActualValue") .Range("F" & Row).Value = Dic_CaseResult.Item(names_).Item("CP_Detail") '设置边框样式以及字体大小 ' .Range("B" & Row & ":F" & Row).Borders(1).LineStyle = 1 .Range("B" & Row & ":F" & Row).Borders(2).LineStyle = 1 ' .Range("B" & Row & ":F" & Row).Borders(3).LineStyle = 1 .Range("B" & Row & ":F" & Row).Borders(4).LineStyle = 1 .Range("B" & Row & ":F" & Row).VerticalAlignment = -4160 .Range("B" & Row & ":F" & Row).Interior.ColorIndex = 15 .Range("B" & Row & ":F" & Row).Font.Size = 10 Next End With oExcel.Sheets("测试概要").Select oWorkBook.Save oExcel.Quit Set oSheet=Nothing Set oExcel=Nothing Set oWorkBook = Nothing End Function '------------------------------------------------------------------------------- ' 函数名称 : ReportToHtml ' 函数说明 : 将测试用例结果信息写入Html文件 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function ReportToHtml CheckPointOrder=1 Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(Str_HtmlReportFile,8,True) ts.writeline("<div class='commonWrap_2'>") ts.writeline("<table class='Testcase'><tr><td width ='100%' ><table width='99%' align='center'><tr>") ts.writeline("<td width='2%'>") ts.writeline("<div class ='foldingbutton' id='suite"&Dic_MyTest.Item("TotalCases_count")&"_foldlink' onclick="&Chr(34)&"toggle_child_visibility('suite"&Dic_MyTest.Item("TotalCases_count")&"');"&Chr(34)&"style='display: none;'><div class='close'></div></div>") ts.writeline("<div class ='foldingbutton' id='suite"&Dic_MyTest.Item("TotalCases_count")&"_unfoldlink' onclick="&Chr(34)&"toggle_child_visibility('suite"&Dic_MyTest.Item("TotalCases_count")&"');"&Chr(34)&"style='display: block;'><div class='open'></div></div></td>") ts.writeline("<td class ='Case_Name_1'>[ 用例名称 ]:</td><td class ='Case_Name_2'>"& Dic_CaseResult.Item("CaseName")&"</td>") ts.writeline("<td class ='Case_Result'>[ 测试结果 ]:</td>") If Dic_CaseResult.Item("TestResult") = "Pass" Then ts.writeline("<td class ='Case_Result_Pass'>"&Dic_CaseResult.Item("TestResult") &"</td>") Else ts.writeline("<td class ='Case_Result_Fail'>"&Dic_CaseResult.Item("TestResult") &"</td>") End If ts.writeline("<td class ='Case_Ponts_1'>[ 步骤数 ]:</td><td class ='Case_Ponts_2'>"&Dic_CaseResult.Item("CheckPointCount")&"</td>") ts.writeline("<td class ='Case_Desc_1'>[ 用例描述 ]:</td><td class ='Case_Desc_2'>"&Dic_CaseResult.Item("CaseDesc")&"</td>") ts.writeline("<td class ='Case_Author_1'>[ 设计者 ]:</td><td class='Case_Author_2'>"&Dic_CaseResult.Item("Author")&"</td>") ts.writeline("</tr></table></td></tr><tr>") ts.writeline("<td width ='100%'>") ts.writeline("<div id='suite"&Dic_MyTest.Item("TotalCases_count")&"_children' style='display: none;'>") ts.WriteLine("<span class='line_3'></span>") ts.writeline("<div class='commonWrap_4'>") ts.writeline("<table class='CheckPoint' align='center'>") ts.writeline("<tr><td class='CP_title' width='5%'>序号</td><td class='CP_title' width='15%'>步骤名</td><td class='CP_title' width='10%'>测试结果</td>") ts.writeline("<td class='CP_title' width='15%'>预期结果</td><td class='CP_title' width='15%'>实际结果</td><td class='CP_title' width='40%'>结果描述</td></tr>") keys_ = Dic_CaseResult.Keys '遍历所有的检查点,依次输入检查点信息 For i = Dic_CaseResult.Count - CInt(Dic_CaseResult.Item("CheckPointCount"))+1 To Dic_CaseResult.Count names_ = keys_(i-1) ts.writeline("<tr class='checkpointrow'onMouseOver='mouseover(this)' onMouseOut='mouseout(this)'>") ts.writeline("<td class='otherertext'>"&CheckPointOrder&"</td>") ts.writeline("<td class='otherertext'>"&Dic_CaseResult.Item(names_).Item("CP_Name")&"</td>") If Dic_CaseResult.Item(names_).Item("CP_Result") = "Pass" Then ts.writeline("<td class='passcentertext'>"&Dic_CaseResult.Item(names_).Item("CP_Result")&"</td>") Else ts.writeline("<td class='failedcentertext'>"&Dic_CaseResult.Item(names_).Item("CP_Result")&"</td>") End If ts.writeline("<td class='otherertext'>"&Dic_CaseResult.Item(names_).Item("CP_ExpectedValue")&"</td>") ts.writeline("<td class='otherertext'>"&Dic_CaseResult.Item(names_).Item("CP_ActualValue")&"</td>") ts.writeline("<td class='otherertext'>"&Dic_CaseResult.Item(names_).Item("CP_Detail")&"</td></tr>") CheckPointOrder = CheckPointOrder+1 Next ts.writeline("</tr></table></div></table></div>") End Function '------------------------------------------------------------------------------- ' 函数名称 : StopReport ' 函数说明 : 停止测试报告机制 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function StopReport '更新Dic_MyTest中的测试停止时间 Dic_MyTest.Item("TestStop") = Time '更新Dic_CaseResult中的测试结果,以及Pass、Fail计数 If Dic_CaseResult.Item("TestResult") = "Pass" Then Dic_MyTest.Item("PassCases_count") = Dic_MyTest.Item("PassCases_count") + 1 Else Dic_MyTest.Item("FailCases_count") = Dic_MyTest.Item("FailCases_count") + 1 End If '将最后执行的测试用例的结果信息写入报告 Call ReportToReport sKeys = Dic_Filter.Keys '判断当前是否开启Htnl报告,如已开启则,更新Html中测试概要信息,以及添加Html底部 For Each sKey In sKeys If sKey = "Html" Then Call ReplaceHtmlInfo Call AddHtmlButtom End If Next End Function '------------------------------------------------------------------------------- ' 函数名称 : ReplaceHtmlInfo ' 函数说明 : 更新Html中测试概要信息 ' 参数说明 : Null ' 返回结果 : Null '------------------------------------------------------------------------------- Function ReplaceHtmlInfo Set fso = CreateObject("Scripting.FileSystemObject") Set textFile = fso.OpenTextFile(Str_HtmlReportFile, 1 ) strText = textFile.ReadAll strText = Replace(strText,"%TestDate%",Dic_MyTest.item("TestDate")) strText = Replace(strText,"%TestStart%",Dic_MyTest.item("TestStart")) strText = Replace(strText,"%TestStop%",Dic_MyTest.item("TestStop")) strText = Replace(strText,"%TestUse%",GetTimeDiff(Dic_MyTest.item("TestStart"),Dic_MyTest.item("TestStop"))) strText = Replace(strText,"%ToTal_TestCase%",Dic_MyTest.item("TotalCases_count")) strText = Replace(strText,"%Total_CheckPoints%",Dic_MyTest.item("TotalCheckPoints_count")) strText = Replace(strText,"%Pass_TestCase%",Dic_MyTest.item("PassCases_count")) strText = Replace(strText,"%Fail_TestCase%",Dic_MyTest.item("FailCases_count")) textFile.Close Set textFile1 = fso.OpenTextFile(Str_HtmlReportFile, 2 ) textFile1.WriteLine strText textFile1.Close Set textFile1 = Nothing Set fso = Nothing End Function '------------------------------------------------------------------------------- ' 函数名称 : GetTimeDiff ' 函数说明 : 获取时间差 ' 参数说明: TimeStart:开始时间 ' TimeStop:结束时间 ' 返回结果: DateTime,时间差 '------------------------------------------------------------------------------- Function GetTimeDiff(TimeStart,TimeStop) H=0 M=0 S=0 TimeDiffSeconds=DateDiff("s",TimeStart,TimeStop) If (TimeDiffSeconds\3600)<> 0 Then H = (TimeDiffSeconds\3600) TimeDiffSeconds = TimeDiffSeconds - H*3600 End If If (TimeDiffSeconds\60)<> 0 Then M = (TimeDiffSeconds\60) TimeDiffSeconds = TimeDiffSeconds - M*60 End If S=TimeDiffSeconds If H < 10 Then H = "0"& H End If If M < 10 Then M = "0"& M End If If S < 10 Then S = "0"& S End If GetTimeDiff = H&":"&M&":"&S End Function Function Report1(status,objtype, text) Reporter.Filter = rtEnableAll Reporter.ReportEvent status, objtype, text 'DetailLogPrint objtype&":"&VBTab&text&"【"& status &"】" Reporter.Filter = rfDisableAll End Function End Class
如果你對現在不滿意...否則你就好好學,因爲你還只是菜鳥...