• Robotium测试报告的生成方法(下)


    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-junitorgapache oolsant askdefsoptionaljunitxsl

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

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

    (3)美化测试报告

    通过python或是javaXmlXsl文件换化成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格式

     

       XMLXSL文件转化成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.   
    3. #!/usr/bin/python  
    4.   
    5.    
    6.   
    7. import libxml2, libxslt  
    8.   
    9.    
    10.   
    11. class compoundXML:  
    12.   
    13.    def __init__(self):  
    14.   
    15.        self._result = None  
    16.   
    17.        self._xsl = None  
    18.   
    19.        self._xml = None         
    20.   
    21.         
    22.   
    23.    def do(self, xml_file_name, xsl_file_name):         
    24.   
    25.        self._xml = libxml2.parseFile(xml_file_name)  
    26.   
    27.        if self._xml == None:  
    28.   
    29.             return 0  
    30.   
    31.        styledoc = libxml2.parseFile(xsl_file_name)  
    32.   
    33.        if styledoc == None:  
    34.   
    35.            return 0  
    36.   
    37.        self._xsl = libxslt.parseStylesheetDoc(styledoc)  
    38.   
    39.        if self._xsl == None:  
    40.   
    41.             return 0  
    42.   
    43.        self._result = self._xsl.applyStylesheet(self._xml, None)                 
    44.   
    45.         
    46.   
    47.    def get_xml_doc(self):  
    48.   
    49.        return self._result             
    50.   
    51.                
    52.   
    53.    def get_translated(self):  
    54.   
    55.        return self._result.serialize('UTF-8')         
    56.   
    57.     
    58.   
    59.    def save_translated(self, file_name):  
    60.   
    61.        self._xsl.saveResultToFilename(file_name, self._result, 0)  
    62.   
    63.         
    64.   
    65.    def release(self):  
    66.   
    67.        ''''' 
    68.  
    69.        this function must be called in the end. 
    70.  
    71.        '''  
    72.   
    73.        self._xsl.freeStylesheet()  
    74.   
    75.        self._xml.freeDoc()  
    76.   
    77.        self._result.freeDoc()  
    78.   
    79.        self._xsl = None  
    80.   
    81.        self._xml = None  
    82.   
    83.        self._result = None  
    84.   
    85.              
    86.   
    87. if __name__ == '__main__':  
    88.   
    89.    test = compoundXML()  
    90.   
    91.    test.do('junit-report.xml''junit-noframes.xsl')  
    92.   
    93.    print test.get_translated()  
    94.   
    95.    test.save_translated('junit-report.html')  
    96.   
    97. 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: obotiumautotesthongChouDemo est-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
  • 相关阅读:
    北京六环附近及往内的可驾驶道路网络(路网graph为连通图)
    OSM数据处理-python工具包
    小程序踩坑
    小程序基本配置
    JavaScript 基础(四):Array
    MYSQL--慎用group_concat()
    真正高效的SQLSERVER分页查询
    PhpStorm Git 操作
    linux 查看当前目录文件的大小
    @PostConstruct和@PreDestroy的使用说明
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/9312784.html
Copyright © 2020-2023  润新知