Zuletzt aktualisiert am 18 — Continuous Testing Experten
Continuous Testing

Selenium ist ein großartiges Tool zur Automatisierung Ihrer Webbrowser-Aktionen. Seine Anwendung ist jedoch nicht auf die lokale Anwendung beschränkt. Stellen Sie sich vor, wir müssen unsere Tests auf mehreren Computern gleichzeitig oder auf verschiedenen Systemkonfigurationen, in verschiedenen Browsern usw. ausführen. Wir können uns eine Möglichkeit vorstellen, den synchronen Start lokaler Instanzen zu automatisieren, aber Selenium hat für diesen Fall eine gute vorgefertigte Lösung – Selen-Gitter.

 

Selengitter Schritt für Schritt

1) Download Selenium Standalone-Server. Zum Zeitpunkt des Schreibens ist die aktuelle Version 3.141, die wir verwenden werden. Diese Datei kann sowohl vom Client als auch vom Server verwendet werden und sollte daher auf allen Computern abgelegt werden, die Sie verwenden möchten.

2) Führen Sie den Selenium-Hub mit der folgenden Befehlszeile aus:

java -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role hub -port 3333

 

Tipps:

a) Hier ist der Schlüssel „-port“ optional. Wenn Sie ihn nicht verwenden, wird der Standardport 4444 verwendet. Wenn dieser jedoch ausgelastet ist, können Sie einen beliebigen freien Port verwenden.

b) Bei Verwendung in einem realen Projekt müssen Sie den Start mehr als einmal durchführen. Daher ist es sinnvoll, diesen Schritt sofort zu vereinfachen und zu automatisieren. Der einfachste Weg ist die Verwendung der bat/sh-Datei.

Beim Start sehen Sie Folgendes:

Befehlszeile

Nach dem Start des Hubs erhalten Sie Anweisungen zur Registrierung und Verbindung der Knoten (Clients-Slaves).

http://localhost:3333 (Sie können Ihre IP-Adresse anstelle von „localhost“ und den Port anstelle von 3333 verwenden) in Ihrem Webbrowser, um den Status unseres verteilten Systems zu überprüfen.

trösten

Wie Sie im obigen Screenshot sehen können, funktioniert die Grid-Konsole an der angegebenen Adresse. Es ist leer, bis wir keinen Sklaven registrieren.

3) Jetzt müssen wir die Selenium-Knoten starten. Angenommen, wir planen, zwei Instanzen auszuführen, eine auf dem lokalen Computer (wo sich der Hub befindet) und eine andere auf dem Remote-Computer. Verwenden Sie dazu auf jeder Maschine den folgenden Befehl:

java -Dwebdriver.chrome.driver=F:chromedriver.exe -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role node -hub http://172.17.10.182:3333/grid/register -browser browserName =“chrome“,version=ANY,platform=WINDOWS,maxInstances=5

Befehlszeile

Tipps:

a) Hier gibt der Parameter -Dwebdriver.chrome.driver=F:chromedriver.exe an, dass diese Clientinstanz einen Chrome-Treiber verwenden wird und sich die Datei chromedriver.exe im Stammverzeichnis der Festplatte F befindet.

b) Der Knotenparameter -role bedeutet, dass wir die Instanz als Knoten ausführen.

c) -Hub http://172.17.10.182:3333/gloswerden/registrieren Parameter ist der Pfad, in dem sich unser Hub befindet (er kann an der Hub-Konsole erkannt werden).

d) -browser browserName=“chrome“,version=ANY,platform=WINDOWS,maxInstances=5 Dieser Teil definiert die Browser-Startoptionen.

e) Wir können den Schlüssel -port hinzufügen, aber wenn Sie ihn nicht angeben, wird automatisch ein freier Port ausgewählt.

Stellen wir nun sicher, dass alle Knoten erfolgreich auf unserem Hub registriert sind:

Fiber Node Befehlszeile

4) Jetzt müssen wir ein Java-Projekt mit Selenium-Tests erstellen, die wir ausführen werden. Dafür:

a) Erstellen Sie in der von Ihnen verwendeten IDE ein neues Java-Maven-Projekt mit Standardeinstellungen (ich verwende IntelliJ IDEA)

b) Fügen Sie dann die Java-Klasse ParallelTest.java hinzu

Paralleltest

c) Importieren Sie die erforderlichen Selenium-Tests und TestNG-Bibliotheken:

import org.openqa.Selenium.Platform;

import org.openqa.Selenium.remote.DesiredCapabilities;

import org.openqa.Selenium.remote.RemoteWebDriver;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.Parameters;

import org.testng.annotations.Test;

import java.net.MalformedURLException;

java.net.URL importieren;

Später werden wir besprechen, warum wir Anmerkungen benötigen. Nach dem Import der Bibliotheken müssen Sie der IDE erlauben, alle notwendigen Abhängigkeiten hinzuzufügen.

Befehlszeile Befehlszeile

d) Fügen Sie den nächsten Code in unsere ParallelTest{}-Klasse ein:

öffentlicher RemoteWebDriver-Treiber;

@BeforeTest

public void beforeTest() {}

@Prüfung

public void experitest(){}

Hier:

@BeforeTest und @Test sind TestNG-Annotationen.

beforeTest(), experitest() sind Methoden.

RemoteWebDriver ist eine importierte Klasse.

e) Wir müssen den Test im aktuellen Zustand ausführen, um sicherzustellen, dass alles ordnungsgemäß funktioniert, und um die Standard-TestNG-Konfigurationsdatei zu erhalten:

Konfigurationsdatei

In der IDE-Konsole sehen wir die Ergebnisse der Ausführung. Klicken Sie auf die Infozeile in diesem Abschnitt, um weitere Informationen zu erhalten.

trösten

Danach erscheint oben auf dem Bildschirm der Pfad zur neu erstellten Konfigurationsdatei:

Config

Gehen Sie in dieses Verzeichnis und übertragen Sie diese Datei zur Änderung und weiteren Verwendung in unseren Projektordner.

Verzeichnis

f) Jetzt bearbeiten wir unsere Konfigurationsdatei. Ändern Sie dazu zunächst die Build-Parameter:

Parameter

Auf diesem Bildschirm setzen wir den Parameter „Testart“ auf „Suite“ und weisen dem Parameter „Suite“ den Pfad zur XML-Konfigurationsdatei zu. Die Konfigurationsdatei befindet sich im Projektordner.

Parameter

g) Schauen wir uns die TestNG-Konfigurationsdatei genauer an und bearbeiten sie für unseren Fall. Die von der IDE erstellte Standardkonfigurationsdatei lautet wie folgt:

 








 
 

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Hier:

a) – Dieses Tag definiert eine Reihe unserer Tests.

b) – Dieses Tag definiert Testparameter.

c) und – Diese Tags definieren, welche Klassen in diesem Test verwendet werden.

Innerhalb des Tags können wir angeben, welche Methoden dieser Klasse wir verwenden werden. Der Einfachheit halber verwenden wir eine Klasse – Experitest:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Wir könnten die Konfiguration damit abschließen, aber da wir planen, mehrere Instanzen unseres Tests auszuführen, benötigen wir eine Parametrisierung. Fügen wir dem Code die relevanten Tags hinzu:

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Hier:

a) Die Tag-Namen „platform“ und „browserName“ sind Parameter, die wir beim Starten der Selenium-Grid-Node-Instanzen angegeben haben.

b) Die „Remote-URL“ ist ein Parameter, der bestimmt, welche Instanz des Selenium Grid-Clients von einer bestimmten Maschine verwendet wird. Ich erinnere Sie daran, dass Sie diesen Parameter in der Hub-Konsole sehen können:

 

Tipp hier:

Bitte beachten Sie, dass das Tag in der XML-Datei am Anfang dieser Testbeschreibung angegeben wird, bevor Klassen angegeben werden. Dies ist notwendig, damit die Parametrisierung für alle in diesem Test verwendeten Klassen relevant ist.

Aus dem oben gezeigten Beispiel einer Konfigurationsdatei folgt, dass wir so viele Kopien des Abschnitts innerhalb des Test-Tags in der Konfigurationsdatei erstellen müssen, wie wir Instanzen verwenden möchten. In unserem Fall gibt es zwei Instanzen. Aktualisieren Sie daher die Konfigurationsdatei wie unten gezeigt:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Bitte beachte, dass:

a) Wir haben auch den Namen der Tests geändert – Sie müssen eindeutig sein.

b) Wir fügen dem Tag parallel=“tests“ hinzu. – Das ist ein sehr wichtiger Teil. Dieser Parameter steuert die Parallelität. In diesem Fall bedeutet dies, dass Tests aus dieser Suite parallel durchgeführt werden sollten. Weitere Informationen erhalten Sie beim Beamten TestNG-Dokumentation (S. 5.11). Dies ist der Grund für die Verwendung von TestNG in unserem Fall, da das verteilte System in Wirklichkeit die gleichzeitige, also parallele Ausführung von Tests voraussetzt.

h) Da nun alles fertig ist, können wir mit dem Schreiben des Tests selbst fortfahren. Kehren wir zur Datei ParallelTest.java zurück. Zunächst werden wir die Möglichkeit hinzufügen, Parameter für jede Testinstanz zu verwenden. Fügen Sie dazu die Annotation @Parameter hinzu und aktualisieren Sie die Methode beforeTest wie folgt:

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({„platform“, „browserName“, „remoteurl“})[/html_tags_show] [html_tags_show]public void beforeTest(String platform, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

i) Fügen Sie dieser Methode nun die Funktion hinzu – wir geben den verwendeten Browser, die Plattform und die Version an. Diese Parameter sollten mit dem übereinstimmen, was wir für jeden spezifischen Selenium-Knoten ermittelt haben:

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({„platform“, „browserName“, „remoteurl“})[/html_tags_show] [html_tags_show]public void beforeTest(String platform, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]DesiredCapabilitiesabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName(“chrome”); capabilities.setPlatform(Platform.extractFromSysProperty(“platform”));[/html_tags_show] [html_tags_show]capabilities.setVersion(“ANY”);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

j) Erstellen Sie eine neue Instanz des Treibers und berücksichtigen Sie dabei Capability und RemoteURL. Beachten Sie auch die Notwendigkeit, dieser Methode eine Ausnahme hinzuzufügen, um remoteurl zu verwenden. Wenn Sie IDEA IDE verwenden, werden Sie dazu aufgefordert.

 

[html_tags_show]@BeforeTest[/html_tags_show] [html_tags_show]@Parameters({„platform“, „browserName“, „remoteurl“})[/html_tags_show] [html_tags_show]public void beforeTest(String platform, String browserName, String remoteurl) löst eine MalformedURLException aus {[/html_tags_show] [html_tags_show]DesiredCapabilitiesabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName(“chrome”);[/html_tags_show] [html_tags_show]capabilities.setPlatform(Platform.extractFromSysProperty(“platform”));[/html_tags_show] [html_tags_show]capabilities.setVersion(“ANY”);[/html_tags_show] [html_tags_show]driver = new RemoteWebDriver(neue URL(remoteurl), Möglichkeiten);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

TIPP:

Wenn Sie befürchten, dass Ihr Test aufgrund von Netzwerkverzögerungen nicht gleichzeitig auf allen Computern gestartet wird, können Sie Thread.sleep(3000); hinzufügen. am Ende der beforeTest-Methode. Dies wird mögliche Probleme ein wenig lindern.

Kommen wir zum Haupttest:

k) Fügen Sie der Website experitest.com eine Navigation hinzu, überprüfen Sie den Titel der Seite und geben Sie dann das Ergebnis unseres Tests an die Konsole aus:

 

[html_tags_show]@Test[/html_tags_show] [html_tags_show]public void experitest(){[/html_tags_show] [html_tags_show] String erwartetTitel = „experitest.com“;[/html_tags_show] [html_tags_show] String currentTitle = „“;[/html_tags_show] [html_tags_show] drivers.get(“https://experitest.com/free-trial/”);[/html_tags_show] [html_tags_show]actualTitle =driver.getTitle();[/html_tags_show] [html_tags_show] if (actualTitle.contentEquals(expectedTitle)){[/html_tags_show] [html_tags_show] System.out.println(“TEST PASSED!”);[/html_tags_show] [html_tags_show] } else {[/html_tags_show] [html_tags_show] System.out.println(“TEST FEHLGESCHLAGEN”);[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show] drivers.quit();[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

5) Alles ist bereit, jetzt können wir unseren Test durchführen. Dazu sollten Sie zunächst das Projekt erstellen und es dann ausführen:

trösten trösten

Das ist es! Jetzt wissen Sie, wie Sie Selenium-Tests im verteilten Modus ausführen können. Wir haben uns ein einfaches Beispiel mit zwei Slaves und zwei Instanzen angesehen, das eine beliebige Version von Chrome verwendet. Wenn Sie jedoch diese Anweisungen befolgen, können Sie mit den Konfigurationen Ihrer Slave-Maschinen experimentieren, um eine bessere Abdeckung und Testergebnisse zu erzielen. Dieses Projekt können Sie unter herunterladen unter folgendem Link.

 

Abschließende Tipps:

a) Wenn Sie unterschiedliche Browser oder Systeme verwenden oder etwas anderes haben, das berücksichtigt werden sollte, sollten Sie diese in der beforeTest-Methode mithilfe eines konsistenten Satzes von „if“-Operanden definieren, wie unten gezeigt:

 

[html_tags_show]if (browserName.equals(“firefox”)){[/html_tags_show] [html_tags_show] Capability = new DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show]if (browserName.equals(“chrome”)){[/html_tags_show] [html_tags_show] Capability = new DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show]

 

b) Um den Prozess zu automatisieren, können Sie sh/bat-Skripte oder sogar ein CI-Tool, zum Beispiel Jenkins, verwenden, um Maven-Projekte automatisch auszuführen.

Weitere Informationen zu Selen und Selenium-Tests finden Sie jederzeit bei Experitest Selenium Webdriver-Integration.

Maxim Babilo – Performance Engineer ISSArt QA-Team

[/ Vc_column_text] [/ vc_column] [/ vc_row]

Sind Sie bereit, Ihr Unternehmen zu skalieren?

Entdecken

Was gibt es Neues in der Welt von Digital.ai

22. April 2024

Die Verzerrung in der Maschine: Verzerrungen von Trainingsdaten und ihre Auswirkungen auf den generierten Code von KI-Code-Assistenten

Entdecken Sie Vorurteile in KI-Trainingsdaten, die sich auf die Codegenerierung auswirken, und erlernen Sie Strategien, um diese zu mildern, um eine gerechtere KI-Entwicklung und Softwareinnovation zu ermöglichen.

Mehr erfahren
22. Februar 2024

Wie der Futurismus Cloud-Tests prägt: Eine Prognose

Erschließen Sie die Zukunft des Cloud-Testens: strategische Ansätze, um Technologie effektiv zu nutzen, die Softwarequalität zu verbessern und den Geschäftserfolg sicherzustellen.

Mehr erfahren
4. Dezember 2023

Das Streben nach Qualität: Kontinuierliche automatisierte Softwaretests für die Automobilindustrie

Entdecken Sie, wie es geht, von der KI-gestützten Testerstellung bis hin zu selbstheilenden Systemen continuous testing und innovative Entwicklungen prägen die Zukunft vernetzter, safeund zuverlässige Fahrzeuge.

Mehr erfahren