Ich arbeite an Maven-Projekt mit Tausenden von Tests, die sehr langsam laufen (dauert 2h, um alle Tests auszuführen). Also habe ich versucht, durch die Konfiguration todsichere Plugin wie folgt die Tests parallel laufen zu lassen:Wie kann man todsichere Tests parallel ausführen, während einige nacheinander ausgeführt werden?
<configuration>
<failIfNoTests>false</failIfNoTests>
<reuseForks>false</reuseForks>
<reuseForks>true</reuseForks>
<forkCount>2C</forkCount>
<systemPropertyVariables>
<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
</systemPropertyVariables>
<parallel>suites</parallel>
<threadCount>12</threadCount>
</configuration>
Aber dann einige der Tests fehlschlagen in ihren @Before
und @After
Methoden, bei denen wir initialisieren und einige Ressourcen aufzuräumen (es scheint verwandt zu sein Ports Konflikte).
Ich habe versucht, diese Annotation @net.jcip.annotations.NotThreadSafe
zu den fehlgeschlagenen Tests wie in surefire documentation beschrieben, um sie nacheinander auszuführen und Konflikte zu vermeiden. Das hat aber nicht funktioniert und diese Tests scheitern immer noch !!!
Beliebiger Zeiger auf, wie einige todsichere Tests gezwungen werden, sequenziell auf demselben JVM-Prozess und demselben Thread auszuführen, während der Rest parallel ausgeführt wird (möglicherweise in verschiedenen JVM-Prozessen)?
EDIT 1 Jetzt habe ich versucht, die Konfiguration von todsicheren in zwei zu teilen: eine für sequentielle Tests und eine andere für parallele Tests. Dieser Ansatz scheint jedoch die Ausführungszeit nicht zu verbessern, da ich immer noch Tests habe, die fehlschlagen, und es dauert immer noch 2 Stunden, um alle Tests durchzuführen.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<!-- Sequential tests -->
<configuration>
<includes>**/*Sequential.java</includes>
<failIfNoTests>false</failIfNoTests>
<reuseForks>false</reuseForks>
<systemPropertyVariables>
<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
<executions>
<!-- Parallel tests -->
<execution>
<id>parallel-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>**/*.java</includes>
<excludes>
<exclude>**/*Sequential.java</exclude>
</excludes>
<failIfNoTests>false</failIfNoTests>
<reuseForks>true</reuseForks>
<forkCount>2C</forkCount>
<parallel>suites</parallel>
<threadCount>12</threadCount>
</configuration>
</execution>
</executions>
</plugin>
JCIP Annotationen nur für die Dokumentation haben sie keine semantischen Auswirkungen. – xTrollxDudex