You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG+Extent Report+Selenium POM环境下出现空指针异常

空指针异常解决方案

问题根源

触发NullPointerException的核心原因是类中声明的ExtentTest test变量从未被初始化,在@AfterMethod方法中调用test.log()时,test对象仍为null,导致无法执行日志记录操作。

修复方案

需要为每个测试方法创建对应的ExtentTest实例,推荐在@BeforeMethod中完成初始化,确保每个测试方法执行前都能生成对应的日志追踪对象,避免重复代码。

关键代码调整

  1. 更新@BeforeMethod方法,添加Method参数并初始化test对象:
@BeforeMethod
public void start_method(Method method)
{
    // 以当前测试方法名创建ExtentTest实例
    test = extent.createTest(method.getName());
}

注意需要导入java.lang.reflect.Method类。

2.(可选)也可以在每个@Test方法内部单独初始化test(不推荐,会产生重复代码):

@Test (priority = 0)
public void uTest_google()
{
    test = extent.createTest("uTest_google"); // 初始化当前测试方法的日志对象
    Google_Search_Page ob1=new Google_Search_Page(driver);
    ob1.google_search("uTest");
    ob1.clickutest();
}

完整修改后的uTest_Method.java代码

package testCases;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.time.Duration;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.Theme;

import pageObjects.Google_Search_Page;
import pageObjects.uTest_Home_Page;

public class uTest_Method {

    WebDriver driver;
    String base_url = "https://www.google.com";
    ExtentHtmlReporter reporter;        
    ExtentReports extent;               
    ExtentTest test;                    
    
    @BeforeTest
    public void launch_test()
    {
        reporter=new ExtentHtmlReporter("./uTest_Report/report1.html");
        reporter.config().setDocumentTitle("uTest_Automation_Report");
        reporter.config().setReportName("Functional_Test");
        reporter.config().setTheme(Theme.DARK);
        
        extent =new ExtentReports();
        extent.attachReporter(reporter);
        extent.setSystemInfo("Host_Name", "localhost");
        extent.setSystemInfo("OS", "Windows10"); // 修正原拼写错误
        extent.setSystemInfo("Tester_Name", "PRAJIN");
        extent.setSystemInfo("Browser_Name", "Chrome");
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.get(base_url);
    }
    
    @BeforeMethod
    public void start_method(Method method)
    {
        // 为每个测试方法创建专属的日志追踪对象
        test = extent.createTest(method.getName());
    }
    
    @Test (priority = 0)
    public void uTest_google()
    {
        Google_Search_Page ob1=new Google_Search_Page(driver);
        ob1.google_search("uTest");
        ob1.clickutest();
    }
    
    @Test (priority = 1)
    public void uTest_Home()
    {
        uTest_Home_Page ob1=new uTest_Home_Page(driver);
        ob1.click_become_a_tester();
    }
    
    @AfterMethod
    public void exit_method(ITestResult result) throws IOException  
    {
        if(result.getStatus()==ITestResult.FAILURE)
        {
            test.log(Status.FAIL, "TestCase Failed: "+result.getName());
            test.log(Status.FAIL, "Failure Reason: "+result.getThrowable());
   
        }
        else if(result.getStatus()==ITestResult.SKIP)
        {
            test.log(Status.SKIP, "TestCase Skipped: "+result.getName());
        }
        else if(result.getStatus()==ITestResult.SUCCESS)
        {
            test.log(Status.PASS, "TestCase Passed: "+result.getName());
        }
    }
    
    @AfterTest
    public void exit_test()
    {
        extent.flush();
        driver.quit(); // 开启该行,避免浏览器进程残留
    }

}

额外优化说明

  • 修正了原代码中Windws10的拼写错误,改为Windows10
  • 调整了@AfterMethod中的成功日志内容,改为记录测试方法名,更符合日志追踪逻辑
  • 建议开启driver.quit(),避免测试完成后浏览器进程残留占用资源

内容的提问来源于stack exchange,提问作者Prajin T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:52:37