ExtentReports: метод detachReporter()
Я использую файл набора с несколькими наборами внутри testng.xml
файл следующим образом:
<suite-files>
<suite-file path="suite1"></suite-file>
<suite-file path="suite2"></suite-file>
</suite-files>
Я инициализирую ExtentReport
в BeforeSuite
,
private static void initializeExtentReport(Configuration config) {
if (extent == null) {
extent = new ExtentReports();
htmlReporter = new ExtentHtmlReporter("reportLocation");
ClassLoader classLoader = ExtentReportService.class.getClassLoader();
File extentConfigFile = new File(classLoader.getResource("extent-config.xml").getFile());
htmlReporter.loadXMLConfig(extentConfigFile);
extent.attachReporter(htmlReporter);
extent.setSystemInfo("Environment", config.getAutomationServer());
}
}
В AfterSuite
, Я звоню flush()
,
Таким образом, в основном проблема заключается в том, что когда предыдущий набор вызывается для второго набора, проверка (extent==null
), ложно. Я также прошел через JavaDocs
за ExtentReports
и я нашел метод detachReporter()
там. Но я не могу получить доступ к моей IDE. Перепробовал много вариантов, но безрезультатно.
РЕДАКТИРОВАТЬ:
Прямо сейчас происходит то, что я использую пользовательские имена для отчетов, чтобы не было двух одинаковых имен отчетов. И когда я использовал одноименное имя, результаты были бы перезаписаны в один и тот же файл для наборов.
1 ответ
Лучший подход здесь - использовать синглтон, например, так:
public class Extent
implements Serializable {
private static final long serialVersionUID = 1L;
private static class ExtentReportsLoader {
private static final ExtentReports INSTANCE = new ExtentReports();
static {
}
}
public static synchronized ExtentReports getInstance() {
return ExtentReportsLoader.INSTANCE;
}
@SuppressWarnings("unused")
private ExtentReports readResolve() {
return ExtentReportsLoader.INSTANCE;
}
}
Использование:
ExtentReports extent = Extent.getInstance();
Итак, ваш код становится:
private static void initializeExtentReport(Configuration config) {
extent = Extent.getInstance();
if (extent.getStartedReporters().isEmpty()) {
htmlReporter = new ExtentHtmlReporter("reportLocation");
ClassLoader classLoader = ExtentReportService.class.getClassLoader();
File extentConfigFile = new File(classLoader.getResource("extent-config.xml").getFile());
htmlReporter.loadXMLConfig(extentConfigFile);
extent.attachReporter(htmlReporter);
extent.setSystemInfo("Environment", config.getAutomationServer());
}
}
Далее я бы порекомендовал избавиться от всех общих переменных для экстента /htmlReporter и напрямую использовать Singleton