2009-05-21 15 views
31

Mamy setki testów zdefiniowanych dla naszego cyklu życia fazy testowej integracji w maven, a ich ukończenie zajmuje dużo czasu.Jak uruchomić indywidualny test w celu testu integracji w maven

Co chcę zrobić, to uruchomić tylko jeden test w integration-test. Próbowałem:

mvn -Dtest=<my-test> integration-test 

ale to nie działa. -Dtest uruchamia tylko testy w celu testowym urządzenia, a nie w fazie testu integracji. Zamiast tego wypróbowałem wersję -Dintegration-test=<my-test>, która została zignorowana.

Czy jest jakiś sposób na zrobienie tego?


Moja konfiguracja to:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>surefire-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <excludes> 
        <exclude>none</exclude> 
       </excludes> 
       <includes> 
        <include>**/api/**</include> 
       </includes> 
    ..... 
+0

Właśnie zrobiłem to na moim projekcie i działało. Czy jest szansa, że ​​możesz zamieścić sekcję getowania surefire od pom? –

+0

org.apache.maven.plugins Maven-murowany-plugin murowany-to integracja test Test żaden **/api/** ..... – Jalpesh

+0

nie mogę odpowiedzieć w pełnym rzeczy ze względu na ograniczenia. Ale to jest sedno tego. – Jalpesh

Odpowiedz

2

nie jestem pewien o JUnit, ale dla TestNG strategia byłoby zdefiniowanie pliku XML suite z tylko jednego testu, a następnie w POM skonfiguruj plugin murfire tak, aby uruchamiał to tylko. W swojej POM, to masz coś takiego (Zastrzeżenie to jest niesprawdzone):

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>integration-test</phase> 
     <configuration> 
      <suiteXmlFiles> 
      <suiteXmlFile>single-test.xml</suiteXmlFile> 
      </suiteXmlFiles> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Aby skonfigurować plik nowożeńców, patrz http://testng.org/doc/documentation-main.html

+0

Zgadzam się z Jamesem. TestNG nadaje się do tego, ale myślę, że lepiej jest użyć grup TestNG: @ Test (grupy = {"powolny test"}) Następnie w swoim pakiecie TestNG: Wtedy zawsze można włączyć/wyłączyć poszczególne grupy –

3

Walczyłem przez to i ja stworzyliśmy dodatkowy profil w użyciu kiedy chciałem uruchomić tylko jeden test integracji. Mam nadzieję, że udało Ci się ekstrakcji tylko odpowiednią część tutaj:

<profile> 
     <id>integrationTestSingle</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>surefire-it</id> 
          <phase>integration-test</phase> 
          <goals> 
           <goal>test</goal> 
          </goals> 
          <configuration> 
           <includes> 
            <include>**/integration/**/${test}.java</include> 
           </includes> 
           <skipTests>false</skipTests> 
          </configuration> 
         </execution> 
        </executions> 
        <configuration> 
         <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine> 
        </configuration> 
       </plugin> 

       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-test</id>         
          <configuration> 
           <skipTests>true</skipTests> 
          </configuration> 
         </execution> 
        </executions> 

       </plugin> 
      </plugins> 
     </build> 
    </profile> 

Teraz wzywam Maven z profilem integrationTestSingle iz -DfailIfNoTests=false -Dtest=NameOfTest, i to nie prowadzi regularnych badań podczas regularnych „test "faza i wykonuje tylko test NameOfTest podczas fazy testu integracji.

26

Jeśli używasz Maven failsafe plugin można uruchomić pojedynczy test integracji poprzez

mvn -Dit.test=your.TestCase verify 

Zobacz the failsafe plugin docs for more info.

+1

ten pracował dla mnie na 2013-07-26 z wtyczki w wersji 2.15 i Maven 3.1.0 pomimo tego, co mówi inna odpowiedź. Inna odpowiedź wydaje się być błędem. – ArtB

+1

sprawdzone dla wersji mvn 3.2.5, wtyczka 2.18. Próby jeden integracyjny: mvn integracja test -Dit.test = MyClassIT jednak ta prowadzi również testy jednostkowe: mvn zweryfikować -Dit.test = MyClassIT – user77115

+0

Należy pamiętać, że może to jeszcze przeprowadzić testy jednostkowe. Aby wyłączyć wykonywanie testów jednostkowych, dodaj '-Dtest = foo -DfailIfNoTests = false' (zakładając, że foo nie istnieje), zobacz https://stackoverflow.com/questions/6612344/prevent-unit-tests-in-maven- ale-allow-integration-tests. – asmaier

21

Failsafe documentation musiałby określić test tak:

mvn -Dit.test=BrokenIT verify 

Jednak -Dit.test nie wydaje się pracować dłużej. Zamiast tego ten sam parametr używany do określenia testu Surefire będzie prawdopodobnie działał również dla Failsafe. Na przykład:

mvn -Dtest=WorksIT verify 

jakie wniósł bug (EDIT: która została zamknięta, ponieważ „nie można odtworzyć” w 2.12), aby poprawić dokumentację.

+2

To powinno być zaakceptowane jako odpowiedź. – whaley

+0

Nie można wyzwolić wtyczki build-helper-maven, która inicjuje środowisko testowe. – okwap

+0

@okwap To brzmi jak coś szczególnego dla twojego projektu i konfiguracji wtyczki, a nie problemu z testem Failsafe/integracji. – Lyle

0

Po prostu wpadłem na to sam. Coś jak to działa dobrze dla mnie:

mvn -Pintegration-test -Dtest=<my-test> 

Sztuką było zapewnienie, że test grupa została wymieniona przed -Dtest porcji.

2

po prostu dodaj -DfailIfNoTests=false działa dla mnie z testNG. Coś takiego:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false 
Powiązane problemy