首页 > 编程语言 >走进Java接口测试之测试报告ExtentReport

走进Java接口测试之测试报告ExtentReport

时间:2023-04-06 15:01:27浏览次数:42  
标签:ExtentReport Java 测试报告 File reportPath report new com public

走进Java接口测试之测试报告ExtentReport_html


引言

走进Java接口测试之测试框架TestNG 中我们详细介绍了 TestNG 的各种用法, 在本文中,我将详细介绍如何将 ExtentReports 测试报告与TestNG集成。

ExtentReports 简介

主要特点:

  • 生成的报告简洁美观
  • 生成的单html方便 Jenkins 集成发邮件
  • 自带集中展示历史报告的服务端
  • 支持 Java 和 .Net

TestNG 原生报告有点丑,信息整理有点乱。ExtentReports 是用于替换TestNG 原生报告。当然也可以使用 ReportNg,个人偏好 ExtentReports 样式。

官网已经给了很多demo了,大家可以参考练习。 

官网:http://extentreports.com/ 

客户端: 

https://github.com/anshooarora/extentreports-java/commits/master 

服务端:https://github.com/anshooarora/extentx

具体步骤

Step-1:添加 Maven 依赖包

引入pom.xml

<!--引入extentreports相关包-->
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>3.1.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.vimalselvam</groupId>
            <artifactId>testng-extentsreport</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.relevantcodes</groupId>
            <artifactId>extentreports</artifactId>
            <version>2.41.2</version>
        </dependency>
        <!--引入testng测试框架-->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>compile</scope>
        </dependency>

Step-2:重写 ExtentTestNgFormatter 类

主要基于以下两项原因:

  • 支持报告中展示更多状态类型的测试结果,例如:成功、失败、警告、跳过等。
  • 因为不支持cdn.rawgit.com访问,故替css访问方式。

创建 MyExtentTestNgFormatter 类

下载 ExtentReportes 源码,找到 ExtentTestNgFormatter 类,Listener 目录下创建 MyExtentTestNgFormatter.java 类直接继承 ExtentTestNgFormatter 类。

public class MyExtentTestNgFormatter extends ExtentTestNgFormatter {

解决CDN无法访问

构造方法加入

htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);

具体代码如下:

ublic MyExtentTestNgFormatter() {
      setInstance(this);
      testRunnerOutput = new ArrayList<>();
      String reportPathStr = System.getProperty("reportPath");
      File reportPath;
      try {
          reportPath = new File(reportPathStr);
      } catch (NullPointerException e) {
          reportPath = new File(TestNG.DEFAULT_OUTPUTDIR);
      }
      if (!reportPath.exists()) {
          if (!reportPath.mkdirs()) {
              throw new RuntimeException("Failed to create output run directory");
          }
      }
      File reportFile = new File(reportPath, "report.html");
      File emailReportFile = new File(reportPath, "emailable-report.html");
      htmlReporter = new ExtentHtmlReporter(reportFile);
      EmailReporter emailReporter = new EmailReporter(emailReportFile);
      reporter = new ExtentReports();
      //        如果cdn.rawgit.com访问不了,可以设置为:ResourceCDN.EXTENTREPORTS或者ResourceCDN.GITHUB
      htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
      reporter.attachReporter(htmlReporter, emailReporter);
  }

重写 onstart 方法

新建一个类名为MyReporter,一个静态ExtentTest的引用。

Listener 包下 MyReporter.java

public class MyReporter {
        public static ExtentTest report;
    }

MyExtentTestNgFormatter.java

public void onStart(ITestContext iTestContext) {
        ISuite iSuite = iTestContext.getSuite();
        ExtentTest suite = (ExtentTest) iSuite.getAttribute(SUITE_ATTR);
        ExtentTest testContext = suite.createNode(iTestContext.getName());
        // 将MyReporter.report静态引用赋值为testContext。
        // testContext是@Test每个测试用例时需要的。report.log可以跟随具体的测试用例。另请查阅源码。
        MyReporter.report = testContext;
        iTestContext.setAttribute("testContext", testContext);
    }

自定义配置

测试报告默认是在工程根目录下创建 test-output/ 文件夹下,名为 report.html、 emailable-report.html。可根据各自需求在构造方法中修改。

public MyExtentTestNgFormatter() {
        setInstance(this);
        testRunnerOutput = new ArrayList<>();
        // reportPath报告路径
        String reportPathStr = System.getProperty("reportPath");
        File reportPath;
        try {
            reportPath = new File(reportPathStr);
        } catch (NullPointerException e) {
            reportPath = new File(TestNG.DEFAULT_OUTPUTDIR);
        }
        if (!reportPath.exists()) {
            if (!reportPath.mkdirs()) {
                throw new RuntimeException("Failed to create output run directory");
            }
        }
        // 报告名report.html
        File reportFile = new File(reportPath, "report.html");
        // 邮件报告名emailable-report.html
        File emailReportFile = new File(reportPath, "emailable-report.html");
        htmlReporter = new ExtentHtmlReporter(reportFile);
        EmailReporter emailReporter = new EmailReporter(emailReportFile);
        reporter = new ExtentReports();
        reporter.attachReporter(htmlReporter, emailReporter);
    }

report.log

report.log 支持多种玩法

// 根据状态不同添加报告。型如警告
MyReporter.report.log(Status.WARNING, "接口耗时(ms):" + String.valueOf(time));

直接从TestClass 中运行时会报 MyReporter.report 的空指针错误,需做判空处理。

Step-3:配置监听

在测试集合 testng.xml 文件中导入 Listener 监听类。

<listeners>
        <listener class-name="com.zuozewei.extentreportdemo.listener.MyExtentTestNgFormatter"/>
    </listeners>

Step-4:配置报告

extent reporters支持报告的配置。目前支持的配置内容有title、主题等。 先在 src/resources/目录下添加 config/report/extent-config.xml

<?xml versinotallow="1.0" encoding="UTF-8"?>
<extentreports>
    <configuration>
        <timeStampFormat>yyyy-MM-dd HH:mm:ss</timeStampFormat>
        <!-- report theme -->
        <!-- standard, dark 个人喜好暗色 -->
        <theme>dark</theme>
        <!-- document encoding -->
        <!-- defaults to UTF-8 -->
        <encoding>UTF-8</encoding>
        <!-- protocol for script and stylesheets -->
        <!-- defaults to https -->
        <protocol>https</protocol>
        <!-- title of the document -->
        <documentTitle>接口自动化测试报告</documentTitle>
        <!-- report name - displayed at top-nav -->
        <reportName>接口自动化测试报告</reportName>
        <!-- report headline - displayed at top-nav, after reportHeadline -->
        <reportHeadline>接口自动化测试报告</reportHeadline>
        <!-- global date format override -->
        <!-- defaults to yyyy-MM-dd -->
        <dateFormat>yyyy-MM-dd</dateFormat>
        <!-- global time format override -->
        <!-- defaults to HH:mm:ss -->
        <timeFormat>HH:mm:ss</timeFormat>
        <!-- custom javascript -->
        <scripts>
            <![CDATA[
        $(document).ready(function() {
        });
      ]]>
        </scripts>
        <!-- custom styles -->
        <styles>
            <![CDATA[
      ]]>
        </styles>
    </configuration>
</extentreports>

Step-5:配置系统

config下新建 MySystemInfo类继承 SystemInfo 接口

public class MySystemInfo implements SystemInfo {
    @Override
    public Map<String, String> getSystemInfo() {
        Map<String, String> systemInfo = new HashMap<>();
        systemInfo.put("测试人员", "zuozewei");
        return systemInfo;
    }
}

可用于添加系统信息,例如:db的配置信息,人员信息,环境信息等。根据项目实际情况添加。 

至此,extentreports 美化报告完成。

Step-6:添加测试用例

public class TestMethodsDemo {
    @Test
    public void test1(){
        Assert.assertEquals(1,2);
    }
    @Test
    public void test2(){
        Assert.assertEquals(1,1);
    }
    @Test
    public void test3(){
        Assert.assertEquals("aaa","aaa");
    }
    @Test
    public void logDemo(){
        Reporter.log("这是故意写入的日志");
        throw new RuntimeException("故意运行时异常");
    }
}

Step-7:测试用例suite

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="测试demo" verbose="1" preserve-order="true">
    <parameter name="report.config" value="src/main/resources/report/extent-config.xml"/>
    <parameter name="system.info" value="com.zuozewei.extentreportdemo.config.MySystemInfo"/>
    <test name="测试demo" preserve-order="true">
        <classes>
            <class name="com.zuozewei.extentreportdemo.testCase.TestMethodsDemo"/>
        </classes>
    </test>
    <listeners>
        <listener class-name="com.zuozewei.extentreportdemo.listener.MyExtentTestNgFormatter"/>
    </listeners>
</suite>

测试报告

HTML Resport 示例

走进Java接口测试之测试报告ExtentReport_html_02

Email Report 示例

走进Java接口测试之测试报告ExtentReport_Test_03

工程目录

走进Java接口测试之测试报告ExtentReport_html_04


本文源码:

https://github.com/7DGroup/Java-API-Test-Examples



标签:ExtentReport,Java,测试报告,File,reportPath,report,new,com,public
From: https://blog.51cto.com/u_15181572/6173240

相关文章

  • 走进Java接口测试之流行框架SpringBoot(概念篇)
    引言说起SpringBoot不得不先了解一下Spring这个企业,不仅因为SpringBoot来源于Spring大家族,而是SpringBoot的诞生和Sping框架的发展息息相关。Spring历史2002年正是JavaEE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。一个美国的小伙子Ro......
  • JAVA - 基础篇
    时隔这么久,之前学习JAVA一直没有坚持下来,这次一定要坚持啊。是跟着B站尚硅谷的老师学习的!资料非常齐全,讲得也很认真仔细。这里会记录一些简单的归纳,很全很全的在老师的资料里就有!关注公众号就能领取,尚硅谷教育。前言学习一门计算机语言真的是一件很奇妙的事情,单靠简单的......
  • Java方法
    类,对象,方法 定义方法要加static才能正常引用,详见https://www.bilibili.com/video/BV12J41137hu?p=45&vd_source=7b7ae7eed522b23c0252ec372088c729   Java都是值传递.方法的重载:方法的名字可以相同,参数不相同即可.  可变参数:不定项       ......
  • 走进Java接口测试之读取配置文件
    前言但在大部分用例开发环境下,添加额外配置是无所避免的,比如自定义应用端口号、服务地址、数据库的配置等,都或多或少的需要一些外部的配置项等。在前文中我们有详细介绍在接口测试框架中如何基于SpringBoot快速搭建多环境配置,本文将在原有的基础上介绍集成如何快速读取配置文件的......
  • 性能监控之常见 Java Heap Dump 方法
    一、前言在本文中,我们总结下抓Javadump的几种不同方法。JavaHeapDump是特定时刻JVM内存中所有对象的快照。它们对于解决内存泄漏问题和分析Java应用程序中的内存使用情况非常有用。JavaHeapDump通常以二进制格式的hprof文件存储。我们可以使用jhat或JVisualVM之......
  • 1- Java概述
    1.人机交互1.1什么是cmd?就是在windows操作系统中,利用命令行的方式去操作计算机。我们可以利用cmd命令去操作计算机,比如:打开文件,打开文件夹,创建文件夹等。1.2如何打开CMD窗口?按下快捷键:win+R。此时会出现运行窗口。在运行窗口中输出cmd输出回车。解......
  • 2-Java基础语法
    1.注释注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/_这是多行注释文字这是多行注释文字这是多行注释文字_/注意:多行注释不能嵌套使用。文档注释(暂时用不到):/*_这是多行注释文字这是多行注释文字这是多......
  • java面试题学习记录2
    1.索引的分类 主键索引,联合索引,唯一索引,全文索引,普通索引2.锁的分类 行锁:操作数据库时,锁定整行数据 表锁:操作数据库时,锁定整表数据 乐观锁:多线程情况下,认为其他线程不会去修改的数据,所以不会上锁,但是会在跟新时,判断一下数据有没有被改变,可以用版本号机制 悲......
  • 【过滤器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介过滤器模式(FilterPattern)或标准模式(CriteriaPattern),是一种结构型模式。这种模式允许使用不同的标准条件来过滤一组对象,并通过逻辑运算的方式把各条件连接起来,它结合多个标准来获得单一标准。例子将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤Perso......
  • 走进Java接口测试之从0到1搭建数据驱动框架(需求篇)
    前言一个“好的”数据驱动框架,需要从“时间”、“人力”、“收益”这三个方面出发,做好“取舍”。不能由于被测业务系统发生一些变更,就导致花费了几个小时的脚本无法执行。同时,我们需要看到“收益”,不能为了总想看到100%的成功,而减少必须做的工作,这导致可能都需要进行大量的维护。......