• How to Adding ExtendReport in test framework


    Step 1: Add the extentreport dependency in POM.xml

    <dependency>
        <groupId>com.aventstack</groupId>
        <artifactId>extentreports</artifactId>
        <version>3.1.5</version>
    </dependency>

    Step2: Prepare a ExtentReportListener which implents IReporter.  below is an example.

      1 public class ExtentReportListener implements IReporter {
      2 
      3     private static final String OUTPUT_FOLDER = "target/";
      4     private static final String FILE_NAME = "ExtentReport.html";
      5 
      6     private ExtentReports extent;
      7 
      8 
      9     @Override
     10     public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
     11         init(xmlSuites);
     12 
     13         for (ISuite suite : suites) {
     14             Map<String, ISuiteResult> result = suite.getResults();
     15 
     16             for (ISuiteResult r : result.values()) {
     17                 ITestContext context = r.getTestContext();
     18 
     19                 buildTestNodes(context.getFailedTests(), Status.FAIL);
     20                 buildTestNodes(context.getSkippedTests(), Status.SKIP);
     21                 buildTestNodes(context.getPassedTests(), Status.PASS);
     22 
     23             }
     24         }
     25 
     26         for (String s : Reporter.getOutput()) {
     27             extent.setTestRunnerOutput(s);
     28         }
     29 
     30         extent.flush();
     31     }
     32 
     33 
     34     private void init(List<XmlSuite> xmlSuites) {
     35         String suiteName = xmlSuites.get(0).getName();
     36         ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
     37         htmlReporter.config().setDocumentTitle("ExtentReports: " + suiteName);
     38         htmlReporter.config().setReportName(suiteName);
     39         htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
     40         htmlReporter.config().setTheme(Theme.STANDARD);
     41         htmlReporter.config().setChartVisibilityOnOpen(true);
     42         htmlReporter.config().setEncoding("utf-8");
     43         //Fix the report with css stype
     44         htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
     45 
     46         extent = new ExtentReports();
     47         extent.attachReporter(htmlReporter);
     48         extent.setReportUsesManualConfiguration(true);
     49     }
     50 
     51 
     52     private void buildTestNodes(IResultMap tests, Status status) {
     53         // IResultMap is not sorted. To make it look nice in report first we need to sort tests (sort by start time)
     54         SortedSet<ITestResult> sortedSet = new TreeSet<>();
     55         for (ITestResult result : tests.getAllResults()) {
     56             sortedSet.add(result);
     57         }
     58 
     59         // Now we go through sorted results
     60         ExtentTest test;
     61         if (tests.size() > 0) {
     62             for (ITestResult result : sortedSet) {
     63                 test = extent.createTest(result.getTestContext().getCurrentXmlTest().getName() + " - "
     64                         + result.getMethod().getMethodName());
     65 
     66                 // Using Class short name instead of category
     67                 test.assignCategory(result.getMethod().getRealClass().getSimpleName());
     68 
     69                 Throwable throwable = result.getThrowable();
     70 
     71                 if (throwable != null) {
     72 
     73                     // Add parameters
     74                     Object[] parameters = result.getParameters();
     75                     if (parameters.length > 0) {
     76                         try {
     77                             // If parameters are String
     78                             String params = "";
     79                             for (Object object : parameters) {
     80                                 if (params.isEmpty()) {
     81                                     params = (String) object;
     82                                 } else {
     83                                     params = params + "," + (String) object;
     84                                 }
     85                             }
     86                             test.info(params);
     87                         } catch (ClassCastException e) {
     88                             // If parameters are HashMap
     89                             @SuppressWarnings("unchecked")
     90                             HashMap<String, String> table = (HashMap<String, String>) parameters[0];
     91                             test.info(table.toString());
     92                         }
     93                     } else {
     94                         test.info("This test doesn't have data");
     95                     }
     96 
     97                     // Finally, log throwable
     98                     test.log(status, throwable);
     99 
    100                 } else {
    101                     test.log(status, "Test " + status.toString().toLowerCase() + "ed");
    102                 }
    103 
    104                 test.getModel().setStartTime(getTime(result.getStartMillis()));
    105                 test.getModel().setEndTime(getTime(result.getEndMillis()));
    106             }
    107         }
    108     }
    109 
    110 
    111     private Date getTime(long millis) {
    112         Calendar calendar = Calendar.getInstance();
    113         calendar.setTimeInMillis(millis);
    114         return calendar.getTime();
    115     }
    116 }

    Step3: update the testng.xml to add the listener

    <listeners>
      <listener class-name="ExtentReportListener" />
    </listeners>
    

    Step4: run the test suite and check the report with a browser.   

  • 相关阅读:
    如何将JS中object转换为字符串
    验证码的实现
    JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法
    java 后台封装json数据学习总结
    ztree复选框
    左偏树详解
    Docker 入门
    linux 多进程
    派生类构造函数顺序
    20210203 7. 分库分表实战及中间件
  • 原文地址:https://www.cnblogs.com/amy2012/p/11625433.html
Copyright © 2020-2023  润新知