2017-11-29 4 views
1

Ich habe ein Szenario, wo ich einige benutzerdefinierte Nachrichten in index.html testNG Bericht hinzufügen muss. Gibt es eine Möglichkeit, das zu tun?Wie überschreibt man den index.html-Bericht in testNG

Ich habe gerade eine benutzerdefinierte Annotation erstellt, die ich in index.html testNG Bericht wie DataProvider veröffentlichen wollte. Ich habe bisher den untenstehenden Code ausprobiert.

Das wird im folgenden Klasse Anmerkung erstellen:

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

bekomme ich nur googeln, aber hatte keine Ahnung, dass, wie die Testdaten in Standard TestNG Bericht Dataprovider zu veröffentlichen. Wenn jemand Experte über die interne Logik des Datenproviders ist, lass es mich wissen. Es wäre zu begrüßen, wenn es irgendein Dokument gibt, um das besser zu verstehen.

Ich habe gerade eine benutzerdefinierte Annotation erstellt, die ich in index.html testNG Bericht wie DataProvider veröffentlichen wollte. Ich habe bisher den untenstehenden Code ausprobiert.

Die folgende Klasse erstellen Anmerkung:

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

}

Die folgende Klasse wird die Daten von Benutzern erhalten:

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(); 
     } 
    } 

Ich mag würde, dass Annotation Wert in testng Index drucken .html Bericht.

Antwort

0

Ich denke, Sie versuchen, index.html Bericht zu ändern. Sie können beliebige Daten in den Panel-Klassen haben und sie in index.html ausdrucken.

Um dies zu erreichen, müssen Sie drei Dateien (Klassen) ändern. Alle Klassen sind here

Main.java

TimesPanel.java (diese Klasse auf den Inhalt abhängen (Panel), die Sie zu ändern. Für Zwecke zu erklären, wir Inhalte mal Panel unter info Abschnitt Bericht hinzufügen und somit TimesPanel.java

)

und BaseMultiSuitePanel.java

eine Datei customBaseMultiSuitePanel.java in Ihrem Projekt erstellen, den Inhalt der Originaldatei kopieren und entsprechend ändern zu Konstruktor machen.

erstellen customTimesPanel.java und kopieren Sie den Inhalt von TimesPanel.java und Änderungen an private String js(ISuite suite) Verfahren machen, wie wir successPercentage und die Priorität der Tests an den Tisch gehen, um hinzuzufügen, die aufkommt, wenn Sie mal in Bericht klicken.

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++; 
      ... 
      ... 
     } 

Als Nächstes erstellen customIndexHtmlReport.java und die contentof Main.java in dieser Datei kopieren.Entfernen Sie die alte TimesPanel Objekt und das neue wie unten in public void generateReport() Methode

new customTimesPanel(m_model) 

auch den Namen des Berichts wie diese

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

in der gleichen Datei ändern Und schließlich, fügen Zuhörer zu Ihrem testng.xml

<listener class-name = "firsttestngpackage.customIndexHtmlReport" /> 

dann erhalten Sie Ihren benutzerdefinierten Bericht wie unten mit zusätzlichen successPercentage und Priorität für jeden Test

enter image description here

Hinweis:

stellen Sie sicher, getClass().getResourceAsStream Methode sind Ressourcen in customIndexHtmlReport.java richtig in Ihrem Projekt gelegt. Ich hatte Probleme damit.

+0

Danke dir. Es funktioniert ziemlich gut. – ArrchanaMohan

Verwandte Themen