2012-07-09 10 views
10

Mam wiele zestawów testów w TestNG. Są to pliki XML. Chcę móc wybierać wiele pakietów XML podczas uruchamiania testu integracji z maven.Jak parametryzować wtyczkę Maven surefire, aby móc wybrać, które pakiety TestNG będą działać

Obecnie mogę dodać pliki Suite pom.xml tak:

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

To rozwiązanie ma pewne ograniczenia. Mogę tylko zmienić ścieżkę do zestawu testów, który zdefiniowałem w pom.xml. W moim przykładzie zawsze musi to być dwa pliki. Nie jestem w stanie uruchomić, powiedzmy, 5 apartamentów lub tylko jednego.

Czy istnieje sposób, aby w jakiś sposób sparametryzować całą sekcję "suiteXmlFiles" w pom.xml?

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

Running wszystko, który pasuje danej grupy testowej nie jest opcja dla mnie: nie chcę, aby załadować wszystkie apartamenty Mam a następnie uruchomić tylko wybrane testy z użyciem grup w TestNG apartamencie. Powodem jest to, że raport wygenerowany po uruchomieniu wszystkich zestawów testowych z filtrami grupowymi różni się od raportu, gdy zostały uruchomione tylko wybrane zestawy testów.

Odpowiedz

0

Można użyć groups parametru lub określić -Dgroups = ... w wierszu poleceń:

(dostawca TestNG/JUnit47 z JUnit4.8 + tylko) Grupy do tego testu. Tylko klasy/metody/etc ozdobione jedną z grup określonych tutaj będą uwzględnione w przebiegu testowym, jeśli określono. W przypadku JUnit ten parametr wymusza użycie dostawcy 4.7 Ten parametr jest ignorowany , jeśli określono parametr suiteXmlFiles. .

+0

Wspomniałem o tym, że nie chcą korzystać z grup, ponieważ łamie Test Report wynik i nie wystarczy zresztą – maestr0

+0

elastyczne lub nie elastyczne, ale to twój jedyny wybór. Może być tak elastyczny, jak poszczególne grupy. Oczywiście oprócz uruchamiania indywidualnych testów. –

5

Uderzyliśmy również ten problem w naszych testach. Obecne obejście, którego teraz używamy, polega na zdefiniowaniu zmiennej właściwości w sekcji właściwości i wstrzyknięciu jej w bezpieczny pakiet suiteXmlFiles.

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

Następnie w sekcji wtyczek ...

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

Jeśli nic nie jest określona z linii poleceń spadnie z powrotem na domyślne i 2 apartamenty określonych powyżej w sekcji Właściwości. Następnie, jeśli chcesz skopać określony zestaw plików z łazienką można zrobić:

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

zaskakująco Od docs maven można oczekiwać, że suiteXmlFiles arg powinien po prostu zastąpić ten z wiersza poleceń i należy po prostu przyjąć przecinek rozdzielona lista testng xmls http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#suiteXmlFiles

Jeśli ktokolwiek ma inny lepszy sposób, proszę udostępnij.

+1

@ maestr0 prosze o zaznaczenie odpowiedzi jako zaakceptowanej, jeśli pomogło. – mekdev

+0

innym sposobem jest uruchomienie poniżej zestawu poleceń po innych testach mvn -D test $ {ścieżka}/test1, test mvn -D test $ {ścieżka}/test2 i zależność to org.apache.maven.plugins Maven-murowany-plugin 2,12 $ {testy} .xml Badrinath

+0

Zamiast tego użyj '-Dsurefire.suiteXmlFiles'. Zobacz moją odpowiedź poniżej. – norbertpy

12

Według User Property z suiteXmlFiles Można użyć:

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

Korzystając z tego rozwiązania, nie trzeba określać znacznika w pliku pom.xml. Najlepsza odpowiedź. –