2016-06-23 10 views
0

ich eine Testklasse haben testng verwenden, mit 4 Prüfverfahren, Prüfung einer Website für 4 verschiedenen Browsern, wie dem folgenden Code:Stabilisierende Prüfverfahren in einer Testklasse

public class MyTest { 
    @Test 
    public void acceptanceFFTest() 
    { 
    } 
    @Test 
    public void acceptanceChromeTest() 
    { 
    } 
    @Test 
    public void acceptanceIETest() 
    { 
    } 
    @Test 
    public void acceptanceSafariTest() 
    { 
    } 
    @AfterMethod 
    public void tearDown() 
    { 
     webDriver.quit(); 
    } 
} 

Nach einem Testverfahren beendet die Der Webdriver für diesen Browser wird in @AfterMethod gelöscht, der nächste Browser startet mit dem neuen Webdriver und so weiter.

Mein Problem ist: Wenn ich diese Testmethoden einzeln ausführen, werden sie immer bestanden. Aber wenn ich von der Testklassenstufe als Testsuite mit 4 Testmethoden komme, dann sind manchmal ein oder zwei von ihnen mit NoElementException gescheitert, aber die Ausnahme ist nicht immer auf einer Seite oder einem Element, manchmal hier, manchmal dort. Wenn ich die fehlgeschlagenen Tests erneut alleine ausführe, werden sie bestanden.

Ich denke für die Testklasse Ebene, vielleicht ist das HTTP-Signal manchmal schnell und manchmal ist langsam, die Test-Klasse ist nicht stabil als einzelne Testmethode, ich bin mir nicht sicher.

Gibt es trotzdem eine Stabilisierung? Vielen Dank.

+0

Wie wird die Ausnahme ausgelöst, wenn sie fehlschlägt? Außerdem ist es schwer zu sagen, warum, wenn Sie die Tests nicht teilen. – RemcoW

+0

@RemcoW: Es ist NoElement Ausnahme. Aber es ist nicht immer eine Seite oder ein Element, manchmal hier, manchmal dort. Und wie gesagt, wenn ich gescheiterte Tests wieder alleine mache, sind sie bestanden. Also kann ich nicht wirklich an etwas denken, um sie zu stabilisieren. – Ragnarsson

+0

Sie müssen mehr Code bereitstellen. Ihr Entwurf ist gut und sollte funktionieren, aber ich denke, das Problem ist Ihre Implementierung. – kotoj

Antwort

1

Ich würde die Tests neu schreiben, so dass Sie einen einzigen Test haben, der auf allen Browsern läuft. Sie könnten einige kleine Unterschiede im Browser haben, mit denen Sie vielleicht umgehen müssen, aber ich denke, dass dieser Gesamtansatz viel besser und überschaubarer ist. Hier ist ein einfaches Beispiel dafür. Für dieses Beispiel habe ich nur eine Zeichenfolge fest codiert. Ich nehme an, du würdest das hier weitergeben oder es aus einer Datei lesen oder was auch immer. Die Grundidee ist, dass Sie Ihre driver Variable als generische WebDriver definieren. Sobald Sie den gewünschten Browser für diesen Lauf festgelegt haben, instanziieren Sie den spezifischen Treiber und führen den Test aus.

String browserType = "firefox"; // hardcoded for the example 
WebDriver driver; 

switch (browserType) 
{ 
    case "firefox": 
     driver = new FirefoxDriver(); 
     break; 
    case "ie": 
     driver = new InternetExplorerDriver(); 
     break; 
    case "chrome": 
     driver = new ChromeDriver(); 
     break; 
    default: 
     throw new Exception("browserType: " + browserType + " not defined."); 
} 

// do test case 
driver.get("http://www.google.com"); 
// ... and so on 
+0

Danke. Basierend auf Ihrer Idee übergebe ich den 'browser' von' testng.xml', und ich schreibe den Schalter in 'BeforeMethod', also habe ich jetzt einen einzigen Test, der auf allen Browsern läuft. Danke noch einmal. – Ragnarsson

Verwandte Themen