• 给Fitnesse添加json格式报告


    需求:fitnesse自带xml、junit、html格式报告,现在需要添加json格式的报告,且报告中只展示执行错误的用例信息

    修改文件:

    fitnesse.http.Response.java

    fitnesse.responders.run.SuiteResponder.java

    添加文件:

    fitnesse.reporting.history.JsonReFormatter.java

    fitnesse.resources.templates.suiteJson.vm

    fitnesse.http.Response.java:添加下面红色字体部分

     1 ...
     2 public Response(String formatString) {
     3     Format format;
     4 
     5     if ("html".equalsIgnoreCase(formatString)) {
     6       format = Format.HTML;
     7     } else if ("xml".equalsIgnoreCase(formatString)) {
     8       format = Format.XML;
     9     } else if ("junit".equalsIgnoreCase(formatString)) {
    10       format = Format.JUNIT;
    11     } else if ("text".equalsIgnoreCase(formatString)) {
    12       format = Format.TEXT;
    13     } else if ("json".equalsIgnoreCase(formatString)) {
    14         format = Format.JSON;
    15       } else {
    16       format = Format.HTML;
    17     }
    18     setContentType(format.getContentType());
    19   }
    20 
    21   public Response(String format, int status) {
    22     this(format);
    23     this.status = status;
    24   }
    25 
    26   public boolean isXmlFormat() {
    27     return Format.XML.contentType.equals(contentType);
    28   }
    29 
    30   public boolean isHtmlFormat() {
    31     return Format.HTML.contentType.equals(contentType);
    32   }
    33 
    34   public boolean isTextFormat() {
    35     return Format.TEXT.contentType.equals(contentType);
    36   }
    37 
    38   public boolean isJunitFormat() {
    39         return Format.JUNIT.contentType.equals(contentType);
    40   }
    41   
    42   public boolean isJsonFormat() {
    43         return Format.JSON.contentType.equals(contentType);
    44 }
    45 ...

    fitnesse.responders.run.SuiteResponder.java:添加下面红色字体部分

     1 ...
     2 
     3  private void createMainFormatter() {
     4     if (response.isXmlFormat()) {
     5       mainFormatter = newXmlFormatter();
     6     } else if (response.isTextFormat()) {
     7       mainFormatter = newTextFormatter();
     8     } else if (response.isJunitFormat()) {
     9       mainFormatter = newJunitFormatter();
    10     } else if(response.isJsonFormat()){
    11       mainFormatter = newJsonFormatter();
    12     }else {
    13       mainFormatter = newHtmlFormatter();
    14     }
    15   }
    16 
    17 ....
    18 
    19 protected BaseFormatter newTextFormatter() {
    20     return new TestTextFormatter(response);
    21   }
    22 
    23   protected BaseFormatter newJunitFormatter() {
    24     return new JunitReFormatter(context, page, response.getWriter(), getSuiteHistoryFormatter());
    25   }
    26   
    27 
    28   protected BaseFormatter newJsonFormatter() {
    29         return new JsonReFormatter(context, page, response.getWriter(), getSuiteHistoryFormatter());
    30       }
    31 
    32   protected BaseFormatter newHtmlFormatter() {
    33     return new SuiteHtmlFormatter(page, response.getWriter());
    34   }
    35 ...

    fitnesse.reporting.history.JsonReFormatter.java:添加该文件

     1 import java.io.Closeable;
     2 import java.io.File;
     3 import java.io.IOException;
     4 import java.io.Writer;
     5 
     6 import fitnesse.FitNesseContext;
     7 import fitnesse.reporting.BaseFormatter;
     8 import fitnesse.wiki.WikiPage;
     9 
    10 import org.apache.velocity.Template;
    11 import org.apache.velocity.VelocityContext;
    12 import org.apache.velocity.app.VelocityEngine;
    13 import org.xml.sax.SAXException;
    14 
    15 /**
    16  * 
    17  * Format test results as Json  report. This responder returns an alternate
    18  * format of the test history.
    19  */
    20 public class JsonReFormatter extends BaseFormatter implements Closeable {
    21 
    22   private final FitNesseContext context;
    23   private final Writer writer;
    24   private final SuiteHistoryFormatter historyFormatter;
    25 
    26   public JsonReFormatter(FitNesseContext context, WikiPage page, Writer writer, SuiteHistoryFormatter historyFormatter) {
    27     super(page);
    28     this.context = context;
    29     this.writer = writer;
    30     this.historyFormatter = historyFormatter;
    31   }
    32 
    33   @Override
    34   public void close() throws IOException {
    35     historyFormatter.close();
    36 
    37     // read file based on historyFormatter time-stamp
    38     VelocityContext velocityContext = new VelocityContext();
    39     velocityContext.put("formatter", this);
    40     velocityContext.put("suiteExecutionReport", historyFormatter.getSuiteExecutionReport());
    41     VelocityEngine velocityEngine = context.pageFactory.getVelocityEngine();
    42     Template template = velocityEngine.getTemplate("suiteJson.vm");
    43     template.merge(velocityContext, writer);
    44     writer.close();
    45   }
    46 
    47   @Override
    48   public int getErrorCount() {
    49     return historyFormatter.getErrorCount();
    50   }
    51 
    52   TestExecutionReport makeTestExecutionReport(File file) throws IOException, SAXException, InvalidReportException {
    53     return new TestExecutionReport(file);
    54   }
    55 
    56 
    57 }

    fitnesse.resources.templates.suiteJson.vm:添加该文件

     1 #set( $String = "" )
     2 #macro( format $s )$String.format("%.3f", $s)#end
     3 #set($suiteTotalRunTimeSeconds = $suiteExecutionReport.totalRunTimeInMillis / 1000.0 )
     4 {"testsuite_name":"#escape($suiteExecutionReport.rootPath)","tests":"$suiteExecutionReport.pageHistoryReferences.size()","failures":"$suiteExecutionReport.finalCounts.wrong","disabled":"$suiteExecutionReport.finalCounts.ignores","errors":"$suiteExecutionReport.finalCounts.exceptions","time":"#format($suiteTotalRunTimeSeconds)","testcase":[
     5   #set($failure_count = $suiteExecutionReport.finalCounts.wrong)
     6   #set($error_count = $suiteExecutionReport.finalCounts.exceptions)
     7   #set($all_count = $failure_count+$error_count)
     8   #foreach ($reference in $suiteExecutionReport.pageHistoryReferences)   
     9     #set($classname = $formatter.getClassName($reference))  
    10     #set($runTimeSeconds = $reference.RunTimeInMillis / 1000.0 )
    11     #if($reference.testSummary.exceptions > 0 || $reference.testSummary.wrong > 0 )
    12       {"name":"#escape($reference.pageName)","assertions":"$reference.testSummary.right","time":"#format($runTimeSeconds)",
    13       #set($all_count = $all_count - 1)
    14       #if($suiteExecutionReport.finalCounts.wrong > 0)
    15         "failure_message":"$reference.testSummary.wrong errors",
    16       #end
    17       #if($reference.testSummary.exceptions > 0)
    18         "error_message":"$reference.testSummary.exceptions exceptions",
    19       #end
    20       "system_out":"$reference.pageName?pageHistory&resultDate=$reference.resultDate"}
    21       #if($all_count > 0)
    22       ,
    23       #end
    24     #end
    25   #end
    26 ]}
  • 相关阅读:
    数据结构——二叉搜索树、B树、B-树
    计算机组成原理——指令流水线
    计算机组成原理——微指令的控制字段
    计算机组成原理——关于数据对齐存储
    program
    数据库——视图(View)相关
    软件测试——性能测试、压力测试、负载测试等详解
    软件测试——Stub和Mock
    虚拟机的性能监控与故障处理工具
    Linux中安装tomcat后,window中访问不到tomcat的欢迎界面问题
  • 原文地址:https://www.cnblogs.com/moonpool/p/6230389.html
Copyright © 2020-2023  润新知