【发布时间】:2019-03-19 13:03:15
【问题描述】:
我有以下报告代码:
public class Reporting {
private ExtentHtmlReporter extentHtmlReporter;
private static ThreadLocal<ExtentReports> extentReports = new ThreadLocal<>();
private static ThreadLocal<ExtentTest> extentTest = new ThreadLocal<>();
public synchronized ExtentTest createInstanceReport(String testCaseName) {
System.out.println(extentReports.get());
new File(Constants.userDir + "/Reports/").mkdirs();
// To generate report with name
extentHtmlReporter = new ExtentHtmlReporter(
Constants.userDir + "/Reports/" +
"ExecutionReport_" + new SimpleDateFormat(
Constants.date).format(new Date()) + ".html");
// Setting Document Title
extentHtmlReporter.config().setDocumentTitle("Demo");
// Setting Report Name
extentHtmlReporter.config().setReportName("Demo Automation");
// Setting Theme
extentHtmlReporter.config().setTheme(Theme.STANDARD);
// Setting Chart location
extentHtmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
// Setting Chart visibility
extentHtmlReporter.config().setChartVisibilityOnOpen(false);
// Setting Time stamp
extentHtmlReporter.config().setTimeStampFormat("yyyy-MM-dd HH:mm:ss");
// Setting append exist as true
extentHtmlReporter.setAppendExisting(true);
ExtentReports extentReports = new ExtentReports();
extentReports.attachReporter(extentHtmlReporter);
// Setting system info
extentReports.setSystemInfo("Name",
BaseTest.prop.getProperty(Constants.testerName));
extentReports.setSystemInfo("Environment",
BaseTest.prop.getProperty(Constants.environment));
extentReports.setSystemInfo("Browser",
BaseTest.prop.getProperty(Constants.browser));
Reporting.extentReports.set(extentReports); // Instead of using here extentReport thread like this, Can anyone suggest to use it directly
// Add test case name in report
ExtentTest extentTest = Reporting.extentTest.get();
extentTest = Reporting.extentReports.get().createTest(testCaseName);
Reporting.extentTest.set(extentTest);
// Assigning categories
extentTest.assignCategory(MultiFunction.getProp()
.getProperty(Constants.browser));
System.out.println(Reporting.extentReports.get());
System.out.println(Reporting.extentTest.get());
return extentTest;
}
public synchronized ExtentTest getExtentTest() {
return extentTest.get();
}
public synchronized ExtentReports getInstanceReport() {
return extentReports.get();
}
public synchronized void remove() {
extentReports.remove();
extentTest.remove();
}
}
我正在尝试使用 TestNG 进行并行测试(将来必须使用 Selenium 网格和酱汁)。我执行了 2 个测试用例,然后只在报告中添加了一个测试用例结果。
我已经使用线程池隔离了extentTest、extentReporter 和 WebDriver 实例。
使用extentHtmlReporter 实例在下面尝试:
1) Tried to make it static(no luck)
2) Tried to make it local (the same behaviour, getting only 1 test case result)
3) Tried as a non-static global variable ( no luck)
您能建议如何解决上述问题吗?
请注意:只生成一份报告。但是当我尝试在调试模式下运行并行测试用例时,会为这两个测试用例生成报告。我认为是因为一个测试用例克服了它杀死某个实例(在非调试模式下运行时)
另外,我想在我的代码中重新设计以下位置:
对于extentRpeort,我使用的是:
Reporting.extentReports.set(extentReports);
将extentReport 实例添加到我的extentReport 线程。
而不是像这样添加我想直接使用它以减少代码行。
【问题讨论】:
-
是否生成了两个不同的报告?
-
不只有一份报告。但是当我尝试在调试模式下运行并行测试用例时,会为两个测试用例生成报告
-
当你调用方法 createInstanceReport()
-
@PrashantJeetSingh 请在发布之前格式化您的代码!很难阅读。另外,考虑如何为您的问题使用突出显示。它可以帮助人们更快地阅读和理解您的问题。
-
不清楚您是否找到了解决方案,但如果没有,请同时查看:stackoverflow.com/questions/52759135/…。您可能需要稍微修改一下以满足您的需要。
标签: android java selenium selenium-webdriver automation