上一节中我们说了如何用testutils.jar这个包生成我们的结果文件,文件的类型是xml,如下图:
这个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=
分享到:
相关推荐
这是一个删除lint-result.xml中无用资源的demo,比较简单,不过可以直接安转使用
Selenium WebDriver 入门知识、Selenium Python脚本、使用unittest 编写单元测试、生成HTML格式的测试报告、元素定位、Selenium Python API 介绍、元素等待机制、跨浏览器测试、移动端测试、编写一个iOS测试脚本、...
详细讲解了进行Android自动化测试需要掌握的各种技术、工具和方法,包括Android自动化测试基础、Android应用的白盒自动化测试和黑盒自动化测试的技术和原理、Android服务组件和内容组件的测试、HTML 5应用和NDK应用...
它从Android应用自动化测试工程师和开发工程师的需求出发,从测试和调试两个维度,针对采用Java、HTML 5、C++&NDK;三种Android应用开发方式所需要的测试和调试技术、方法进行了细致而深入的讲解,为Android应用的...
MacacaPC端Web自动化测试非常类似于Selenium,而移动端自动化测试非常类似于Appium,如果你搭建过Appium环境,Macaca移动端环境的搭建将非常简单。本文继承上一篇,关于Node.js神马的就不再教你安装了。...
lowen 基于monkeyrunner的android应用的自动化测试,并输出测试结果到html的框架 仿腾讯utest测试框架 代码有待完善,欢迎有兴趣的朋友一起讨论(目前报表里面使用echarts部分没有写数据处理逻辑,框架已搭好) ...
appium_pyton_android继承并封装了appium,Android移动端自动化测试框架。支持多设备并发运行testcase,直接错误log及截图功能,html输出测试报告等。简单介绍下用法:1、运行前请添加测试包、设备信息到config.yaml...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作...
自动化测试 webdriver 所需 java jar包 android 环境使用
全书共分11章,主要以范例集的方式来讲述android的知识点,详细介绍了开发android的人机交互界面、android常用的开发控件、android手机收发短信等通信服务、开发android手机的自动服务功能和娱乐多媒体功能以及...
展示了在嵌入式系统中使用Selenium进行自动化测试的方法,涵盖Android、 iOS和Raspberry Pi等;此外,本书还描述了Selenium Grid的架构和部署方法;最后介绍了Selenium周边的测试工具和套件。无论从深度还是广度上,...
全书共分11章,主要以范例集的方式来讲述Android的知识点,详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合...
Airtest是一个跨平台的UI自动化框架,适用于游戏和App。 快速开始 各种运行: Airtest提供了跨平台的API,包括安装应用、模拟输入、断言等。 基于图像识别技术定位UI元素,你无需嵌入任何代码即可进行自动化。 扩展...
介绍使用mitproxy代理工具做Android自动化Mock数据测试环境搭建创建虚拟环境(python 3.7)python3.7 -m venv /Users/xinxi/PycharmProjects/mitmproxytest/venv or virtualenv venvsource venv/bin/activate 激活虚拟...