7.4 测试报告优化

通过上面的三种方法,我们都可以得到一个Xml格式的测试报告,不过这不是我们想要的,因为这样的报告读起来很费劲,而且这样的报告发给领导们也是不行的。所以我们要美化一下才行,一般都是把Xml文件给转化成HTML格式的。

经过查询,找到了一种通过ant_junit下面的一个junit-noframes.xsl来美化我们的测试报告,下面我们讲解一下方法:

(1)下载ant-junit.jar

junit-noframes.xsl文件在ant-junit.jar包中,所以我们要先在网上下载这个包。下载地址我忘记了,你可以自己搜索,也可以在我们本章后面提供的网盘地址中下载。下载后解压ant-junit.jar,在下面的路径中会看到junit-noframes.xsl。

junit-noframes.xsl文件路径:\ant-junit\org\apache\tools\ant\taskdefs\optional\junit\xsl\

(2)整理测试用例报告和junit-noframes.xsl

将测试用例报告和junit-noframes.xsl都入到我们在上面新建的文件夹test-output文件夹中,这样方便我们整理测试报告。

(3)美化测试报告

通过python或是java将Xml,Xsl文件换化成HTML文件,具体的方法我们下节介绍。转换后的测试报告如图7.4.1所示:

7.4.1生成的HTML测试报告

此时生成的HTMl报告是默认的junit-noframes.xsl筛选的结果,包含的信息也许不是我们想要的,所以要修改junit-noframes.xsl文件,生成我们想要的报告。

(4)修改junit-noframes.xsl

为了测试我们想的效果:先展示出总体的运行情况,然后列出所有测试用例的执行情况,我们要修改junit-noframes.xsl文件。在修改这个文件之前,我们手动改一下测试报告文件junit-report.xml,增加一些儿测试用例的运行结果。当时如果正常运行的情况下会有很多测试用例的结果,现在我们只有一个测试用例,为了达到效果,我们修改如下:

然后根据我们的需要,修改junit-noframes.xsl。由于我对xsl文件不太了解,只好一边学习一边来修改了,修改的效果不是太好,大家可以根据需要,对期进行更好的优化,希望我的用例能起到抛砖引玉的效果。

junit-noframes.xsl修改如下:

源码太多了,去源址看吧:

http://blog.csdn.net/dragonking0318/article/details/45478891

然后根据修改后的xsl文件再生成相应的HTML报告,此时的报告就美观多了,如图7.4.2所示:

图7.4.2 定制后的HTML报告

7.5 XML
XSL文件转化成HTML格式

将XML,XSL文件转化成HTMl格式的文件,比较清楚明白。虽然还不能做到像TestNG那样产生美观的报告,不过转换后的文件展示比直接的Xml方式展示的直观了许多。下面我们介绍两种转换方法:

7.5.1
python转换法

Python利用libxml2,libxstl可以方便地将xml,xsl文件转换成对应的HTML文件,具体的方法如下:

(1)安装libxml2 libxstl

官方网站:http://xmlsoft.org/XSLT/index.html

安装包下载:http://xmlsoft.org/sources/

下面是windows平台的exe安装文件下载:

http://xmlsoft.org/sources/win32/python/

(2)编写脚本

我们将测试用例文件junit-report.xml和修改后的junit-noframes.xsl都放到test-output文件夹下。然后在此文件夹下新建python文件CreateReport.py,脚本内容如下所示:

[python] view plaincopy
  1. # -*- coding: mbcs -*-
  2. #!/usr/bin/python
  3. import libxml2, libxslt
  4. class compoundXML:
  5. def __init__(self):
  6. self._result = None
  7. self._xsl = None
  8. self._xml = None
  9. def do(self, xml_file_name, xsl_file_name):
  10. self._xml = libxml2.parseFile(xml_file_name)
  11. if self._xml == None:
  12. return 0
  13. styledoc = libxml2.parseFile(xsl_file_name)
  14. if styledoc == None:
  15. return 0
  16. self._xsl = libxslt.parseStylesheetDoc(styledoc)
  17. if self._xsl == None:
  18. return 0
  19. self._result = self._xsl.applyStylesheet(self._xml, None)
  20. def get_xml_doc(self):
  21. return self._result
  22. def get_translated(self):
  23. return self._result.serialize('UTF-8')
  24. def save_translated(self, file_name):
  25. self._xsl.saveResultToFilename(file_name, self._result, 0)
  26. def release(self):
  27. '''''
  28. this function must be called in the end.
  29. '''
  30. self._xsl.freeStylesheet()
  31. self._xml.freeDoc()
  32. self._result.freeDoc()
  33. self._xsl = None
  34. self._xml = None
  35. self._result = None
  36. if __name__ == '__main__':
  37. test = compoundXML()
  38. test.do('junit-report.xml', 'junit-noframes.xsl')
  39. print test.get_translated()
  40. test.save_translated('junit-report.html')
  41. test.release()

此脚本是通过xsl文件将xml文件转换成对应的html文件,具体代码请自行分析学习。

(3)生成报告

打开命令行,通过执行命令pythonCreateReport.py,就可以生成测试报告文件junit-report.html.生成的报告如图7.4.2所示。

用python脚本转化xml文件,比较快捷,有任何变动,只需要再运行一下命令即可。缺点是你得会python语言,并且在测试环境下配置了python的运行环境。

7.5.2  Xalan处理器转换xml文件

上面的方法需要我们会python语言,可是我们在利用Robotium来编写测试用例的时候,一般用的是java语言。为了生成一个测试报告,再去学习一个语言确实不划算。Java也有对应的方法将Xml
xsl文件转换成html文件的方法,如http://lanqiaoyeyu.iteye.com/blog/1169623,我试了此方法,可是总提示错误,查了一下原来这是一个bug,只好考虑一下还有没有其他的方法。

答案是肯定的,我们可以利用Xalan处理器来转换xml文件,此方法比较简单,而且不用编写代码。具体方法如下:

(1)下载xalan

下载最新的Xalan包,下载地址:http://apache.fayea.com/xalan/xalan-j/binaries/

(2)提取xalan.jar和serializer.jar

解压刚刚下载的包,从下面将xalan.jar和serializer.jar拷贝到test-output文件夹下,以备我们生成测试报告的时使用。

(3)生成测试报告

在DOS命令行下输入:

java -classpath serializer.jar
-jarxalan.jar

命令会输出xalan.jar的各种选项,以下是常用选项:

-IN:指定需要转换的XML;

-XSL:指定使用的XSLT样式单,如果在XML文档中已经引入了XSLT,则可省略此项;

-OUT:指定转换后输出的目标文档。

我们要生成测试报告的话,需要输入下面的命令:

d:\robotiumautotest\ZhongChouDemo\test-output>java
-classpathserializer.jar -jar xalan.jar -IN junit-report.xml -XSL
junit-noframes.xsl -OUTjunit-report1.html

命令执行完成后,命令行下没有任何输出,不过在test-output中会生成测试报告文件junit-report1.html.用浏览器打开后,效果如图7.4.2所示。

xalan包生成html文件比较方便,而且是我们java系列的,结合从手机上拉出测试报告,然后生成html格式的报告,再优化一下发送邮件等功能可以写成一个批处理文件。在测试用例执行完成后执行这个批处理文件,一气呵成!!

7.6 本章小结

本章我们讲述了三种生成测试报告的方法,其实原理都是一样的,读者可以根据自己的需要选择合适的方法。然后我们又对生成的报告进行优化,将Xml格式的报告转化成html格式的。其实这个报告还可以更加美化一下,用php将生成的HTMl报告再次优化,展示的更加美观。请大家自行学习,本教程就不再介绍了。

另外,教程中用到的jar在网上不太容易下载,我就提供了一个百度网盘的下载地址:

http://pan.baidu.com/s/1ntDmWo5

 
转自:http://blog.csdn.net/dragonking0318/article/details/45478891

Robotium测试报告的生成方法(下)的更多相关文章

  1. Robotium测试报告的生成方法(上)

    7.1 使用junit-report生成报告 这个是参考网上的:http://www.xuebuyuan.com/2148574.html,经我个人验证是可行的方法,网上写的挺详细的,不过有些不太清楚 ...

  2. 关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法

    关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法 这个问题我也遇到过,以下是解决办法   该方法适用于 ...

  3. 分布式环境下的id生成方法

    分布式环境下的id生成方法   前几天研究数据库分表分库的问题,其中有一个关键的地方就是生成唯一键的问题,假如数据表有1亿条数据,而且还在不断的增加,这里我们就需要考虑到分表分库,假设我们采用Hash ...

  4. 脚本可执行,但无HTML测试报告文件生成,其造成的原因是在PyCharm的执行模式错误

    定义测试报告两种写法: 1)测试报告直接在本地绝对路径下生成 # 导入HTMLTestRunner模块 import HTMLTestRunner # 通过open()方法以二进制写模式('wb')打 ...

  5. 分布式Unique ID的生成方法

    分布式Unique ID的生成方法 分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结了林林总总的各种生成算法. 1. 发号器 我接触的最早的Unique ID, ...

  6. 微信JS-SDK“分享信息设置”API及数字签名生成方法(NodeJS版本)

    原文:微信JS-SDK"分享信息设置"API及数字签名生成方法(NodeJS版本) 先上测试地址以示成功: 用微信打开下面地址测试 http://game.4gshu.com/de ...

  7. Twitter的分布式系统中ID生成方法——Snowflake

    Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统 ...

  8. UIImage类方法总结及UIImage生成方法对比

    http://mp.weixin.qq.com/s/A900w0Y5pGjuaB4j9Os9ww1.UIImage 生成方法的对比 Apple官方的文档为生成一个UIImage对象提供了两种方法: 1 ...

  9. [转帖]分布式Unique ID的生成方法一览

    分布式Unique ID的生成方法一览 http://www.importnew.com/22211.html 分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结 ...

随机推荐

  1. WPF样式学习:ToolBar的使用

    隐藏拖动把手: 设置ToolBar属性 ToolBarTray.IsLocked="True",可以达到隐藏拖动把手的目的 private void ToolBar_Loaded( ...

  2. Garmin APP开发之入门

    Garmin开发-入门 先附上几个已经开发完成的app日历 up down 翻月 start 回到当前月(就差农历了) 秒表和定时器一体app界面比较简单,但是实用,长按菜单键可以切换秒表和定时器,有 ...

  3. 报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    参考原文:http://bbs.csdn.net/topics/390121452 项目>属性>配置属性>清单工具>输入和输出>嵌入清单:原来是“是”,改成“否” 如果上 ...

  4. windows下php7.1.5、mysql环境搭建

    php http://windows.php.net/download/ 如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本:而用FastCGI模式运行PHP的话就 ...

  5. 因技术垃圾直接上手groovy的工作感悟

    因为熟悉devops,用IDEA的git完成版本提交,不太喜欢公司的代码控制,从事groovy基本没有代码控制,提交就打个压缩包给指定的人. 没有持续继承,持续部署(CICD). http://xio ...

  6. 使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu]             不显示删除回复             ...

  7. 关于SIGSEGV错误及处理方法

    http://blog.csdn.net/brace/article/details/1102422 今天编程遇到了SIGSEGV错误,比较困惑,所以找了些资料,总结一下: (1)官方说法是: SIG ...

  8. 【BZOJ1562】[NOI2009] 变换序列(匈牙利算法)

    点此看题面 大致题意: 给你一个长度为\(n\)的序列\(D\),让你找到一个字典序最小的\(n\)的排列\(T\),满足\(D_i=min(|T_i-i|,n-|T_i-i|)\). 建图 我想建图 ...

  9. 从多个textarea中随机选取一个内容

    <div id="IMContentTest"> <textarea name="IMContent" class="IMClass ...

  10. iOS 闭包传值 和 代理传值

    let vc = ViewController() let navc = UINavigationController(rootViewController: vc) window = UIWindo ...