Arbeiten mit mehreren testng.xml Dateien

Während ich an einem Open-Source-Projekt auf GitHub arbeitete, das dazu diente, den funcitonieren des Selenium WebDriver Frameworks mit Java zu demonstrieren, als das Projekt zunehmend größer wurde, ergab sich die Notwendigkeit, mehrere testng.xml Dateien zu erstellen, um verschiedene Tests auszuführen.

Diese mehreren Dateien wurden erstellt, um die Tests zu segmentieren und alle Tests, die mit einer jeweiligen Webseite in Verbindung stehen, in einer einzigen testng.xml Datei zu platzieren (Ich habe verschiedene Demo-Webseiten verwendet, um verschiedene mit Selenium WebDriver automatisierbare Aktionen zu demonstrieren).

Ich werde einige Licht auf die Verwendung mehrerer testng.xml Dateien und wie Tests ausgeführt werden sollen. Da Maven das verwendete Build-Tool ist, ist eine einzige testng.xml Datei erforderlich, um alle Tests im Projekt auszuführen. Außerdem gab es Fälle, die debuggt werden mussten, weil Testfehler aufgetreten waren, indem mit einer einzigen testng.xml Datei gelaufen wurde.

In diesem Projekt habe ich 9 verschiedene testng.xml Dateien erstellt, die mehrere Tests enthalten, und ich lße alle Tests in diesen 9 verschiedenen testng.xml Dateien mit einer einzigen testng.xml Datei laufen. Ja, das ist möglich!

Also, trete mir auf dieser Reise bei, wo ich demonstrieren werde, wie man mehrere testng.xml Dateien mit einer einzigen testng.xml Datei ausführt. Ich werde auch einige Licht auf das Ausführen einer einzigen testng.xml Datei aus den 9 verfügbaren auf der Befehlszeile mit Maven.

Ausführen mehrerer testng.xml Dateien mit einer einzigen testng.xml Datei

Wir konzentrieren uns zunächst auf das Ausführen aller Tests mit allen 9 verschiedenen testng.xml-Dateien. Die Lösung besteht darin, den <suite-files> </suitefiles> -Tag in Ihrer testng.xml-Datei zu verwenden und den Pfad zu den anderen testng.xml -Dateien zwischen diesem Tag anzugeben. Hier ist die Beispieldatei, um zu demonstrieren, worüber ich spreche:

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
    <suite-file path="testng-saucedemo.xml"/>
    <suite-file path="testng-automationpractice.xml"/>
    <suite-file path="testng-theinternet.xml"/>
    <suite-file path="testng-juice-shop.xml"/>
    <suite-file path="testng-lambdatestecommerce.xml"/>
    <suite-file path="testng-seleniumgrid-theinternet.xml"/>
    <suite-file path="testng-lambdatest-selenium-playground.xml"/>
    <!--        <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite> 

Sobald wir diese Datei ausführen, wird sie die entsprechenden testng.xml-Dateien in der festgelegten Reihenfolge zwischen dem <suite-files>-Tag ausführen. Also wird zuerst “testng-saucedemo.xml” ausgeführt, dann “testng-automationpractice.xml”, und so weiter.

Alle in oben genanntem Beispiel gegebenen testng.xml-Dateien enthalten mehrere Tests. Daher werden alle Tests innerhalb der jeweiligen testng.xml -Dateien ausgeführt und nach Fertigstellung der nächste XML-Datei für die Ausführung ausgewählt.

Das folgende sind der Inhalt der testng-saucedemo.xml -Datei:

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
    <parameter name="browser" value="chrome"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
    <parameter name="browser" value="firefox"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
    <parameter name="browser" value="edge"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
    <parameter name="browser" value="opera"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

Sobald alle Tests in dieser XML-Datei ausgeführt wurden (egal ob bestehen oder nicht), und die Ausführung abgeschlossen ist, wird die nächste Datei für die Ausführung weiterer Tests ausgewählt.

Es ist mit TestNG nicht möglich, die Suite-Dateien parallel auszuführen.

Das Ausführen einer einzigen testng.xml-Datei mit Maven.

Sie haben in Ihrer IDE die Option, Tests mit dem testng.xml-Datei durch einen Klick auf diese Datei und die Auswahl der Option auszuführen. Allerdings funktioniert diese Option nicht so gut, wenn es darum geht, die Tests im CI/CD-Pipeline auszuführen, da Sie die Tests mithilfe von Befehlen in der automatisierten Pipeline ausführen müssen.

Konfigurieren Ihres Projekts, um mit der Befehlszeile die suite-xml-Datei auszuführen

Um die testng.xml-Datei mit Maven auszuführen, müssen wir die folgende Konfiguration einstellen.

Aktualisieren Sie den Maven Surefire-Plugin in Ihrem pom.xml:

Beachten Sie die <SuiteXmlFile> -Schalter in dem oben gezeigten Bildschirmfoto. Der Wert für das Attribut suiteXmlFile ist als ${suite-xml} festgelegt. Wir werden den Standardwert für diese Deklaration im Eigenschaften-Block der pom.xml-Datei wie folgt festlegen:

Der Standardpfad für die testng.xml-Datei ist für die Datei festgelegt, die wir in dem oben genannten Abschnitt dieser Blog-Serie verwendet haben, und wir haben den Pfad für die suite-files aktualisiert.

Also, wenn wir den Befehl mvn clean install oder mvn clean test ausführen, wird Maven die testng.xml Standarddatei basierend auf dem in den Eigenschaften-Blöcken aktualisierten Dateipfad auswählen und alle Tests ausführen.

Jetzt die Frage, die in Ihrem Gehirn aufkommt: „Was sollte ich tun, wenn ich eine andere testng.xml-Datei ausführen möchte? Kann das überhaupt gemacht werden?“

Die Antwort ist „Ja“: wir können jede testng.xml-Datei in unserem Projekt mit dem Hinzufügen des -Dsuite-xml=<testng.xml Dateipfad> in unserem mvn Befehl ausführen.

Denken Sie daran, dass wir diese Konfiguration zuvor in unserem Maven Surefire-Plugin-Block in pom.xml eingestellt haben.

Wir müssen nur die Werte für die suite-xml Eigenschaftsvariable in der Befehlszeile übergeben, was mit dem -D Option in dem mvn Befehl erledigt werden kann:

 
mvn clean test -Dsuite-xml=<testng.xml file path>

Lassen Sie uns nun mit der Befehlszeile Experimente machen und verschiedene testng.xml Dateien mit Maven von der Befehlszeile aus laufen lassen, wie wir gerade gelernt haben.

Wir werden die testng-internet.xml Datei ausführen, prüfen, ob sie die bestehende Standard testng.xml überschreibt und nur die Datei ausführt, die wir im Befehl übergeben haben. Wir müssen den vollständigen Pfad angeben, wo die testng.xml gespeichert ist, und in unserem Fall befindet sich diese im test-suite Ordner, somit lautet der vollständige Pfad test-suites\testng-theinternet.xml. Hier ist der Befehl, den wir ausführen werden (stellen Sie sicher, dass Sie sich auf dem Wurzelverzeichnis des Projekts im Befehlszeilenfenster befinden, bevor Sie den Maven-Befehl ausführen):

Plain Text

 

mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml


„-Dsuite-xml“ Option kann mit anderen Maven-Befehlen verwendet werden, z.B. wie folgt:mvn clean install/ mvn clean verify usw.

Die Tests wurden erfolgreich durchgeführt und die Ergebnisse wurden auf der Konsole ausgegeben. Es ist zu lesen, dass 32 Tests erfolgreich durchgeführt wurden.

Um zu bestätigen, dass die richtige XML-Datei ausgewählt wurde und die Tests durchgeführt wurden, führen wir die Tests für die Datei testng-theinternet.xml mit der IDE durch und überprüfen die Anzahl der durchgeführten Tests.

Wir können sehen, dass 32 Tests durchgeführt und bestehendfunktioniert wurden, was bestätigt, dass die Tests, die wir mit dem Befehl mvn durchgeführt haben, korrekt für die Datei testng.xml durchgeführt wurden, die wir angegeben haben.

Schlussfolgerung

Wir können mehrere testng.xml-Dateien haben, um die Tests aufgrund der verschiedenen Module/Webseiten in unserem Projekt zu trennen, und diese mehreren testng.xml-Dateien können mit einer einzigen testng.xml-Datei ausgeführt werden.

Gleichfalls können wir eine testng.xml-Datei von der Befehlszeile aus mit dem Maven Surefire-Plugin ausführen.

Source:
https://dzone.com/articles/working-with-multiple-testngxml-files