gpt4 book ai didi

android - 范围报告问题并行测试

转载 作者:行者123 更新时间:2023-11-30 07:44:06 25 4
gpt4 key购买 nike

我有以下报告代码:

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 网格和 sauce)。我执行了 2 个测试用例,然后只有一个测试用例结果被添加到报告中。

我已经使用 threadPool 隔离了 extentTestextentReporterWebDriver 实例。

在下面尝试使用 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)

您能建议如何解决上述问题吗?

请注意:只会生成一份报告。但是当我尝试在 Debug模式下运行并行测试用例时,会为这两个测试用例生成报告。我认为是因为一个测试用例克服了杀死某个实例的问题(在非 Debug模式下运行时)

此外,我想重新设计代码中的以下位置:

对于 extentRpeort,我正在使用:

Reporting.extentReports.set(extentReports);

extentReport 实例添加到我的 extentReport 线程。
我不想像这样添加,而是想直接使用它以减少代码行。

最佳答案

如果我理解正确的话,您必须从所有已执行的 TestNG 案例中生成报告。

但是,从您分享的代码来看,很明显您会遇到一些麻烦。你犯了一些严重的错误,结果是显而易见的:

  • 为了使用 TestNG 生成报告,我建议从 TestNG 监听器 获取有关测试执行的信息。像这样的东西:

    public final class TestNGListener extends TestListenerAdapter implements IInvokedMethodListener, ISuiteListener {

    @Override
    public void onStart(ITestContext context) {
    Logger.info(buildMessage(Logger.PREFIX_TEST_STARTED, context.getName()));
    }

    @Override
    public void onFinish(ITestContext context) {
    Logger.info(buildMessage(Logger.PREFIX_TEST_FINISHED, context.getName()));
    }

    @Override
    public void onTestStart(ITestResult result) {
    Logger.info(buildMessage(Logger.PREFIX_METHOD_STARTED, getMethodName(result)));
    }

    @Override
    public void onTestSuccess(ITestResult result) {
    Logger.info(buildMessage(Logger.PREFIX_METHOD_SUCCESS, getMethodName(result)));
    processTestResult(result);
    }

    @Override
    public void onTestFailure(ITestResult result) {
    Logger.info(buildMessage(Logger.PREFIX_METHOD_FAILED, getMethodName(result)));
    }
  • 您不能用一种方法完成所有事情!你坏了Single Responsibility Principle .您的 createInstanceReport() 正在一个地方完成所有工作(设置报告详细信息、设置系统信息、将已执行的测试用例附加到报告)。您必须将此逻辑重新设计为一些逻辑上的单独操作。使用下一行重新设计问题后:

Reporting.extentReports.set(extentReports)

可以成功消失。

  • 您必须考虑一个案例,为什么您需要使用 Extent,Reports Version 3TestNG 有开箱即用的测试报告。他们很穷,但开箱即用。如果你只想稍微改进一下,你可以使用 ReportNG通过 TestNG。

配置非常简单:Configuring ReportNG with TestNG for HTML Reports .

它没有维护,但它使 TestNG 报告真正引人注目且易于理解。

无论如何,我的建议是使用 TestNGListener 获取有关测试用例执行的信息。并阅读有关良好编程实践的更多信息。

关于android - 范围报告问题并行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52811017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com