Terwijl ik aan een open bron GitHub-project werkte dat was gemaakt om de werking van het Selenium WebDriver-framework met Java te tonen, groeide het project en werd er behoefte aan het maken van meerdere testng.xml-bestanden voor het uitvoeren van verschillende tests.
Deze meerdere bestanden werden gemaakt om de tests te scheiden en alle tests die bij een respectievelijke website horen in een enkel testng.xml-bestand te plaatsen (Ik heb verschillende demo-websites gebruikt om verschillende acties te demonstreren die met Selenium WebDriver geautomatiseerd kunnen worden).
Ik wilde even over de gebruik van meerdere testng.xml-bestanden en hoe tests uitgevoerd kunnen worden opduiken. Aangezien Maven het bouwtool is dat wordt gebruikt, is er een enkel testng.xml-bestand nodig om alle tests in het project uit te voeren. Ook zijn er gevallen waarin tests moesten worden gedebugged voor de testfouten door het uitvoeren van een enkel testng.xml-bestand.
In dit project heb ik 9 verschillende testng.xml-bestanden gemaakt die meerdere tests bevatten, en ik voer alle tests in deze 9 verschillende testng.xml-bestanden uit met behulp van een enkel testng.xml-bestand. Ja, dat is mogelijk!
Dus, kom mee op mijn reis waarin ik u zal demonstreren hoe u meerdere testng.xml-bestanden kunt uitvoeren met behulp van een enkel testng.xml-bestand. Ik zal ook wat licht op de uitvoering geven van een enkel testng.xml-bestand uit de 9 beschikbare en het uitvoeren ervan vanaf de commandoregel met behulp van Maven.
Uitvoeren van meerdere testng.xml-bestanden met behulp van een enkel testng.xml-bestand
Laat ons eerst focus hebben op het uitvoeren van alle tests met alle 9 verschillende testng.xml-bestanden. De oplossing hiervoor is het gebruik van de <suite-files> </suitefiles>
tag in uw testng.xml-bestand en het bieden van de paden naar de overige testng.xml bestanden tussen deze tag. Hier is het voorbeeldbestand om te laten zien over wat ik gaat praten:
<?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>
Nadat we dit bestand uitvoeren, zal het de respectievelijke testng.xml’s uitvoeren in de volgorde die is bijgewerkt tussen de <suite-files>
tag. Dus “testng-saucedemo.xml”
zal eerst worden uitgevoerd, en dan, “testng-automationpractice.xml”
zal worden uitgevoerd, enzovoort.
Alle testng.xml-bestanden die in het bovenstaande voorbeeld worden gegeven bevatten meerdere tests. Dus zal alle tests binnen de respectievelijke testng.xml worden uitgevoerd en nadat de uitvoering klaar is, zal het volgende XML-bestand worden gekozen voor de uitvoering.
Hier zijn de inhouden van het testng-saucedemo.xml bestand:
<?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 -->
Nadat alle tests uit dit XML-bestand zijn uitgevoerd (maakt niet of ze slaag of mislukken), en de uitvoering klaar is, zal het volgende bestand worden gekozen om een andere set testen uit te voeren.
Running the suite files in parallel is not supported by testng.
Running a Single testng.xml File Using Maven
U heeft in de IDE de mogelijkheid om uw testen uit te voeren met behulp van het testng.xml bestand door erop te klikken met de rechtermuisknop en het optioneel te selecteren om de testen uit te voeren. Echter, bij het uitvoeren van de testen in de CI/CD-pipeline houdt die optie niet goed stand, omdat u de testen moet uitvoeren met commando’s in de geautomatiseerde pipeline.
Configureer uw project om suite-xml bestand te gebruiken via commando lijn
We moeten de volgende configuratie instellen om het testng.xml bestand te kunnen uitvoeren met Maven.
Werk de Maven Surefire plugin bij in uw pom.xml:
Merk op de <SuiteXmlFile>
tag in de bovenstaande schermafbeelding. Het waarde voor suiteXmlFile
is ingesteld als ${suite-xml}
. We zullen de standaardwaarde voor deze declaratie in het properties blok van het pom.xml bestand instellen als volgt:
De standaardpad naar testng.xml is ingesteld voor het bestand dat we in de bovenvermelde sectie van deze blog gebruikten en hebben het pad van suite-files
ervan bijgewerkt.
Dus, als we nu het commando mvn clean install
of mvn clean test
uitvoern, zal Maven het testng.xml standaardbestand op basis van het door het bestandspad bijgewerkte properties blok ophalen en alle tests uitvoeren.
Nu komt de vraag op: “Wat moet ik doen als ik een andere testng.xml bestand wil uitvoeren, is dat mogelijk?”
De antwoord is “Ja”: we kunnen elk testng.xml bestand in ons project met behulp van het toevoegen van -Dsuite-xml=<pad naar testng.xml bestand>
aan onze mvn
opdracht.
Vergeet niet dat we deze configuratie eerder hadden ingesteld in ons Maven Surefire plugin blok in pom.xml.
We moeten de waarden voor de suite-xml
eigenschap variabele overdragen op de commandoregel, wat kan worden gedaan met behulp van de -D
optie in de mvn
opdracht:
mvn clean test -Dsuite-xml=<testng.xml file path>
Laten we nu eens ons toevoegen aan de commandoregel en verschillende testng.xml bestanden met Maven vanaf de commandoregel uitvoeren, zoals we net hebben geleerd.
We zullen het testng-internet.xml
bestand uitvoeren, controleren dat het bestaande standaard testng.xml overschrijft en alleen maar het bestand uitvoert dat we opdrachtgeven. We moeten het volledige pad waar het testng.xml opgeslagen is doorgeven, en in ons geval is dat beschikbaar in de test-suite
map, dus het volledige pad is test-suites\testng-theinternet.xml
. Hier is de opdracht die we zullen uitvoeren (maak er zeker van dat u zich op de root map van het project bevindt voordat u de Maven opdracht uitvoert):
mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml

“-Dsuite-xml” optie kan worden gebruikt met andere Maven opdrachten zoals volgt : mvn clean install/ mvn clean verify, enzovoort.
De testen zijn succesvol uitgevoerd en de resultaten zijn op de console afgedrukt. Het spreekt van 32 tests die succesvol zijn uitgevoerd.
Om te bevestigen dat het correcte XML-bestand is gekozen en de tests zijn uitgevoerd, voerde we de tests uit voor het bestand testng-theinternet.xml
met de IDE en controleerden we het aantal uitgevoerde tests.
We kunnen zien dat 32 tests zijn uitgevoerd en gehaald, wat ons erkent dat de tests die we uitvoerden met de mvn
opdracht correct zijn uitgevoerd voor het testng.xml bestand dat we hebben doorgegeven.
Conclusie
We kunnen meerdere testng.xml-bestanden hebben om de tests op basis van de verschillende modules/websites in ons project te segmenteren, en deze meerdere testng.xml bestanden kunnen worden uitgevoerd met behulp van een enkel testng.xml bestand.
Evenzoveel, kunnen we een testng.xml bestand vanop de commandoregel uitvoeren met behulp van de Maven Surefire-plugin.
Source:
https://dzone.com/articles/working-with-multiple-testngxml-files