it-swarm.com.de

Der Versuch, mit Selenium parallel zu automatisieren, aber mehrere Web-Treiber-Instanzen flippen aus

Ich versuche also, ein Java-Programm zu erstellen, das Selenium verwendet, um einen WebDriver zu automatisieren, um Aufgaben auf einer Website auszuführen. Im Moment verwende ich es für die Arbeit, um eine lästige Aufgabe zu automatisieren, bei der der Benutzer Dateien in unsere Datenbank hochladen muss. Ich habe bereits erfolgreich ein Programm erstellt, das dies automatisiert und mir stundenlange manuelle Arbeit erspart hat.

Jetzt versuche ich, dass das Programm mehrere Browser in parallel ausführt. Ich möchte dies tun, um die Geschwindigkeit, mit der ich Dateien hochladen kann, zu beschleunigen, da meistens das Warten auf das Laden von Seiten verloren geht.

Ich habe dies mit einer viel einfacheren Version meines Programms getestet und es geschafft, einfache Aufgaben um das 2-10-fache zu beschleunigen, indem Dutzende bis Hunderte Threads mit ihren eigenen WebDrivers geöffnet werden. 

Das Problem ist, wenn ich mehr als 1 WebDriver laufe, fängt das Ganze manchmal an, zufällig auszuflippen, und manchmal funktioniert es überhaupt nicht. Ich habe versucht, 'PhantomJSDriver' zusammen mit dem neuesten 'PhantomJS.exe' zu verwenden, aber manchmal würde es funktionieren, und meistens würde es nichts tun. Das gleiche Programm, das fehlerfrei mit einem Treiber läuft, bricht zusammen, wenn sie parallel ausgeführt werden.

Ich habe versucht, Gründe zu finden, warum dies geschieht und wie man es umgehen kann, aber ich habe nichts Bestimmtes gefunden, das ich verwenden kann.

Wie kann ich möglichst parallel zum Selenium das Web-Browsing automatisieren, und wenn nicht, wo sollte ich danach suchen?

16
user2473153

Das brauchen Sie, es heißt "Selenium Grid"

http://Selenium-grid.seleniumhq.org/

4
LINGS

Tatsächlich können Sie mit Grid die Tests parallel automatisieren, indem Sie dieselbe Maschine oder mehrere Maschinen (hier Maschinen im Sinne einzelner Computer) verwenden.

Ich hoffe, dieser Link wird Ihnen zeigen, wie Sie Tests auf derselben Maschine parallel ausführen können .

In dem oben angegebenen Link sagte der Benutzer, fünf verschiedene Programme zu erstellen, die parallel laufen. Wenn Sie ein einzelnes Programm parallel ausführen möchten, verwenden Sie einfach TestNg or Junit, um mehrere Instanzen auszulösen.

Dies ist das Beispiel TestNg config code, um einen Test parallel auszuführen. Hier habe ich zwei Threads ausgeführt. Es wird also die TestNg @Test-Methode einer bestimmten Klassendatei com.test.workflow.device.testcase20 in zwei Threads aufgerufen. 

  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite1"  parallel="test" thread-count="2">
   <test name="Testcase20" >
    <classes>
        <class name="com.test.workflow.device.testcase20"/>
    </classes>
  </test>
 </suite>

Durch Verwendung der obigen XML-Datei können Sie die Parallelität im Web-Treiber mithilfe des Rasters erzielen.

2
Manigandan

wenn Sie einen Web-Treiber verwenden, versuchen Sie das maven-surefire-plugin:

<plugins>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <forkCount>4</forkCount>
        </configuration>
    </plugin>
</plugins>

verwenden Sie im Code die Option 'forkCount' - Wert 4 - Anzahl der Prozessoren. 4 Prozessoren = 4 JVM. Sie können den Web-Treiber für jede JVM starten! Link-Info http://maven.Apache.org/surefire/maven-surefire-plugin/test-mojo.html

0
gest

Es ist möglich, Selenium-Instanzen gleichzeitig auszuführen. Wenn Selenium Browserinstanzen ausführt, wird die Verbindung standardmäßig an Port 7055 geöffnet.

Wenn Sie also mehrere Instanzen ausführen möchten, müssen Sie sie an verschiedenen Ports ausführen.

0
ajahongir

Du könntest es mit Sahi http://sahi.co.in/ versuchen. Es können mehrere Instanzen von Browsern parallel ausgeführt werden. 

Schauen Sie sich doch an, wie Sahi Dateien hochladen kann. http://sahi.co.in/w/_setFile

0
Narayan Raman

Ich würde vorschlagen, dass Sie einen Treiber für jeden Browser erstellen und Ihren Code wissen lassen, dass Sie mehr als mehrere Treiber verwenden. Wie bereits oben beschrieben, ist der Einsatz von Selenium Grid die beste verfügbare Lösung: https://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriverhttps://github.com/SeleniumHQ/Selenium/wiki/Grid2

0
Eyal Sooliman