Lavorare con multipli file testng.xml

Lavorando su un progetto open source GitHub creato per dimostrare il funzionamento del framework Selenium WebDriver con Java, man mano che il progetto cresceva, c’era la necessità di creare diversi file testng.xml per eseguire differenti test. 

Questi file multipli sono stati creati per segregare i test e posizionare tutti i test relativi a siti web rispettivi in un singolo testng.xml (ho usato siti web dimostrativi differenti per dimostrare diverse azioni che possono essere automatizzate usando Selenium WebDriver).

Ho pensato di spiegare l’uso di molti file testng.xml e come eseguire i test. Poiché Maven è lo strumento di build utilizzato, è necessario un singolo file testng.xml per eseguire tutti i test del progetto. Inoltre, ci sono stati casi che hanno richiesto di debuggare i fallimenti dei test eseguendo un singolo file testng.xml.

In questo progetto, ho creato 9 file testng.xml differenti contenenti molti test, e sto eseguendo tutti i test in questi 9 file testng.xml diversi usando un singolo file testng.xml. Sì, è possibile!

Quindi, unisciti alla mia avventura dove dimostrerò come eseguire molti file testng.xml usando un singolo file testng.xml. Spiegherò anche come eseguire un singolo file testng.xml tra i 9 disponibili e come farlo partire dalla riga di comando usando Maven.

Esecuzione multipla di file testng.xml usando un singolo file testng.xml

Inizieremo prima a concentrarci sul funzionamento di tutti i test con tutti i 9 file testng.xml differenti. La soluzione è l’uso della tag <suite-files> </suitefiles>  nel tuo file testng.xml e fornire il percorso del file testng.xml altrimenti tra questa tag. Ecco un file di esempio per dimostrare di cosa sto parlando:

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> 

Una volta eseguito questo file, eseguirà i rispettivi testng.xml nella sequenza aggiornata tra la tag <suite-files>. Quindi, “testng-saucedemo.xml” sarà eseguito per primo, poi, “testng-automationpractice.xml” sarà eseguito, e così via.

Tutti i file testng.xml forniti nell’esempio precedente contengono molti test. Quindi, tutti i test all’interno del rispettivo testng.xml verranno eseguiti e, upon completion, il file XML successivo sarà selezionato per l’esecuzione.

I seguenti sono i contenuti del file testng-saucedemo.xml :

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 -->

Una volta eseguiti tutti i test come aggiornati in questo file XML (non importa se passa o fallisce), e l’esecuzione è completata, il file successivo sarà selezionato per l’esecuzione di un altro set di test.

L’esecuzione di file di suite in parallelo non è supportata da TestNG.

Eseguire un singolo file testng.xml Utilizzando Maven

Nell’IDE hai l’opzione di eseguire i tuoi test usando il file testng.xml facendo clic destro su di esso e selezionando l’opzione per eseguire i test. tuttavia, quando si tratta di eseguire i test nella pipeline CI/CD, questa opzione non funziona bene, poiché devi eseguire i test usando i comandi nella pipeline automatizzata.

Configurazione del Progetto Per Eseguire il File suite-xml Utilizzando la riga di comando

Ci serve impostare il seguente configurazione per poter eseguire il file testng.xml usando Maven.

Aggiorna il plugin Maven Surefire nel tuo pom.xml:

Notare la tag <SuiteXmlFile> nella schermata precedente. Il valore per suiteXmlFile è impostato come ${suite-xml}. Imposteremo il valore predefinito per questa dichiarazione nel blocco delle proprietà del file pom.xml come segue:

Il percorso predefinito per testng.xml è impostato sul file che abbiamo usato nella sezione precedente di questo blog e abbiamo aggiornato il percorso suite-files in esso.

Quindi, se eseguiamo il comando mvn clean install o mvn clean test, Maven preterirà il file predefinito testng.xml in base al percorso del file aggiornato nel blocco delle proprietà e eseguirà tutti i test.

Adesso, la domanda che viene in mente è: “Cosa devo fare se voglio eseguire qualsiasi altro file testng.xml? E ‘possibile farlo?”

La risposta è “Sì”: possiamo eseguire qualsiasi file testng.xml nel nostro progetto aggiungendo -Dsuite-xml=<percorso file testng.xml> alla nostra mvn istruzione.

Ricordate, abbiamo impostato questa configurazione prima nel nostro blocco plugin Maven Surefire in pom.xml.

Dove abbiamo solo bisogno di passare i valori per la proprietà variabile suite-xml in riga di comando, il quale può essere fatto usando l’opzione -D in mvn istruzione:

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

Ora proviamo a sperimentare con la riga di comando e eseguire diversi file testng.xml usando Maven da riga di comando, come abbiamo appena imparato.

Eseguiremo il file testng-internet.xml, verifichiamo che questo sovrascriva l’esistente default testng.xml, e esegua solo quello che passiamo nella riga di comando. Dovremo passare il percorso completo in cui è salvato il testng.xml, e nel nostro caso, è disponibile nella cartella test-suite, quindi il percorso completo è test-suites\testng-theinternet.xml. Ecco il comando che faremo (assicuratevi di essere nella cartella radice del progetto prima di eseguire l’istruzione Maven nella finestra della riga di comando):

Plain Text

 

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


“-Dsuite-xml” option can be used with other maven commands like as follows : mvn clean install/ mvn clean verify, etc.

Le prove sono state eseguite con successo e i risultati sono stati stampati sul console. Si dice che 32 prove siano state eseguite e superate con successo.

Per confermare che il file XML corretto sia stato selezionato e le prove siano state eseguite, eseguiamo le prove per il file testng-theinternet.xml utilizzando l’IDE e controllare il numero di prove eseguite.

Possiamo vedere che 32 prove sono state eseguite e superate, il che conferma che le prove che abbiamo eseguito utilizzando il comando mvn sono state eseguite correttamente per il file testng.xml che abbiamo passato.

Conclusione

Possiamo avere più file testng.xml per separare le prove in base ai diversi moduli/siti web nel nostro progetto e questi più file testng.xml possono essere eseguiti utilizzando un solo file testng.xml.

Allo stesso modo, possiamo eseguire un file testng.xml dalla riga di comando utilizzando il plugin Maven Surefire.

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