2017-06-15 2 views
0

Ich habe eine einfache Testsuite (Sehr einfach für dieses Beispiel). Ich benutze die @Factory-Notation über den Konstruktor und einen @DataProvider, der ein Objekt [] [] von Städten (bis zu 100) zurückgibt, an denen ich meine Tests durchführe. In diesem Beispiel gibt es 3 @ Test-Methoden. Wenn ich die Testnamen nicht mit dem Städtenamen anhefte, würde ich einen HTML-Bericht haben, der einfach 3 Testmethoden aufführt, ohne sie zu unterscheiden.Erstellen von benutzerdefinierten Methodennamen zum Testen von HTML-Berichten

Ich habe dieses SO Beispiel versucht: Here.

Meine Testklasse funktioniert perfekt. Das Problem, das ich habe, ist, dass, wenn ich den ITest getMethodName() überschreibe, ich unerwartete Ausgabe bekomme.

Mein Code:

@Test(sequential = true) 
public class ParcelSearchPage implements ITest{ 

    private String cityClassName; 
    private String cityName; 
    private mTestCaseName = ""; 

    @Factory(dataProvider="getCities") 
    public ParcelSearchPage(String className , String cityName){ 

     this.cityClassName = className; 
     this.cityName = cityName; 

    } 

    @DataProvider 
    public Object[][] getCities(){ 

     return new Object[][]FromAnotherMethod(); 

    } 

    @Override //from ITest 
    public String getTestName() { 
     return this.mTestCaseName; 
    } 

    @BeforeMethod(alwaysRun = true) 
    public void testData(Method method) { 

    this.mTestCaseName = String.format("%s : %s" , this.cityClassName, method.getName()); 
} 

    @BeforeClass(alwaysRun = true) 
    public void startup(){ 

     // init stuff 
    } 

    @Test 
    public void test1(){ 

    } 

    @Test 
    public void test2{ 


    } 

    @Test 
    public void test3{ 

    } 

} 

Ich hoffe, dass dies detailliert genug ist das Beispiel zu vermitteln.

Ausgang:

Mit cityClassNames Albany, Astoria, Bend-

der HTML-Bericht öffnen würde ich eine Liste erwarten wie folgt:

Albany: test1

Albany: test2

Albany: test3

Astoria: test1

Astoria: test2

Astoria: test3

Bend test1

Bend test2

Bend test3

Ich bin gezwungen group_by_instance in der Prüfung.xml

Was ich in der HTML-Bericht sehe, ist dies:

Albany: test1 (Albany: test3)

Albany: test2 (Albany: test3)

Albany: test3 (Albany: test3)

Astoria: test1 (Astoria: test3)

Astoria: test2 (Astoria: test3)

Astoria: test3 (Astoria: test3)

Bend Test1 (Bend test3)

Bend Test2 (Bend test3)

Bend test3 (Bend test3)

ich habe andere Post gesichtet, wo Leute ähnliche Probleme gehabt haben (auch die Post habe ich vor der Hand erwähnt)

I trie auch d dies kurz in einer @ AfterClass-Methode. Die Ausgabe war immer noch problematisch.

Ich verstehe nicht, wie dies zu korrigieren. Ich habe die Zeichenfolge getestet und das Problem tritt in der getTestName() -Methode auf. Selbst wenn ich etwas Einfaches wie 'Hallo' übergebe, wird der Bericht Hallo (Hallo) anzeigen.

Ich denke, vielleicht könnte es ein Fehler in dem TestNG Java-Code sein.

Alle Lösungen oder Beratung sehr geschätzt.

Antwort

0

Ich kam mit einem Hack, der ziemlich gut funktioniert, wenn die @ Test-Methoden keine Argumente haben.

Ich habe einen zweiten Datenprovider erstellt, der einfach ein Objekt [] des aktuellen Stadtnamens zurückgibt. Dann habe ich in der Testmethode nur einen String-Parameter für den Städtenamen erstellt und listet den neuen Datenanbieter in der @Test-Notation auf. Ich entfernte die ITest Schnittstelle ganz

So ist der Ausgang jetzt:

test1 (Albany)

test2 (Albany)

test3 (Albany)

test1 (Astoria)

test2 (Astoria)

usw., usw.

Es ist nicht perfekt, aber es funktioniert gut für meine Bedürfnisse.

+0

Können Sie ein Problem auf https://github.com/cbeust/testng/issues mit einem Beispiel öffnen, mit dem wir das ITest-Problem reproduzieren und beheben können? – juherr

+0

Sicher kann ich das tun – Miek

Verwandte Themen