首页 > 解决方案 > 使用 ExtentReport 获取空指针异常

问题描述

我有 3 节课。Test1、Test2 和基类。Test1 和 Test2 扩展基类。当我使用 TestNg xml 执行这两个类时,@BeforeClass 失败并出现空指针异常。正在生成 test1 的报告。也没有范围报告它的工作正常。请帮我

=====================================基类============ ===================

public class Base
{
public ExtentReports reports;
public ExtentTest logger;
  @BeforeClass

  public void startBrowser() 
  {
      String name= LocalDateTime.now().format(DateTimeFormatter.ofPattern("ddMMMYY_HHmmss"));
      logger = reports.createTest("Test1"+name);
      System.out.println("Started Test1");

}

  @BeforeSuite
  public void initialSetup()
  {
      String name= LocalDateTime.now().format(DateTimeFormatter.ofPattern("ddMMMYY_HHmmss"));
      ExtentHtmlReporter extent = new ExtentHtmlReporter(new File("./Reports/"+name+".html"));
      reports = new ExtentReports();
      reports.attachReporter(extent); 
  }

  @AfterClass
  public void end()
  {
      reports.flush();
  }

}

============================Test1类=====================

public class Test1 extends Base{
  @Test
  public void TestCase() 
  {

      logger.info("Test1");
  }
}

====================Test2类============================ =

public class Test2 extends Base{
  @Test
  public void f() 
  {
      System.out.println("Started Test2");
  }
}

标签: javatestng

解决方案


问题在于您的测试代码。reports您已在带@BeforeSuite注释的方法中初始化数据成员。

每个<suite>标签只执行一次。由于您的两个类都是从同一个基类扩展而来,因此该initialSetup()方法将只执行一次(例如,Test1.java)。

这就是为什么当您的带@BeforeClass注释的startBrowser()访问尝试遇到 NullPointerException 时。reports.createTest("Test1"+name);Test2

您需要通过initialSetup()@BeforeClass方法中移动您的调用来改变这一点。


推荐阅读