Android自动化HTML报告(二)

  上一节中我们说了如何用testutils.jar这个包生成我们的结果文件,文件的类型是xml,如下图:
    
     这个xml的结果,我们发给领导,敢问哪个领导看着不目瞪口呆?现在各个网站没有找到andriod的html报告,下面是我自己的方法去解析生成的html报告。

     需要:
             1.自动化case标题和功能case标题对应的xml文件:如下图

             2.autoit v3软件
    
    下面:我们需要用autoit写脚本去解析这两个xml,组合成我们需要的报告.报告如下图:
     

    autoit脚本如下:
   
  1. Dim $xmlReportFilePath="TEST-all.xml"   ;xml格式的report存放路径 @WorkingDir&"\\"&
  2. Dim $xmlConfigFilePath="TEST-config.xml"    ;xml格式的用例配置文件存放路径   @WorkingDir&"\\"&
  3. Dim $testCaseCount          ;测试用例的总数
  4. Dim $passCaseCount          ;通过的测试用例数
  5. Dim $faileCaseCount         ;失败的测试用例数
  6. Dim $autoTestName           ;自动化用例名称
  7. Dim $functionTestName       ;功能用例名称
  8. dim $executeTime            ;执行时间
  9. Dim $failedMessage          ;失败原因
  10. Dim $htmlBeginStr
  11. Dim $xDoc,$xNodes,$Node
  12. Dim $configCaseCount


  13. $htmlBeginStr='<!DOCTYPE html>'& _
  14. '<html>'& _
  15. '<head>'& _
  16. '<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />'& _
  17. '<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />'& _
  18. '<link rel="stylesheet" type="text/css" href="static/css/index.css" />'& _
  19. '<title>xxx QA Test Report</title>'& _
  20. '</head>'& _
  21. '<body>'& _
  22. '<div class="block fixedTop tm bdrb">'& _
  23. '<div class="blockuk topBar">'& _
  24. '<table class="titleTab tabp100">'& _
  25. '<thead>'& _
  26. '<td width="20%" class="txtl">'& _
  27. '<img src="static/images/homeLogo.png" align="absmiddle"/></td>'& _
  28. '<td width="30%" class="txtl" id="testTitle">'& _
  29. 'xxx QA Test Report</td>'& _
  30. '<td width="" class="txtr" id="tips">'
  31. ;....................................................................................
  32. ;....函数功能:初始化xml
  33. ;....参    数: xml路径
  34. ;....返 回 值:  无
  35. ;....................................................................................
  36. Func initXml($xmlPath)
  37.    $xDoc=ObjCreate("MSXML2.DOMDocument")
  38.    $xDoc.load($xmlPath)
  39.    
  40. EndFunc

  41. ;....................................................................................
  42. ;....函数功能:得到节点总数
  43. ;....参    数: 
  44. ;....返 回 值:  无
  45. ;....................................................................................
  46. Func getNodeCount($nodeName)
  47.    $xNodes=$xDoc.documentElement.selectNodes(".//"&$nodeName)
  48.    $testCaseCount=$xNodes.length
  49. EndFunc        

  50. Func getConfigCaseCount($nodeName)
  51.    $xNodes=$xDoc.documentElement.selectNodes(".//"&$nodeName)
  52.    $configCaseCount=$xNodes.length
  53. EndFunc        
  54. ;....................................................................................
  55. ;....函数功能:得到节点总数
  56. ;....参    数: 
  57. ;....返 回 值:  无
  58. ;....................................................................................
  59. Func getCoverage($passCount,$caseCount)
  60.    Return Round($passCount/$caseCount,2)*100&"%"
  61. EndFunc

  62. ;....................................................................................
  63. ;....函数功能:得到用例数
  64. ;....参    数: 
  65. ;....返 回 值:  无
  66. ;....................................................................................
  67. Func getCaseCount($nodeName)
  68.    Dim $nodeCount=0
  69.    Dim $i
  70.    getNodeCount($nodeName)
  71.    For $i=0 To $testCaseCount-1
  72.           if $xNodes($i).ChildNodes.length>0 Then
  73.                  $nodeCount=$nodeCount+1
  74.           EndIf
  75.                  
  76.    Next             
  77.           $passCaseCount=$testCaseCount-$nodeCount
  78.           $faileCaseCount=$nodeCount
  79. EndFunc
  80. ;....................................................................................
  81. ;....函数功能:得到用例数
  82. ;....参    数: 
  83. ;....返 回 值:  无
  84. ;....................................................................................
  85. Func getText($nodeName)
  86.    Return $nodeName.childNodes(0).text
  87. EndFunc

  88. ;....................................................................................
  89. ;....函数功能:得到用例数
  90. ;....参    数: 
  91. ;....返 回 值:  无
  92. ;....................................................................................
  93. Func getCountStr()
  94.    Dim $countStr
  95.    $countStr='用例总数:<span class="tipsNum">'&$testCaseCount&'</span>  '& _
  96.    '用例通过:<span class="tipsNum">'&$passCaseCount&'</span>  '& _
  97.    '用例失败:<span class="tipsNum red">'&$faileCaseCount&'</span>  '& _
  98.    '通过率:<span class="tipsNum">'&getCoverage($passCaseCount,$testCaseCount)&'</span></td>'
  99.    $htmlBeginStr=$htmlBeginStr&$countStr& _
  100.    '</thead>'& _
  101.    '</table>'& _
  102.    '</div>'& _
  103.    '</div>'& _
  104.    '<div class="clear"></div>' & _
  105.    '<div class="block" id="listCon">'& _
  106.           '<div class="blockuk">'& _
  107.                  '<table class="caseTab tabp100">' & _
  108.                         '<thead class="uiHeader">'& _
  109.                            '<tr>'& _
  110.                                   '<td class="wd300">用例名称</td>'& _
  111.                                   '<td class="wd150">功能名称</td>'& _
  112.                                   '<td class="wd85">执行结果</td>'& _
  113.                                   '<td class="wd85">执行时间</td>'& _
  114.                                   '<td class="wd388">失败原因</td>'& _
  115.                            '</tr>'& _
  116.                            '</thead>'& _
  117.                            '<tbody>'                           
  118. EndFunc



  119. Func getAttributes($nodeName,$attributeName)
  120.           Return $nodeName.attributes.getNamedItem($attributeName).nodeValue
  121. EndFunc

  122. Func getCaseDetails()
  123.    Global $caseDetails[$testCaseCount]
  124.    For $i=0 To $testCaseCount-1
  125.           if $xNodes($i).ChildNodes.length>0 Then
  126.                  $caseDetails[$i]=getAttributes($xNodes($i),"name")&"#"& _
  127.                  "failed"&"#"& _
  128.                  getAttributes($xNodes($i).ChildNodes(0),"message")&"#"& _
  129.                  "-"        
  130.           Else
  131.                  $caseDetails[$i]=getAttributes($xNodes($i),"name")&"#"& _
  132.                  "pass"&"#"& _
  133.                  getAttributes($xNodes($i),"time")&"#"& _
  134.                  "-"
  135.           EndIf
  136.    Next
  137. EndFunc

  138. Func getCaseConfig()
  139.    Global $caseConfig[$configCaseCount]
  140.    For $i=0 To $configCaseCount-1
  141.           $caseConfig[$i]=getAttributes($xNodes($i),"name")&"#"& _
  142.           getText($xNodes($i))
  143.    Next
  144. EndFunc


  145. Func getSplit($str,$tag,$strNum)
  146.    Dim $arr=StringSplit($str,$tag)
  147.    Return $arr[$strNum]
  148. EndFunc





  149. Func formatCaseDetails()
  150.    initXml($xmlReportFilePath)
  151.    getCaseCount("testcase")
  152.    getCountStr()
  153.    getCaseDetails()
  154.    initXml($xmlConfigFilePath)
  155.    getConfigCaseCount("testcase")
  156.    getCaseConfig()
  157.    Global $formatCaseDetails[$testCaseCount]
  158.    For $i =0 To $testCaseCount-1
  159.           For $j=0 To $configCaseCount-1
  160.                  If StringInStr($caseDetails[$i],getSplit($caseConfig[$j],"#",1)) <> 0 Then
  161.                         $formatCaseDetails[$i]=$caseDetails[$i]&"#"&getSplit($caseConfig[$j],"#",2)
  162.                         ExitLoop
  163.                  ElseIf $j==$configCaseCount-1 Then
  164.                         $formatCaseDetails[$i]=$caseDetails[$i]&"#"&"-"
  165.                  EndIf
  166.           Next
  167.    Next
  168. EndFunc

  169. Func createHtml()
  170.    Dim $caseDetailsStr
  171.    For $i=0 To $testCaseCount-1
  172.           If getSplit($formatCaseDetails[$i],"#",2)=="pass" Then
  173.           $caseDetailsStr=$caseDetailsStr&'<tr>'&'<td class="wd300">'&getSplit($formatCaseDetails[$i],"#",1)&'</td>'& _
  174.           '<td class="wd150">'&getSplit($formatCaseDetails[$i],"#",5)&'</td>'& _
  175.           '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",2)&'</td>'& _
  176.           '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",3)&'</td>'& _
  177.           '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",4)&'</td>'& _
  178.           '</tr>'
  179.           Else
  180.                  $caseDetailsStr=$caseDetailsStr&'<tr>'&'<td class="wd300">'&getSplit($formatCaseDetails[$i],"#",1)&'</td>'& _
  181.                  '<td class="wd150">'&getSplit($formatCaseDetails[$i],"#",5)&'</td>'& _
  182.                  '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",2)&'</td>'& _
  183.                  '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",4)&'</td>'& _
  184.                  '<td class="th85">'&getSplit($formatCaseDetails[$i],"#",3)&'</td>'& _
  185.                  '</tr>'
  186.           EndIf
  187.    Next
  188.    $htmlBeginStr=$htmlBeginStr&$caseDetailsStr& _
  189.    '</tbody>'& _
  190.    '</table>'& _
  191.    '</div>'& _
  192.    '</div>'& _
  193.    '</body>'& _
  194.    '</html>'

  195. EndFunc

  196. Func output()
  197.    Dim $fso,$oFile,$pFile
  198.    $pFile="index.html";@WorkingDir&"\\"&
  199.    $fso=ObjCreate("Scripting.FileSystemObject")
  200.    $oFile=$fso.createTextFile($pFile,True,False)
  201.    $oFile.write($htmlBeginStr)
  202. EndFunc

  203. formatCaseDetails()
  204. createHtml()
  205. output()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
手机自动化测试是指利用自动化测试工具和脚本模拟用户在手机上进行操作,验证应用程序的功能和性能是否符合预期。相比于手动测试,自动化测试可以提高测试效率、降低测试成本、减少测试时间,并且可以重复执行测试用例,保证测试结果的准确性和一致性。 在进行手机自动化测试前,需要先选择合适的测试工具和框架。目前比较流行的工具有Appium、Selendroid、UI Automator等,这些工具都支持多种编程语言,例如Java、Python、Ruby、JavaScript等,开发人员可以根据自己的喜好和熟练程度选择合适的语言进行开发。 测试用例的编写是手机自动化测试中的关键,测试用例应该具有可读性、可维护性和可重用性。测试用例的编写需要结合应用程序的需求和功能进行设计,测试脚本需要覆盖应用程序的各个部分,包括主界面、设置、登录、注册等等。测试用例的执行可以通过命令行或者图形界面进行,测试结果可以输出为HTML格式或者XML格式。 手机自动化测试中还需要考虑到不同的设备和平台,例如Android和iOS。因此,在编写测试用例时需要考虑到不同设备的适配问题,同时也需要对不同平台进行测试,以确保应用程序在不同平台上的兼容性和可用性。 总之,手机自动化测试可以提高测试效率和质量,对于移动应用程序的开发和测试来说是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值