ExtentTestNGIReporterレポート

testNG.xmlが待機するように設定しました

 

 レポート\テスト出力パス

代码执行如下:

インポートのjava.io.File;
インポートのjava.util.Calendar;
輸入はjava.util.Comparator。
輸入java.util.Date;
輸入はjava.util.List;
輸入java.util.Map;
輸入java.util.Set;
輸入java.util.TreeSet。
輸入org.testng.IReporter。
輸入org.testng.IResultMap;
輸入org.testng.ISuite。
輸入org.testng.ISuiteResult;
輸入org.testng.ITestContext;
輸入org.testng.ITestResult;
輸入org.testng.Reporter。
輸入org.testng.xml.XmlSuite。
輸入com.aventstack.extentreports.ExtentReports。
輸入com.aventstack.extentreports.ExtentTest;
輸入com.aventstack.extentreports.ResourceCDN;
輸入com.aventstack.extentreports.Status。
輸入com.aventstack.extentreports.model.TestAttribute。
輸入com.aventstack.extentreports.reporter.ExtentHtmlReporter。
輸入com.aventstack.extentreports.reporter.configuration.ChartLocation。
 
パブリッククラスExtentTestNGIReporterListenerはIReporter {実装
    =「テスト出力/」プライベート静的最終的な文字列をOUTPUT_FOLDER。
    プライベート静的最終文字列のFILE_NAME =「report.htmlを」;
    プライベートExtentReports程度;
    @Override
    公共ボイドgenerateReport(一覧<XmlSuite> xmlSuites、リスト<ISuite>スイート、文字列OUTPUTDIRECTORY){
        //给程度初始化、设置初值
        initExtent()。
        ブールcreateSuiteNode =偽;
        IF(suites.size()> 1){
            createSuiteNode = trueに;
        }
        (iSUITEスイート:スイート)用{
            地図<文字列、ISuiteResult> suite.getResultsは=()は、結果、
            いかなるユース・ケース・スイートが存在しない場合、スキップ// 、生成されたレポートではない
            IF(result.size()== 0){
                ;続行
            }
            //スイート下成功、失敗統計、ケースの総数をスキップして
            INT suiteFailSize = 0;
            int型suitePassSize = 0;
            INT = 0 suiteSkipSizeを;
            ExtentTest suiteTest = NULL;
            存在する場合は、試験結果の複数//スイートは、ノードを作成し、クラスとして分類の同じスイートで報告されています。
            IF(createSuiteNode){
                。suiteTest = extent.createTest(suite.getName())assignCategory(suite.getName());
            }
            偽のブール= createSuiteResultNode;
            IF(result.size()> 1){
                createSuiteResultNode = trueに;
            }
            R&LT ISuiteResult(のために:結果.values()){
                ExtentTest resultNode;
                ITestContext r.getTestContextコンテキスト=();
                IF(createSuiteResultNode){
                    場合//作成されていないスイートは、ノードのSuiteResult、またはスイートの子ノードの作成を作成します。
                    IF(suiteTest == NULL){
                        resultNode = extent.createTest(r.getTestContext()のgetName());
                    }他{
                        resultNode = suiteTest.createNode(r.getTestContext()のgetName()。)。
                    }
                }他{
                    resultNode = suiteTest。
                }
                (!resultNode = NULL)であれば{
                    resultNode.getModel()のsetName(suite.getName()+ ":" + r.getTestContext()のgetName()。)。
                    IF(resultNode.getModel()hasCategory()){
                        resultNode.assignCategory(r.getTestContext()のgetName()。)。
                    }他{
                        resultNode.assignCategory(suite.getName()、r.getTestContext()のgetName()。)。
                    }
                    。resultNode.getModel()setStartTime(r.getTestContext()getStartDate()。)。
                    。resultNode.getModel()setEndTime(r.getTestContext()getEndDate()。)。
                    //统计SuiteResult下的数据
                    。INT passSize = r.getTestContext()getPassedTests()サイズ()。
                    。。INT failSize = r.getTestContext()getFailedTests()サイズ()。
                    。。INT skipSize = r.getTestContext()getSkippedTests()サイズ()。
                    suitePassSize + = passSize。
                    suiteFailSize + = failSize。
                    suiteSkipSize + = skipSize。
                    IF(failSize> 0){
                        resultNode.getModel()のsetStatus(Status.FAIL)。
                    }
                    。resultNode.getModel()のsetDescription(String.Formatの( "パス:%S;失敗:%S;スキップ:%S;"、passSize、failSize、skipSize))。
                }
                buildTestNodes(resultNode、context.getFailedTests()、Status.FAIL)。
                buildTestNodes(resultNode、context.getSkippedTests()、Status.SKIP)。
                buildTestNodes(resultNode、context.getPassedTests()、Status.PASS)。
            }
            IF(!suiteTest = NULL){
                。suiteTest.getModel()のsetDescription(String.Formatの( "パス:%S;失敗:%S;スキップ:%S;"、suitePassSize、suiteFailSize、suiteSkipSize))。
                IF(suiteFailSize> 0){
                    suiteTest.getModel()のsetStatus(Status.FAIL)。
                }
            }
 
        }
//ため(文字列S:Reporter.getOutput()){
// extent.setTestRunnerOutput(S);
//}
 
        extent.flush();
// extent.close();
    }
 
    プライベートボイドinitExtent(){
        //フォルダは、次に作成存在しない
        ファイルreportDir =新しい新規ファイル(OUTPUT_FOLDER)を、
        IF(!! reportDir.exists()&& reportDir .isDirectory()){
            reportDir.mkdir();
        }
        ExtentHtmlReporter htmlReporter =新しい新しいExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
        // TODO時間追加
        htmlReporter.config()setDocumentTitle( "胡暁明テストレポートを");
        。htmlReporter.config()setReportName( "胡晓明的测试报告");
        htmlReporter.config()setChartVisibilityOnOpen(真)。
        htmlReporter.config()setTestViewChartLocation(ChartLocation.TOP)。
        // htmlReporter.config()setTheme(Theme.STANDARD)。
        htmlReporter.config()setResourceCDN(ResourceCDN.EXTENTREPORTS)。
        htmlReporter.config()setCSS( "node.level-1のUL {表示:なし;} .node.level-1.active UL {表示:ブロック;}。")。
        エクステント=新しいExtentReports()。
        extent.attachReporter(htmlReporter)。
        extent.setReportUsesManualConfiguration(真の);
        // TODO传入モバイル的信息
        extent.setSystemInfo(、 "UUID" "?");
    }
 
    プライベート無効buildTestNodes(ExtentTest extenttest、IResultMapテスト、ステータスの状態){
       //親ノードが存在する場合、親ノードは、ラベル取得
        のString [] =新しい新しいStringカテゴリ[0];
        IF(!extenttest = NULL){
            一覧<TestAttribute> CategoryList 。= extenttest.getModel()getCategoryContext()のgetAll();.
            ;カテゴリー=新しい新しいString [categoryList.size()]
            のための(INTインデックス= 0、インデックス<categoryList.size();インデックス++){
                カテゴリ[インデックス] = categoryList.get(インデックス).getName();
            }
        }
 
        ExtentTest試験;
 
        IF(tests.size()> 0){
            //調整、実施例で注文時間によってソート
            セット<ITestResult> TreeSetの=新しいTreeSetの (<ITestResult>新しいコンパレータ<ITestResult>(){
                @Override
                公共int型の比較(ITestResult O1、O2 ITestResult){
                    ;: - 。?。1 1 o1.getStartMillis()<o2.getStartMillis()を返す
                }
            });
            treeSet.addAll(tests.getAllResults());
            のため(ITestResultの検索結果を:TreeSetの){
                オブジェクト[] =のresult.getParametersパラメータ();
                文字列の名前は= "";
                //パラメータの場合、パラメータは、のtoStringレポート名の組み合わせの代わりに使用されている
                (オブジェクトPARAM用:パラメータ){
                    名前= PARAMの+。 toString();
                }
                IF(name.length()> 0){
                    IF(name.length()> 50){
                        = name.substring名(0.49)+ "...";
                    }
                }他{
                    名前= result.getMethod()getMethodNameに();.
                }
                (extenttest == NULL){IF
                    テスト= extent.createTest(名) ;
                }他{
                    子ノードとして作成したとき//、親ノードは検索レポートを容易にするために、同じラベルを備えています。
                    = extenttest.createNodeテスト(名).assignCategory(カテゴリ);
                }
                //test.getModel()のsetDescription(description.toString());.
                //テストextent.createTest =(result.getMethod()getMethodNameに())。 ;
                用(文字列グループ:result.getMethod()getGroups()。)
                    test.assignCategory(群)
 
                リストの<string> outputList = Reporter.getOutput(結果)。
                (文字列出力:outputList)用{
                    //将用例的ログ输出报告中
                    test.debug(出力)。
                }
                IF(!result.getThrowable()= NULL){
                    test.log(ステータス、result.getThrowable())。
                }
                他{
                    test.log(ステータス、 "テスト" + status.toString()toLowerCaseメソッド()+ "ED");
                }
 
                test.getModel()setStartTime(getTime(result.getStartMillis()))。
                。test.getModel()setEndTime(getTime(result.getEndMillis()))。
            }
        }
    }
 
    プライベート日getTime(長いミリ秒){
        カレンダーカレンダー= Calendar.getInstance();
        calendar.setTimeInMillis(ミリ秒)。
        calendar.getTimeを返します();
    }
 
}

おすすめ

転載: www.cnblogs.com/hxm154/p/11793059.html