亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

范圍報告問題 并行測試

范圍報告問題 并行測試

慕絲7291255 2021-11-17 17:27:12
我有以下報告代碼: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我正在嘗試使用 TestNG 進行并行測試(并且將來必須使用 Selenium 網格和醬汁)。我執行了 2 個測試用例,然后在報告中只添加了一個測試用例結果。我已經使用 threadPool隔離了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線程。而不是像這樣添加我想直接使用它以減少代碼行。
查看完整描述

3 回答

?
慕碼人8056858

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用于獲取有關測試用例執行的信息。并閱讀更多關于良好編程實踐的信息。


查看完整回答
反對 回復 2021-11-17
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

使用 TestNG/jUnit(或您正在使用的其他運行器框架)偵聽器,這是一個很好的示例。不要把所有東西都放在一個類中。

https://www.swtestacademy.com/extent-reports-version-3-reporting-testng/


查看完整回答
反對 回復 2021-11-17
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

問題在于刷新范圍報告實例。我使用 ThreadLocal 來存儲范圍報告實例并且正在刷新錯誤的實例。


查看完整回答
反對 回復 2021-11-17
  • 3 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號