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/
添加回答
舉報