ATU 报告抛出 NullPointerException

ATU Reports throws NullPointerException

我正在尝试为我的项目使用 ATU 报告。该套件有大约 25 个 @Test 方法。执行完成后得到空指针异常

Exception in thread "main" java.lang.IllegalStateException: java.lang.NullPointe rException at atu.testng.reports.listeners.ATUReportsListener.onFinish(Unknown Sour ce) at org.testng.SuiteRunner.invokeListeners(SuiteRunner.java:204) at org.testng.SuiteRunner.run(SuiteRunner.java:264) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) at org.testng.TestNG.run(TestNG.java:1048) at org.testng.TestNG.privateMain(TestNG.java:1355) at org.testng.TestNG.main(TestNG.java:1324) Caused by: java.lang.NullPointerException at atu.testng.reports.writers.CurrentRunPageWriter.getTestCaseHTMLPath(U nknown Source) at atu.testng.reports.writers.CurrentRunPageWriter.writeFailedData(Unkno wn Source) at atu.testng.reports.writers.CurrentRunPageWriter.content(Unknown Sourc e) at atu.testng.reports.listeners.ATUReportsListener.generateCurrentRunPag e(Unknown Source) ... 10 more

另一个观察是,当@Test 方法在 5 左右时,ATU 报告生成成功。是否是特定的 @Test 方法导致此 NullPointerException?

testng.xml 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test">
  <groups>
  <run>
  <include name="A1" />
  <include name="A2" />
  <include name="B1" />
  </run>
    </groups>
    <classes>
    <class name="com.test.testcases.Class1"/>
      <class name="com.test.testcases.Class2"/>
      <class name="com.test.testcases.Class3"/>
    </classes>
  </test> <!-- Test -->
  <listeners>
  <listener class-name="atu.testng.reports.listeners.ATUReportsListener"></listener>
  <listener class-name="atu.testng.reports.listeners.ConfigurationListener"></listener>
  <listener class-name="atu.testng.reports.listeners.MethodListener"></listener>
  </listeners>
</suite> <!-- Suite -->

此代码中有些内容为空(从 ATU 5.1.1 反编译):

public void onFinish(ISuite paramISuite)
  {
    try
    {
      this.iSuite = paramISuite;
      String str1 = SettingsFile.get("passedList") + this.passedTests.size() + ';';
      String str2 = SettingsFile.get("failedList") + this.failedTests.size() + ';';
      String str3 = SettingsFile.get("skippedList") + this.skippedTests.size() + ';';
      SettingsFile.set("passedList", str1);
      SettingsFile.set("failedList", str2);
      SettingsFile.set("skippedList", str3);
      HTMLDesignFilesJSWriter.lineChartJS(str1, str2, str3, this.runCount);
      HTMLDesignFilesJSWriter.barChartJS(str1, str2, str3, this.runCount);
      HTMLDesignFilesJSWriter.pieChartJS(this.passedTests.size(), this.failedTests.size(), this.skippedTests.size(), this.runCount);
      generateIndexPage();
      paramISuite.setAttribute("endExecution", Long.valueOf(System.currentTimeMillis()));
      long l = ((Long)paramISuite.getAttribute("startExecution")).longValue();
      generateConsolidatedPage();
      generateCurrentRunPage(l, System.currentTimeMillis());
      startReportingForPassed(this.passedTests);
      startReportingForFailed(this.failedTests);
      startReportingForSkipped(this.skippedTests);
      if (Directory.generateExcelReports) {
        ExcelReports.generateExcelReport(Directory.RUNDir + Directory.SEP + "(" + Directory.REPORTSDIRName + ") " + Directory.RUNName + this.runCount + ".xlsx", this.passedTests, this.failedTests, this.skippedTests);
      }
      if (Directory.generateConfigReports) {
        ConfigurationListener.startConfigurationMethodsReporting(this.runCount);
      }
      if (Directory.recordSuiteExecution) {
        try
        {
          this.recorder.stop();
        }
        catch (Throwable localThrowable) {}
      }
    }
    catch (Exception localException)
    {
      throw new IllegalStateException(localException);
    }
  }

我怀疑问题来自 long l = ((Long)paramISuite.getAttribute("startExecution")).longValue();,因为 TestNG 的侦听器存在一些问题。

你应该做的是在你的 IDE 中安装一个 java 反编译器(例如 http://jd.benow.ca/)。然后,在调试模式下,您将能够找到问题的确切位置。

您也应该尝试最新的 TestNG 版本 (6.9.12),它应该可以解决以前的侦听器问题。

在手动调试 运行 class 时,我发现其中一个 class 抛出了空指针异常,因为传递的参数数量不匹配.