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.StopReportClass 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) ThenMsgBox "对不起!目前暂不支持"&sReportType&"格式"End If'校验sFileName文件格式是否是合法的报告格式If Not CheckFile(sReportType,sFileName) ThenMsgBox "对不起!您输入的文件名:"&sFileName&"是非法 "&sReportType&" 格式!"End If'检查是否已初始化报告,否则首先初始化报告If Not Bln_Initialized ThenCall InitReportEnd If'判断当前格式的报告机制是否已开启If CheckFilter(sReportType) ThenIf sFileName <> Str_HtmlReportFile And sFileName <> Str_ExcelReportFile ThenDic_MyTest.RemoveAllEnd If ElseDic_Filter.Add sReportType,""End IfIf sFileName <> Str_HtmlReportFile And sFileName <> Str_ExcelReportFile Then If IsFileExist(sFileName) Then'判断当前格式的报告是否存在,如果存在则删除该文件DeleteFile(sFileName)End If'根据报告格式,获取报告文件名,创建报告文件Select Case sReportTypeCase "Html" Str_HtmlReportFile = sFileNameCreateReport_HtmlCase "Excel" Str_ExcelReportFile = sFileNameCreateReport_ExcelEnd SelectEnd If'判断当前执行的测试用例是否是新的测试用例If  Dic_CaseResult.Exists("CaseName")  Then If  Dic_CaseResult.Item("CaseName") <> sCaseName Then'如果是新测试用例,则更新Dic_CaseResult中的成功、失败用例的计数If  Dic_CaseResult.Item("TestResult") = "Pass" ThenDic_MyTest.Item("PassCases_count") = Dic_MyTest.Item("PassCases_count") + 1ElseDic_MyTest.Item("FailCases_count") = Dic_MyTest.Item("FailCases_count") + 1End IfCall ReportToReport'执行新测试用例,更新Dic_MyTest中总测试用例计数Dic_MyTest.Item("TotalCases_count") = Dic_MyTest.Item("TotalCases_count") +1'将Dic_CaseResult中的Item信息清空,记录新测试用例的结果信息Dic_CaseResult.RemoveAllBln_NewCase = TrueEnd IfElseBln_NewCase = TrueEnd If '如果是新测试用例,则创建Dic_CaseResultIf Bln_NewCase ThenCall CreateDic_Case(sCaseName,sCaseDesc,sAuthor)End If
End Function'-------------------------------------------------------------------------------
'  函数名称 :  InitReport
'  函数说明 :  初始化报告
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function InitReportErr.clearSet 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 ThenBln_Initialized = TrueElseMsgBox "对不起!初始化报告失败!"&"#Error:"&Err.DescriptionEnd If
End Function'-------------------------------------------------------------------------------
'  函数名称 :  CreateDic_MyTest
'  函数说明 :  创建MyTest Dictionary
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function CreateDic_MyTestDic_MyTest.Add "TestDate",DateDic_MyTest.Add "TestStart",TimeDic_MyTest.Add "TestStop",TimeDic_MyTest.Add "TestUse",TimeDic_MyTest.Add "TotalCases_count",1Dic_MyTest.Add "TotalCheckPoints_count",0Dic_MyTest.Add "PassCases_count",0Dic_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",sCaseNameDic_CaseResult.Add "CaseDesc",sCaseDescDic_CaseResult.Add "Author",sAuthorDic_CaseResult.Add "TestResult",""   Dic_CaseResult.Add "CheckPointCount",0Bln_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_ResultDic_CheckPoint.Add "CP_Name",CP_NameDic_CheckPoint.Add "CP_ExpectedValue",CP_ExpectedValueDic_CheckPoint.Add "CP_ActualValue",CP_ActualValueDic_CheckPoint.Add "CP_Detail",CP_Detail'将检查点Dictionary添加至Dic_CaseResult中Dic_CaseResult.Add "CheckPoint"&Dic_CaseResult.Count-4,Dic_CheckPointDic_CaseResult.Item("CheckPointCount")=Dic_CaseResult.Item("CheckPointCount")+1Dic_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" ThenDic_CaseResult.Item("TestResult") = CP_ResultEnd 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 sTypeCase "Html"If LCase(sSuffix)  =  "html" Or LCase(sSuffix) =  "htm" ThenCheckFile = TrueEnd If Case "Excel"If LCase(sSuffix) = "xls" Or LCase(sSuffix) = "xlsx"  ThenCheckFile = TrueEnd 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 ThenCheckType = TrueExit FunctionEnd If Next
End Function'-------------------------------------------------------------------------------
'  函数名称 :  CheckFilter
'  函数说明 :  检查报告机制是否已开启
'  参数说明 :  sType:报告格式
'  返回结果 :  Boolean,报告格式是否已开启
'-------------------------------------------------------------------------------
Function CheckFilter(sType)If   Dic_Filter.Exists(sType) ThenCheckFilter = TrueElseCheckFilter = FalseEnd If
End Function'-------------------------------------------------------------------------------
'  函数名称 :  CreateReport_Excel
'  函数说明 :  创建Excel报告
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function CreateReport_ExcelSet oExcel=CreateObject("Excel.Application")oExcel.Visible=FalseoExcel.DisplayAlerts = FalseoExcel.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").SelectoExcel.ActiveWindow.FreezePanes = TrueEnd With'设置第二个sheet样式Set oSheet = oExcel.Sheets.Item(2)oExcel.Sheets.Item(2).SelectWith 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").SelectoExcel.ActiveWindow.FreezePanes = TrueEnd With'删除多余的第三个sheetSet oSheet = oExcel.Sheets.Item(3) oExcel.Sheets.Item(3).delete oExcel.Sheets.Item(1).Select oExcel.ActiveWorkbook.saveas Str_ExcelReportFileoExcel.QuitSet oSheet=NothingSet oExcel=Nothing
End Function'-------------------------------------------------------------------------------
'  函数名称 :  CreateReport_Html
'  函数说明 :  创建Html报告
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function CreateReport_HtmlSet 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 AddHtmlButtomSet 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 sKeyCase "Html" Call ReportToHtmlCase "Excel" Call ReportToExcelEnd Select Next
End Function'-------------------------------------------------------------------------------
'  函数名称 :  ReportToExcel
'  函数说明 :  将测试用例结果信息写入Excel文件
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function ReportToExcelDim oSheet,oWorkBook Dim Row, TCRowSet oExcel=CreateObject("Excel.Application")Set oWorkBook = oExcel.Workbooks.Open (Str_ExcelReportFile)Set oSheet = oExcel.Sheets("测试概要")'选择Excel文件中,“测试概要”sheet表oExcel.Sheets("测试概要").SelectWith 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 = 3Case "Pass".Range("C" & TCRow).Font.ColorIndex = 10End 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").AutofitEnd With'选择"测试结果"sheet表Set oSheet = oExcel.Sheets("测试结果")oExcel.Sheets("测试结果").SelectWith 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 = 14keys_ = Dic_CaseResult.Keys  '遍历所有的检查点,依次输入检查点信息For i = Dic_CaseResult.Count - CInt(Dic_CaseResult.Item("CheckPointCount"))+1  To Dic_CaseResult.Countnames_ = 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 = 10Case "Fail".Range("C" & Row).Font.ColorIndex = 3End 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 = 10NextEnd WithoExcel.Sheets("测试概要").SelectoWorkBook.SaveoExcel.QuitSet oSheet=NothingSet oExcel=NothingSet oWorkBook = Nothing
End Function'-------------------------------------------------------------------------------
'  函数名称 :  ReportToHtml
'  函数说明 :  将测试用例结果信息写入Html文件
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function ReportToHtmlCheckPointOrder=1Set 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' οnclick="&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' οnclick="&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" Thents.writeline("<td class ='Case_Result_Pass'>"&Dic_CaseResult.Item("TestResult") &"</td>")Elsets.writeline("<td class ='Case_Result_Fail'>"&Dic_CaseResult.Item("TestResult") &"</td>")End Ifts.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.Countnames_ = 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>")Elsets.writeline("<td class='failedcentertext'>"&Dic_CaseResult.Item(names_).Item("CP_Result")&"</td>")End Ifts.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+1Nextts.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" ThenDic_MyTest.Item("PassCases_count") = Dic_MyTest.Item("PassCases_count") + 1ElseDic_MyTest.Item("FailCases_count") = Dic_MyTest.Item("FailCases_count") + 1End If'将最后执行的测试用例的结果信息写入报告Call ReportToReportsKeys = Dic_Filter.Keys '判断当前是否开启Htnl报告,如已开启则,更新Html中测试概要信息,以及添加Html底部For Each sKey In sKeys If sKey = "Html" ThenCall ReplaceHtmlInfoCall AddHtmlButtomEnd IfNext
End Function'-------------------------------------------------------------------------------
'  函数名称 :  ReplaceHtmlInfo
'  函数说明 :  更新Html中测试概要信息
'  参数说明 :  Null
'  返回结果 :  Null
'-------------------------------------------------------------------------------
Function ReplaceHtmlInfoSet fso = CreateObject("Scripting.FileSystemObject")Set textFile = fso.OpenTextFile(Str_HtmlReportFile, 1 )strText = textFile.ReadAllstrText = 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.CloseSet textFile1 =  fso.OpenTextFile(Str_HtmlReportFile, 2 )textFile1.WriteLine strTexttextFile1.CloseSet textFile1 = NothingSet fso = Nothing
End Function'-------------------------------------------------------------------------------
'  函数名称 :  GetTimeDiff
'  函数说明 :  获取时间差
'  参数说明:   TimeStart:开始时间
'              TimeStop:结束时间
'  返回结果:   DateTime,时间差
'-------------------------------------------------------------------------------
Function GetTimeDiff(TimeStart,TimeStop)H=0M=0S=0TimeDiffSeconds=DateDiff("s",TimeStart,TimeStop)If (TimeDiffSeconds\3600)<> 0 ThenH = (TimeDiffSeconds\3600)TimeDiffSeconds = TimeDiffSeconds - H*3600End If If (TimeDiffSeconds\60)<> 0 ThenM = (TimeDiffSeconds\60)TimeDiffSeconds = TimeDiffSeconds - M*60End IfS=TimeDiffSecondsIf H < 10 ThenH = "0"& HEnd IfIf M < 10 ThenM = "0"& MEnd IfIf S < 10 ThenS = "0"& SEnd IfGetTimeDiff = 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

转载于:https://www.cnblogs.com/sirrah/articles/2354515.html

QTP简单框架(8)之HTML报表相关推荐

  1. QTP简单框架(7)之Excel报表

    Dim oReporterManager Set oReporterManager = New ReportManager Call oReporterManager.StartReport(&quo ...

  2. QTP简单框架之EXCEL报表

    Dim oReporterManager Set oReporterManager = New ReportManager Call oReporterManager.StartReport(&quo ...

  3. QTP简单框架(5)之脚本编写规范

    脚本是基于saffron来改写的,修改了2个比较大的地方:框架目前支持设置对象多个属性.通过CreationTime来控制当前浏览器. 另外还添加了许多平时写脚本中需要的小功能.所以在正式编写脚本时, ...

  4. QTP简单框架(6)之脚本编写实例

    转载于:https://www.cnblogs.com/sirrah/articles/2354365.html

  5. 转:一个简单的基于WEB的QTP自动化测试框架-SAFFRON

    来源: http://www.itestware.com/ctest/index.php?option=com_content&view=article&id=62:webqtp-sa ...

  6. 《预训练周刊》第29期:Swin Transformer V2:扩大容量和分辨率、SimMIM:用于遮蔽图像建模的简单框架...

    No.29 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 本期周刊,我们选择了10篇预训练相关的论文,涉及图像处理.图像屏蔽编码.推荐系统.语言模型解释.多模态表征.多语言建模.推 ...

  7. QTP自动化测试框架的基础知识

    1. 什么是自动化测试框架? 假定你有一个活,需要构建许多自动化测试用例来测试这个应用程序.当你对这个应用程序完成自动化测试后,你对自己创建脚本应该有什么期望吗?你难道不想要- 脚本应该按照预期的来执 ...

  8. 缓冲运动之框架開始一级简单框架实例

    ***********************缓冲运动[框架開始]-1.html********************************************* <!DOCTYPE h ...

  9. SpringMVC+Thymeleaf +HTML的简单框架

    SpringMVC+Thymeleaf +HTML的简单框架 一.问题 项目中需要公众号开发,移动端使用的是H5,但是如果不用前端框架的话,只能考虑JS前端用ajax解析JSON字符串了.今天我们就简 ...

最新文章

  1. 近世代数--环同态--环同态基本定理
  2. delphi VCL研究之消息分发机制(转)
  3. [你必须知道的.NET]第十七回:貌合神离:覆写和重载
  4. 开源的商业意义_为开源项目提供资金具有良好的商业意义
  5. JAVA 生成API接口文档
  6. dflow入门4——recursereuseconditional
  7. Android usb网卡配置ip地址,安卓手机通过电脑USB上网设置教程
  8. 即时通讯im源码软件uniapp(基于开源在线交友聊天系统源码框架)
  9. bzoj4567【SCOI2016】背单词
  10. php 获取用户是否关注微信公众号
  11. 记一次AWK程序耗时日志分析
  12. 音乐社会计算机英语,计算机音乐技术应用,Computer music technology application,音标,读音,翻译,英文例句,英语词典...
  13. 互联网日报 | 6月24日 星期四 | 快手全球月活已达10亿;HarmonyOS 2首批正式版升级;微软市值突破2万亿美元...
  14. audio自动播放遇到的问题
  15. DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER
  16. Arduino+esp32+blinker第一课点灯
  17. 计算机入门知识介绍、相关原理及软硬件概述
  18. C#屏幕录制图像处理:(包含鼠标图像录制)
  19. 2023年上半年 软件设计师答案解析
  20. html表格美化源码,非常酷炫的CSS3表格设计样式源码

热门文章

  1. A-CSM认证培训全国首次开班
  2. ubuntu ibus下不能输入中文
  3. 恋曲1990用计算机谈,【学生访谈】当我学会用计算机,我开始热爱学习!热爱一切!...
  4. 非车险产品保费计算规则
  5. 如何将Word快速转为PPT?
  6. .Net Core 依赖注入
  7. ZZULIOJ-1379: A+B
  8. web前端面试题最全版总结
  9. Android 5.0发布日期/机型/功能传言汇总
  10. soar以及web页面安装使用