2012-07-09 15 views
10

Ho molte suite di test in TestNG. Questi sono file XML. Voglio essere in grado di scegliere più suite XML durante l'esecuzione di test di integrazione da parte di Maven.Come parametrizzare il plugin Maven surefire così posso scegliere quali suite TestNG eseguire

Attualmente posso aggiungere i file privati ​​per pom.xml in questo modo:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <suiteXmlFiles> 
     <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile> 
     <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile> 
    </suiteXmlFiles> 
    </configuration> 
</plugin> 

Questa soluzione presenta alcune limitazioni. Posso solo modificare un percorso per la suite di test che ho definito in pom.xml. Quindi nel mio esempio deve sempre essere due file. Non sono in grado di eseguire, diciamo, 5 suite o solo una.

C'è un modo per parametrizzare in qualche modo l'intera sezione "suiteXmlFiles" in pom.xml?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <suiteXmlFiles> 
     ${multiple_paths_ToMySuiteFiles} 
    </suiteXmlFiles> 
    </configuration> 
</plugin> 

Esecuzione di tutto ciò che corrisponde dato gruppo di test non è un'opzione per me: Non voglio caricare tutte le suite che ho ottenuto e quindi eseguire solo i test selezionati con gruppi in TestNG privato. Il motivo è che un report generato dopo l'esecuzione di tutte le suite di test con filtri di gruppo è diverso da un report quando sono state eseguite solo le suite di test selezionate.

risposta

0

È possibile utilizzare groups parametro oppure specificare -Dgroups = ... nella riga di comando:

(fornitore TestNG/JUnit47 con JUnit4.8 + solo) Gruppi per questo test. Solo le classi/metodi/ecc. Decorati con uno dei gruppi specificati qui saranno inclusi nell'esecuzione di test, se specificato. Per JUnit, questo parametro impone l'utilizzo del provider 4.7 Questo parametro viene ignorato se viene specificato il parametro suiteXmlFiles. .

+0

ho detto che io non voglio utilizzare i gruppi come si rompe la relazione di prova risultato e non è sufficiente in ogni caso – maestr0

+0

flessibile o meno flessibile, ma questo è la tua unica scelta. Può essere flessibile quanto i tuoi gruppi. Ovviamente oltre all'esecuzione di test individuali. –

5

Abbiamo anche riscontrato questo problema con i nostri test. L'attuale soluzione che ora utilizziamo è definire una variabile di proprietà nella sezione delle proprietà e iniettarla nel blocco suiteXmlFiles sure-fire.

<properties> 
    <!-- Default suites --> 
    <batsSuiteFile>${project.build.testOutputDirectory}/BatsTests.xml</batsSuiteFile> 
    <smokeSuiteFile>${project.build.testOutputDirectory}/SmokeTests.xml</smokeSuiteFile> 

    <!-- Default suite files if not being specified from mvn command line --> 
    <defaultSuiteFiles>${batsSuiteFile},${smokeSuiteFile}</defaultSuiteFiles> 
    <suiteFile>${defaultSuiteFiles}</suiteFile> 
</properties> 

Poi nella sezione plug-in ...

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
     <suiteXmlFiles> 
      <!-- Suite file injection parameter from command line --> 
      <suiteXmlFile>${suiteFile}</suiteXmlFile> 
     </suiteXmlFiles> 
    </configuration> 
</plugin> 

Se non viene specificato dalla riga di comando cadrà di nuovo e di default per le 2 suite di cui sopra nella sezione delle proprietà. Poi, se si vuole dare il via una serie di file interno specificato che si può fare:

mvn test -DsuiteFile=test1.xml,test2.xml 

Sorprendentemente dalla documentazione Maven che ci si aspetta che i suiteXmlFiles ARG dovrebbero semplicemente ignorare questa dalla riga di comando e dovrebbero semplicemente accettare una virgola delimitato elenco di test xmls http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#suiteXmlFiles

Se qualcuno ha un altro modo migliore si prega di condividere.

+1

@ maestr0, per favore aiuta a contrassegnare la risposta come accettata se ti è stata d'aiuto. – mekdev

+0

altro modo per eseguire un insieme di comandi uno dopo l'altro mvn -D verifica $ {percorso}/test1 test, mvn -D verifica $ {percorso}/test2 test e dipendenza è org.apache.maven.plugins Maven-infallibile-plug 2,12 $ {test} .xml Badrinath

+0

Utilizzare invece '-Dsurefire.suiteXmlFiles'. Vedi la mia risposta qui sotto. – norbertpy

12

Secondo User Property di suiteXmlFiles È possibile utilizzare:

mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml 
+0

Utilizzando questa soluzione, non è necessario specificare il tag nel file pom.xml. Migliore risposta. –