我正在尝试将ATU Reports用于我的项目。该套件约有25种@Test方法。执行完成后,获得空指针异常。
线程“main”中的异常java.lang.IllegalStateException: java.lang.NullPointe rException atu.testng.reports.listeners.ATUReportsListener.onFinish(Unknown Sour) CE) 在org.testng.SuiteRunner.invokeListeners(SuiteRunner.java:204) 在org.testng.SuiteRunner.run(SuiteRunner.java:264) 在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 在org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 在org.testng.TestNG.run(TestNG.java:1048) 在org.testng.TestNG.privateMain(TestNG.java:1355) at org.testng.TestNG.main(TestNG.java:1324)引起:java.lang.NullPointerException 在atu.testng.reports.writers.CurrentRunPageWriter.getTestCaseHTMLPath(U 知名来源) 在atu.testng.reports.writers.CurrentRunPageWriter.writeFailedData(Unkno) wn来源) atu.testng.reports.writers.CurrentRunPageWriter.content(Unknown Sourc) E) 在atu.testng.reports.listeners.ATUReportsListener.generateCurrentRunPag e(未知来源) ......还有10个
另一个观察结果是,当@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 -->
答案 0 :(得分:0)
此代码中的某些内容为空(从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),它应该可以修复以前的监听器问题。
答案 1 :(得分:0)
手动调试并单独运行类时,我发现其中一个类抛出了一个nullpointer异常,因为传递的参数数量不匹配。