3 回答
TA贡献1803条经验 获得超6个赞
如果我理解正确,您必须从所有执行的TestNG案例中生成报告。
但是,从您共享的代码中,很明显您会遇到一些麻烦。你犯了一些严重的错误,结果很明显:
为了使用TestNG生成报告,我建议从TestNG listener获取有关测试执行的信息。就像是:
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)));
}
你不能用一种方法做所有的事情!你违反了单一职责原则。您createInstanceReport()正在一个地方完成所有工作(设置报告详细信息、设置系统信息、将执行的测试用例附加到报告)。您必须将此逻辑重新设计为一些逻辑分离的操作。用下一行重新设计你的问题后:
Reporting.extentReports.set(extentReports)
可以成功消失。
您必须考虑一个案例,为什么您需要完全使用Extent, Reports Version 3. TestNG有开箱即用的测试报告。它们很差,但它们是开箱即用的。如果您只想稍微改进它,您可以使用ReportNG 而不是 TestNG。
配置起来非常简单:使用 TestNG 为 HTML 报告配置 ReportNG。
它没有得到维护,但它使 TestNG 报告真正引人注目且易于理解。
无论如何,我的建议是TestNGListener用于获取有关测试用例执行的信息。并阅读更多关于良好编程实践的信息。
TA贡献1844条经验 获得超8个赞
使用 TestNG/jUnit(或您正在使用的其他运行器框架)侦听器,这是一个很好的示例。不要把所有东西都放在一个类中。
https://www.swtestacademy.com/extent-reports-version-3-reporting-testng/
添加回答
举报