ReportNG测试报告模板定制

 

部分参考:http://tech.it168.com/a2013/0906/1530/000001530755_3.shtml

ReportNG提供了简单的方式来查看测试结果,并能对结果进行着色,还可以通过修改模板定制化内容,修改CSS来替换默认的输出样式等。为了使用ReportNG,首先我们要引入reportng-1.1.4.jar和velocity-dep-1.4.jar,或者直接导入其源代码,进行定制化。

一.增加项目名称、Android设备信息等数据。

  在ReportMetadata.java文件增加以下内容(获得Android设备id和名称):

 1     /**
 2      *  get Device UDID
 3      */
 4     public String getDeviceUdid() {
 5         List<String> list = getDeviceInfo();
 6         String[] split = {"", "", ""};
 7         for (int i = 0; i < list.size() - 1; i++) {
 8             if (list.get(i).contains("model:")) {
 9                 split = list.get(i).split(" ");
10             }
11         }
12
13         return split[0];
14     }
15
16     /**
17      *  get Device Name
18      */
19     public String getDeviceName() {
20         List<String> list = getDeviceInfo();
21         int index = 0;
22         String[] split = {"", "", ""};
23
24         for (int i = 0; i < list.size() - 1; i++) {
25             if (list.get(i).contains("model:")) {
26                 index = list.get(i).indexOf("model:");
27                 split = list.get(i).substring(index + 6).split(" ");
28             }
29         }
30
31         return split[0];
32     }
33
34     public List<String> getDeviceInfo() {
35         List<String> list = new LinkedList<String>();
36         String line = "";
37         String command = "cmd /c adb devices -l";
38         try {
39             Process process = Runtime.getRuntime().exec(command);
40             BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
41             while ((line = reader.readLine()) != null) {
42                 list.add(line.toString());
43             }
44             process.waitFor();
45
46         } catch (IOException | InterruptedException e) {
47             e.getMessage();
48         }
49
50         return list;
51     }
52    

  项目名称和服务器信息存储到xml文件中,这里继续在ReportMetadata.java文件读取xml:

    /**
     * 读取xml文件
     * @param regInfoPath string    文件路径
     */
    private static Map<String, String> parserXml(String regInfoPath) {
        Map<String, String> temp = new LinkedHashMap<String, String>();
        String path = System.getProperty("user.dir");
        path += regInfoPath;
        File inputXml = new File(path);
        SAXReader saxReader = new SAXReader();
        try {
            Document document = saxReader.read(inputXml);   //把文件读入到文档
            Element employees = document.getRootElement();      //获取文档根节点
            for(Iterator<?> i = employees.elementIterator(); i.hasNext();) {
                Element employee = (Element) i.next();
                for(Iterator<?> j = employee.elementIterator(); j.hasNext();) {
                    Element node = (Element) j.next();
                    String key = node.getName();
                    String value = node.getText();
                    temp.put(key, value);
                }
            }
        } catch (DocumentException e) {
            System.out.println(e.getMessage());
        }
        return temp;
    }

    /**
     * 返回节点value
     * @param key
     * @return
     */
    public static String getXmlValue(String key) {
        Map<String, String> init = parserXml("\\data\\init.xml");
        return init.get(key);
    } 

    public static String getServer() {
        return getXmlValue("project");
    }

    public static String getXmlSetting() {
        String temp = "";
        if (getXmlValue("switch").equals("1")) {
            return "线上环境";
        } else if (getXmlValue("switch").equals("2")) {
            return "测试环境";
        }

        return temp;
    }

  到模板属性文件reportng.properties里添加模板属性:

project=Project:
setting=Server:
deviceUdid=Device Udid:
deviceName=Device Name:
createTime=Create Time:

  然后到模板输出文件overview.html.vm里修改显示内容,meta为类对象,后面为调用方法:

 1 <table id="info" align="right">
 2   <tr>
 3     <td><b>$messages.getString("project")</b> $meta.server</td>
 4   </tr>
 5   <tr>
 6     <td><b>$messages.getString("setting")</b> $meta.xmlSetting</td>
 7   </tr>
 8   <tr>
 9     <td><b>$messages.getString("deviceName")</b> $meta.deviceName</td>
10   </tr>
11   <tr>
12     <td><b>$messages.getString("deviceUdid")</b> $meta.deviceUdid </td>
13   </tr>
14   <tr>
15     <td><b>$messages.getString("createTime")</b> $meta.reportDate $meta.reportTime</td>
16   </tr>
17 </table>

二.修改模板中执行方法排序问题

  模板中的方法排序是以字母顺序排序的,这里想要改成以方法的执行顺序排序,到TestResultComparator.java文件中修改以下位置:

  

 1     public int compare(ITestResult result1, ITestResult result2)
 2     {
 3         int longresult2 = 0;
 4         if (result1.getStartMillis() < result2.getStartMillis()) {
 5             longresult2 = -1;
 6         } else {
 7             longresult2 = 1;
 8         }
 9
10         return longresult2;
11 //        return result1.getName().compareTo(result2.getName());
12     }

三.模板中增加Case异常截图,暂未研究。。

ReportNG测试报告修改后如图:

时间: 2024-11-08 23:42:21

ReportNG测试报告模板定制的相关文章

ReportNg测试报告的定制修改

目前笔者接触的自动化测试报告有两种,这两种都是开源的,第一种是ReportNG,第二种是ExtentReports,两种风格各异,ExtentReports自带饼图,页面很炫,但是我们今天讲的是ReportNG. 首先来看下默认的ReportNG报告,是不是发现有个中文乱码(此图来源于网络),首先我们来解决下这个乱码问题. 1.首先从GitHub拉取ReportNG源码,地址:https://github.com/dwdyer/reportng,下载好后解压. 2.导入到编辑器如Eclipse,

JIRA 本地环境搭建、插件开发、邮件模板定制

系统 Mac 语言 JAVA 1.首先安装本地开发环境,JIRA提供SDK,供本地运行及开发. SDK安装参考文档:https://developer.atlassian.com/docs/getting-started/set-up-the-atlassian-plugin-sdk-and-build-a-project/install-the-atlassian-sdk-on-a-linux-or-mac-system 2.环境搭建好就可以开发插件了. SDK中 JIRA 版本和 实际使用的

性能测试报告模板 V1.0

版权声明:本文为兄弟连IT教育原创文章,未经博主允许不得转载. 1. 测试项目概述与测试目的 1.1 项目概述  本部分主要是针对即将进行压力测试的对象(接口.模块.进程或系统)进行概要的说明,让人明白该测试对象的主要功能与作用及相关背景. 1.2 测试目标  简要列出进行本次压力测试的主要目标(目的). 1.3 名词解释  性能测试过程中涉及的业务和技术方面的专业名词. 1.4 参考文档  列出与本文档相关的参考文档名称. 2. 测试对象的拓扑结构  本部分主要以图表加文字的方式,对待测试对象

Django学习(3)模板定制

在Django学习(一)一首情诗中,views.py中HTML被直接硬编码在代码之中,虽然这样便于解释视图是如何工作的,但直接将HTML硬编码到视图却不算一个好主意.因为: 对页面设计进行的任何改变都必须对Python代码进行相应的修改,而站点设计的修改往往比底层Python代码的修改要频繁得多. Python代码编写和HTML设计是两项不同的工作,大多数专业的网站开发环境都将它们分配给不同的人员来完成. 程序员编写Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人

测试报告模板范例

1. 简介 1.1 编写目的 本文档用于记录测试过程,总结各轮次的测试情况,分析测试数据,归纳测试工作进行过程中暴露的问题与遗留的风险,给出相应的测试建议以供后续项目参考. 1.2 项目背景 xx需要一个拥有真实用户的社区化产品,通过真实高信任度用户关系的建立,提高用户粘性,提升活跃会员数,带来长效的增长.在此背景下,以真实用户为基础的社区应运而生.主要具有以下5点意义: 1. 提高社区活跃会员数 2. 提高用户粘度 3. 建立真实(和用户的社区身份相一致)的多维用户信息 4. 建立高信任度的用

测试报告模板

官网V1.0测试报告 第一轮测试 官网第一轮测试完成,共执行用例196条,157条通过,16条不通过,7条用例暂时锁定(需要线上验证,或者其他原因,如不适用当前测试场景),6条未执行(开发还在优化开发中),执行结果如下:详见http://62.234.125.170:8083/index.php 共发现问题,27个http://zentao.mytongche.com/index.php?m=bug&f=browse&t=html&productID=13&branch=&

一个好看的测试报告模板BeautifulReport

def nrun(): report = ('report_' + ('%s') % time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + '.html').replace('\\', '/') suite = unittest.defaultTestLoader.discover(CASE_DIR, "*case.py") result = BeautifulReport(suite) result.repo

性能测试报告模板QQ群 522720170

点击链接加入QQ群 522720170(免费公开课.视频应有尽有):https://jq.qq.com/?_wv=1027&k=5C08ATe 1. 测试概要 1.1. 系统简介 简述本项目的背景介绍 针对迎接2008奥运,对用户新开发的带有2008域名的免费邮箱. 1.2. 测试环境 对测试服务器/客户端测试机的软硬件描述 服务器名称 硬件 软件 URL/IP 备注 前端 采集 DB 客户端 -- 1.3. 测试时间 描述本项目测试的起止时间 1.4. 测试用例执行情况 描述在性能测试过程中所

性能测试报告(实例)

上一篇博文主要通过两个例子让测试新手了解一下测试思想,和在做测试之前应该了解人几点,那么我们在如何完成一次完整的性能测试呢? 测试报告是一次完整性能测试的体现,所以,这里我给出一个完整的性能测试报告,相信通过这个报告,我们会整性能测试有个整体的了解,知道我们在以后做性能测试时需要做哪些工作. 注明:1.性能测试报告模板很多,这不是一个空洞的模板,是一个完整的测试报告. 2.由于商业原因,关于项目明,用XXX代替 3.我一直觉得,关于性能工具重要,但不是很重要,要学习性能测试,需要了解的知识面很多