上一节中我们说了如何用testutils.jar这个包生成我们的结果文件,文件的类型是xml,如下图:
这个xml的结果,我们发给领导,敢问哪个领导看着不目瞪口呆?现在各个网站没有找到andriod的html报告,下面是我自己的方法去解析生成的html报告。
需要:
1.自动化case标题和功能case标题对应的xml文件:如下图
2.autoit v3软件
下面:我们需要用autoit写脚本去解析这两个xml,组合成我们需要的报告.报告如下图:
autoit脚本如下:
这个xml的结果,我们发给领导,敢问哪个领导看着不目瞪口呆?现在各个网站没有找到andriod的html报告,下面是我自己的方法去解析生成的html报告。
需要:
1.自动化case标题和功能case标题对应的xml文件:如下图
2.autoit v3软件
下面:我们需要用autoit写脚本去解析这两个xml,组合成我们需要的报告.报告如下图:
autoit脚本如下:
- Dim $xmlReportFilePath="TEST-all.xml" ;xml格式的report存放路径 @WorkingDir&"\\"&
- Dim $xmlConfigFilePath="TEST-config.xml" ;xml格式的用例配置文件存放路径 @WorkingDir&"\\"&
- Dim $testCaseCount ;测试用例的总数
- Dim $passCaseCount ;通过的测试用例数
- Dim $faileCaseCount ;失败的测试用例数
- Dim $autoTestName ;自动化用例名称
- Dim $functionTestName ;功能用例名称
- dim $executeTime ;执行时间
- Dim $failedMessage ;失败原因
- Dim $htmlBeginStr
- Dim $xDoc,$xNodes,$Node
- Dim $configCaseCount
- $htmlBeginStr='<!DOCTYPE html>'& _
- '<html>'& _
- '<head>'& _
- '<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />'& _
- '<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />'& _
- '<link rel="stylesheet" type="text/css" href="static/css/index.css" />'& _
- '<title>xxx QA Test Report</title>'& _
- '</head>'& _
- '<body>'& _
- '<div class="block fixedTop tm bdrb">'& _
- '<div class="blockuk topBar">'& _
- '<table class="titleTab tabp100">'& _
- '<thead>'& _
- '<td width="20%" class="txtl">'& _
- '<img src="static/images/homeLogo.png" align="absmiddle"/></td>'& _
- '<td width="30%" class="txtl" id="testTitle">'& _
- 'xxx QA Test Report</td>'& _
- '<td width="" class="txtr" id="tips">'
- ;....................................................................................
- ;....函数功能:初始化xml
- ;....参 数: xml路径
- ;....返 回 值: 无
- ;....................................................................................
- Func initXml($xmlPath)
- $xDoc=ObjCreate("MSXML2.DOMDocument")
- $xDoc.load($xmlPath)
-
- EndFunc
- ;....................................................................................
- ;....函数功能:得到节点总数
- ;....参 数:
- ;....返 回 值: 无
- ;....................................................................................
- Func getNodeCount($nodeName)
- $xNodes=$xDoc.documentElement.selectNodes(".//"&$nodeName)
- $testCaseCount=$xNodes.length
- EndFunc
- Func getConfigCaseCount($nodeName)
- $xNodes=$xDoc.documentElement.selectNodes(".//"&$nodeName)
- $configCaseCount=$xNodes.length
- EndFunc
- ;....................................................................................
- ;....函数功能:得到节点总数
- ;....参 数:
- ;....返 回 值: 无
- ;....................................................................................
- Func getCoverage($passCount,$caseCount)
- Return Round($passCount/$caseCount,2)*100&"%"
- EndFunc
- ;....................................................................................
- ;....函数功能:得到用例数
- ;....参 数:
- ;....返 回 值: 无
- ;....................................................................................
- Func getCaseCount($nodeName)
- Dim $nodeCount=0
- Dim $i
- getNodeCount($nodeName)
- For $i=0 To $testCaseCount-1
- if $xNodes($i).ChildNodes.length>0 Then
- $nodeCount=$nodeCount+1
- EndIf
-
- Next
- $passCaseCount=$testCaseCount-$nodeCount
- $faileCaseCount=$nodeCount
- EndFunc
- ;....................................................................................
- ;....函数功能:得到用例数
- ;....参 数:
- ;....返 回 值: 无
- ;....................................................................................
- Func getText($nodeName)
- Return $nodeName.childNodes(0).text
- EndFunc
- ;....................................................................................
- ;....函数功能:得到用例数
- ;....参 数:
- ;....返 回 值: 无
- ;....................................................................................
- Func getCountStr()
- Dim $countStr
- $countStr='用例总数:<span class="tipsNum">'&$testCaseCount&'</span> '& _
- '用例通过:<span class="tipsNum">'&$passCaseCount&'</span> '& _
- '用例失败:<span class="tipsNum red">'&$faileCaseCount&'</span> '& _
- '通过率:<span class="tipsNum">'&getCoverage($passCaseCount,$testCaseCount)&'</span></td>'
- $htmlBeginStr=$htmlBeginStr&$countStr& _
- '</thead>'& _
- '</table>'& _
- '</div>'& _
- '</div>'& _
- '<div class="clear"></div>' & _
- '<div class="block" id="listCon">'& _
- '<div class="blockuk">'& _
- '<table class="caseTab tabp100">' & _
- '<thead class="uiHeader">'& _
- '<tr>'& _
- '<td class="wd300">用例名称</td>'& _
- '<td class="wd150">功能名称</td>'& _
- '<td class="wd85">执行结果</td>'& _
- '<td class="wd85">执行时间</td>'& _
- '<td class="wd388">失败原因</td>'& _
- '</tr>'& _
- '</thead>'& _
- '<tbody>'
- EndFunc
- Func getAttributes($nodeName,$attributeName)
- Return $nodeName.attributes.getNamedItem($attributeName).nodeValue
- EndFunc
- Func getCaseDetails()
- Global $caseDetails[$testCaseCount]
- For $i=0 To $testCaseCount-1
- if $xNodes($i).ChildNodes.length>0 Then
- $caseDetails[$i]=getAttributes($xNodes($i),"name")&"#"& _
- "failed"&"#"& _
- getAttributes($xNodes($i).ChildNodes(0),"message")&"#"& _
- "-"
- Else
- $caseDetails[$i]=getAttributes($xNodes($i),"name")&"#"& _
- "pass"&"#"& _
- getAttributes($xNodes($i),"time")&"#"& _
- "-"
- EndIf
- Next
- EndFunc
- Func getCaseConfig()
- Global $caseConfig[$configCaseCount]
- For $i=0 To $configCaseCount-1
- $caseConfig[$i]=getAttributes($xNodes($i),"name")&"#"& _
- getText($xNodes($i))
- Next
- EndFunc
- Func getSplit($str,$tag,$strNum)
- Dim $arr=StringSplit($str,$tag)
- Return $arr[$strNum]
- EndFunc
- Func formatCaseDetails()
- initXml($xmlReportFilePath)
- getCaseCount("testcase")
- getCountStr()
- getCaseDetails()
- initXml($xmlConfigFilePath)
- getConfigCaseCount("testcase")
- getCaseConfig()
- Global $formatCaseDetails[$testCaseCount]
- For $i =0 To $testCaseCount-1
- For $j=0 To $configCaseCount-1
- If StringInStr($caseDetails[$i],getSplit($caseConfig[$j],"#",1)) <> 0 Then
- $formatCaseDetails[$i]=$caseDetails[$i]&"#"&getSplit($caseConfig[$j],"#",2)
- ExitLoop
- ElseIf $j==$configCaseCount-1 Then
- $formatCaseDetails[$i]=$caseDetails[$i]&"#"&"-"
- EndIf
- Next
- Next
- EndFunc
- Func createHtml()
- Dim $caseDetailsStr
- For $i=0 To $testCaseCount-1
- If getSplit($formatCaseDetails[$i],"#",2)=="pass" Then
- $caseDetailsStr=$caseDetailsStr&'<tr>'&'<td class="wd300">'&getSplit($formatCaseDetails[$i],"#",1)&'</td>'& _
- '<td class="wd150">'&getSplit($formatCaseDetails[$i],"#",5)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",2)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",3)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",4)&'</td>'& _
- '</tr>'
- Else
- $caseDetailsStr=$caseDetailsStr&'<tr>'&'<td class="wd300">'&getSplit($formatCaseDetails[$i],"#",1)&'</td>'& _
- '<td class="wd150">'&getSplit($formatCaseDetails[$i],"#",5)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",2)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",4)&'</td>'& _
- '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",3)&'</td>'& _
- '</tr>'
- EndIf
- Next
- $htmlBeginStr=$htmlBeginStr&$caseDetailsStr& _
- '</tbody>'& _
- '</table>'& _
- '</div>'& _
- '</div>'& _
- '</body>'& _
- '</html>'
- EndFunc
- Func output()
- Dim $fso,$oFile,$pFile
- $pFile="index.html";@WorkingDir&"\\"&
- $fso=ObjCreate("Scripting.FileSystemObject")
- $oFile=$fso.createTextFile($pFile,True,False)
- $oFile.write($htmlBeginStr)
- EndFunc
- formatCaseDetails()
- createHtml()
- output()
来自:http://www.51autotest.com/forum.php?mod=viewthread&tid=1854&extra=