2017-11-29 13 views
1

私は、index.htmlのtestNGレポートにカスタムメッセージを追加する必要があるというシナリオがあります。それを行う方法はありますか?testNGでindex.htmlレポートをオーバーライドする方法

DataProviderのように、index.html testNGレポートに公開したいカスタムアノテーションを作成しました。私はこれまでに以下のコードを試してきました。私はグーグルが、デフォルトのTestNGレポートにテストデータを公開するdataProviderどのようにそのことについてどんな考えを取得していない

 @Retention(RetentionPolicy.RUNTIME) 
    @Target({ ElementType.METHOD }) 
    public @interface Greet { 
     /** 
     * @return - The name of the person to greet. 
     */ 
     String name() default ""; 
    } 

以下のクラスは、注釈を作成します。誰かがデータプロバイダの内部ロジックについて熟知していれば教えてください。これをより良く理解するための文書があれば分かります。

DataProviderのように、index.html testNGレポートに公開したいカスタムアノテーションを作成しました。私はこれまでに以下のコードを試してきました。

以下のクラスが作成されます注釈:

@Retention(RetentionPolicy.RUNTIME) 
@Target({ ElementType.METHOD }) 
public @interface Greet { 
    /** 
    * @return - The name of the person to greet. 
    */ 
    String name() default ""; 

}

ユーザからデータを取得する以下のクラス:

public class TestCase1 { 
    @Test 
    @DataPublish(name="First Test method_1") 
    public static void test1() throws Exception { 
     try { 
      Assert.assertTrue(true); 
      } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
私はTestNGのインデックスにその注釈値を印刷したい

.htmlレポート。

答えて

0

あなたはindex.htmlレポートを変更しようとしていると思います。パネルクラス内のデータはすべてindex.htmlに出力できます。

これを達成するには、3つのファイル(クラス)を変更する必要があります。すべてのクラスはhere

Main.java

TimesPanel.javaです(このクラスは変更したいコンテンツ(パネル)に依存します。目的を説明するために、我々は、レポートの詳細セクションの下倍パネルにコンテンツを追加し、それ故にますTimesPanel.java

BaseMultiSuitePanel.javaは、プロジェクト内のファイルcustomBaseMultiSuitePanel.javaを作成し、元のファイルの内容をコピーし、それに応じて、コンストラクタへの変更を行います。

customTimesPanel.javaを作成し、内容をTimesPanel.javaにコピーし、private String js(ISuite suite)メソッドに変更します。これは、レポートの時間をクリックすると、表示されるテーブルにsuccessPercentageと優先度のテストを追加するためです。

public class customTimesPanel extends customBaseMultiSuitePanel { 

... 
... 

     private String js(ISuite suite) { 
     String functionName = "tableData_" + suiteToTag(suite); 
     StringBuilder result = new StringBuilder(
      "suiteTableInitFunctions.push('" + functionName + "');\n" 
       + "function " + functionName + "() {\n" 
       + "var data = new google.visualization.DataTable();\n" 
       + "data.addColumn('number', 'Number');\n" 
       + "data.addColumn('string', 'Method');\n" 
       + "data.addColumn('string', 'Class');\n" 
       + "data.addColumn('number', 'Time (ms)');\n" 
       + "data.addColumn('string', 'SuccessPercentage');\n" 
       + "data.addColumn('string', 'Priority');\n"); 

     List<ITestResult> allTestResults = getModel().getAllTestResults(suite); 
     result.append(
      "data.addRows(" + allTestResults.size() + ");\n"); 

     Collections.sort(allTestResults, new Comparator<ITestResult>() { 
      @Override 
      public int compare(ITestResult o1, ITestResult o2) { 
      long t1 = o1.getEndMillis() - o1.getStartMillis(); 
      long t2 = o2.getEndMillis() - o2.getStartMillis(); 
      return (int) (t2 - t1); 
      } 
     }); 

     int index = 0; 
     for (ITestResult tr : allTestResults) { 
      ITestNGMethod m = tr.getMethod(); 
      long time = tr.getEndMillis() - tr.getStartMillis(); 
      result 
       .append("data.setCell(" + index + ", " 
        + "0, " + index + ")\n") 
       .append("data.setCell(" + index + ", " 
        + "1, '" + m.getMethodName() + "')\n") 
       .append("data.setCell(" + index + ", " 
        + "2, '" + m.getTestClass().getName() + "')\n") 
       .append("data.setCell(" + index + ", " 
        + "3, " + time + ")\n") 
       .append("data.setCell(" + index + ", " 
        + "4, '" + m.getSuccessPercentage() + "')\n") 
       .append("data.setCell(" + index + ", " 
        + "5, '" + m.getPriority() + "');\n"); 
      Long total = m_totalTime.get(suite.getName()); 
      if (total == null) { 
      total = 0L; 
      } 
      m_totalTime.put(suite.getName(), total + time); 
      index++; 
      ... 
      ... 
     } 

次に、customIndexHtmlReport.javaを作成し、このファイルにcontentof Main.javaをコピーします。、

new customTimesPanel(m_model) 

はまた、最終的にはこの

Utils.writeUtf8File(m_outputDirectory, "customReport-index.html", xsb, all); 

のように、同じファイルでレポート名を変更し、public void generateReport()方法で以下のような古いTimesPanelオブジェクトと新規を削除するあなたのtestng.xml

<listener class-name = "firsttestngpackage.customIndexHtmlReport" /> 
にリスナーを追加

あなたは以下のように、各テストの成功率と優先度を追加してカスタムレポートを取得します

enter image description here

注:

customIndexHtmlReport.javagetClass().getResourceAsStream方法に関連してくださいリソースが正しく、プロジェクトに配置されていることを確認。私はそれに問題があった。

+0

ありがとうございます。それはかなりうまくいく。 – ArrchanaMohan

関連する問題