wake-up-neo.com

So führen Sie einen individuellen Test im Integrationstestziel in maven durch

Wir haben Hunderte von Tests für unseren Integrations-Test-Lebenszyklus in Maven definiert, deren Abschluss viel Zeit in Anspruch nimmt.

Ich möchte nur einen Test im integration-test ausführen. Ich habe versucht:

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

aber das funktioniert nicht. Der -Dtest führt nur die Tests im Gerätetestziel aus, nicht die Integrationstestphase. Ich habe stattdessen den -Dintegration-test=<my-test> ausprobiert, und das wurde ignoriert.

Gibt es eine Möglichkeit, dies zu tun? 


Meine Konfiguration ist:

<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> 
    ..... 
38
Jalpesh

Wenn Sie das Maven failsafe plugin verwenden, können Sie einen einzelnen Integrationstest ausführen, indem Sie die it.test-Eigenschaft auf Ihren vollständig qualifizierten Testklassennamen setzen:

mvn -Dit.test=your.TestCase verify

Weitere Informationen hierzu finden Sie in im Dokument für das Failsafe-Plugin .

32
A Lee

In der Failsafe-Dokumentation müssten Sie den Test wie folgt angeben:

mvn -Dit.test=BrokenIT verify

-Dit.test scheint jedoch nicht mehr zu funktionieren. Der gleiche Parameter, der zum Festlegen eines Surefire-Tests verwendet wird, funktioniert anscheinend auch für Failsafe. Zum Beispiel:

mvn -Dtest=WorksIT verify

Ich habe einen Fehler ( EDIT: eingereicht, der als "Kann nicht reproduziert" in 2.12 geschlossen wurde), um die Dokumentation zu korrigieren.

25
Lyle

Ich habe mich durch diese Probleme gekämpft und ein zusätzliches Profil erstellt, das ich verwenden wollte, wenn ich nur einen Integrationstest ausführen wollte. Ich hoffe, dass ich hier genau das Richtige herausgeholt habe:

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

Nun rufe ich maven mit dem integrationTestSingle-Profil und mit -DfailIfNoTests=false -Dtest=NameOfTest auf, und es führt während der regulären "Test" -Phase keinen der regulären Tests aus und nur den NameOfTest-Test während der Integrationstestphase.

3

Ich bin nicht sicher über JUnit, aber für TestNG wäre es eine Strategie, eine Suite-XML-Datei nur mit dem einen Test zu definieren und dann das surefire-Plugin in Ihrem POM so zu konfigurieren, dass nur das ausgeführt wird. In Ihrem POM hätten Sie so etwas (Disclaimer, das ist nicht getestet):

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

Informationen zum Konfigurieren der Suite-Datei finden Sie unter http://testng.org/doc/documentation-main.html

2
James Kingsbery

einfach hinzufügen -DfailIfNoTests=false funktioniert für mich mit testNG. Etwas wie das: 

mvn integration-test -Dtest=aITest -DfailIfNoTests=false
2
Fang Zhen

Ich bin einfach selbst in diese Sache geraten. So etwas funktionierte gut für mich:

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

Der Trick bestand darin, sicherzustellen, dass die Testgruppe vor dem -Dtest-Teil erwähnt wurde.

0
filename.exe