2017-04-17 5 views
0

Ich möchte eine Feature-Datei in drei verschiedenen Browsern parallel ausführen. Wie kann ich drei verschiedene Instanzen von Webdriver erstellen? und bitte hinzufügen Wie geht das Gleiche für zwei verschiedene Feature-Dateien?Cross-Browser-Test in Gurke

P.S. Ich arbeite an Gurken mit Java.

+0

Verwenden Sie Testng oder Junit? – Grasshopper

+0

Ich benutze Junit. –

Antwort

0

Wenn Sie „drei verschiedene Browser parallel“ erwähnen meinen Sie wie Chrome, Firefox und nur parallel OR drei verschiedene Instanzen von Chrome läuft Explorer.

Wenn es der zweite Fall ist, finden Sie in diesem Artikel - https://opencredo.com/running-cucumber-jvm-tests-in-parallel/. Die grundlegende Logik dahinter besteht darin, in separate JVMs für die Anzahl der erforderlichen parallelen Instanzen zu verzweigen. Dies geschieht mit Maven Surefire Plugin.

Wenn die ersten Fall dann müssen Sie bestimmte Aspekte ändern. Das Plugin übergibt die 'Gabelnummer' an die JVM, mit der Sie den spezifischen Browser-Treiber für diese JVM instanziieren können.

ich Java 8, junit 4.12, picocontainer for Dependency Injection, Maven 3 bin mit (wird nicht mit niedrigeren Versionen arbeiten als ‚Gabel Nummer‘ geht null), selenium 2.53 (u müssen für Änderungen am Code, um herauszufinden, Selen 3, wenn in Treiber-Erstellung) und Browser Chrome and Firefox (Sie müssen hinzufügen Code für IE).

-Code

  1. Änderungen ShareDriver.java von Artikel Github - mit diesem den statischen Block überschreiben und andere Methoden hinzufügen.
static { 
     instantiateDriver();   
     Runtime.getRuntime().addShutdownHook(CLOSE_THREAD); 
} 

private static void instantiateDriver() { 

     //numFork will be passed in the maven command line or eclipse 
     //--- clean install -DnumFork=${surefire.forkNumber} 
     int browserType = Integer.parseInt(System.getProperty("numFork")); 

     System.out.println("BROWSER TYPE "+browserType); 

     if(browserType == 1) 
      instantiateChromeDriver(); 

     else if (browserType == 2) 
      instantiateFirefoxDriver(); 

     else if (browserType == 3) {  
      instantiateIEDriver(); 
     }  

    } 

    private static void instantiateIEDriver() { 
     //Implement this 
    } 

    private static void instantiateFirefoxDriver() { 

     REAL_DRIVER = new FirefoxDriver(); 
     REAL_DRIVER.manage().window().maximize(); 
    } 

    private static void instantiateChromeDriver() { 

     System.setProperty("webdriver.chrome.driver", "location of chromedriver.exe"); 
     ChromeOptions chop = new ChromeOptions(); 
     chop.addArguments("test-type"); 
     chop.addArguments("start-maximized"); 
     chop.addArguments("--disable-extensions"); 

     REAL_DRIVER = new ChromeDriver(chop); 
    } 
  1. Änderungen an feature files - die Tags entfernen. Ändern Sie eine der Feature-Dateien so, dass sie weitere Schritte enthalten. Codieren Sie die neuen Schritte in der Step-Definition-Klasse.

  2. Änderungen an runner classes - Entfernen Sie die Tag-Option aus Gurke Optionen, müssen Sie möglicherweise Kleber Option auf Ihre Schrittdefinitionsklasse zeigen. So effektiv sind beide Läufer Klassen gleich. Sie können eine der Runner-Klassen entfernen, wenn Sie möchten. Andere Tests werden in jedem Browser zweimal wiederholt.

  3. pom.xml - Achten Sie darauf, dass die Anzahl der Gabeln definiert (<surefire.fork.count>5</surefire.fork.count>) mehr als die Anzahl der Browser ist Sie verwenden. Sonst wird die Logik fehlschlagen.

Laufen in Maven - Sie sind von Eclipse mit dem Befehl Plugin ausführen können clean install -DnumFork=${surefire.forkNumber} in Ziele Option. Oder über die Befehlszeile mit mvn clean install -DnumFork=${surefire.forkNumber}.

Dies sollte führen alle Szenarien in allen Feature-Dateien in allen Browser-Instanzen. Sie können die Guruoptionen wie Tags und Features verfeinern, um bestimmte Szenarien oder Feature-Dateien auszuführen.

+0

Ich meinte den ersten Fall. –

0

Ich würde wählen, um den Build dreimal auszuführen. Ich würde für jede Ausführung eine Umgebungsvariable festlegen, die entscheidet, welcher Browser verwendet wird.

Um sie parallel auszuführen, würde ich ein Shell-Skript schreiben, das die Umgebungsvariable setzt und drei Ausführungen startet.