Maven 2でデフォルトで実行されないように、長時間実行(ストレステストなど)を分離する方法はありますか?
-
05-07-2019 - |
質問
ここでは、Maven 2のストックツールとドキュメントを使用して対処する方法がわからないという継続的なニーズがありました。
一部の開発者には、非常に長時間実行されるJUnitテスト(通常はストレステスト)があり、どのような状況でもビルドプロセス/ナイトリービルドの通常の一部として実行しないでください。
もちろん、surefireプラグインの除外メカニズムを使用してビルドからパントすることもできますが、理想的には、Maven 2を介して開発者が自由に実行できるものが必要です。
解決
通常、異なるテストセットを実行するプロファイルをMaven構成に追加します。
mvn -Pintegrationtest installでこれを実行します
<profile>
<id>integrationtest</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-client -Xmx896m -XX:MaxPermSize=192m</argLine>
<forkMode>once</forkMode>
<includes>
<include>**/**/*Test.java</include>
<include>**/**/*IntTest.java</include>
</includes>
<excludes>
<exclude>**/**/*SeleniumTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<property>
<name>integrationtest</name>
</property>
</activation>
</profile>
他のヒント
krosenvold の回答に追加して、予期しない動作を確実に防ぐために、統合を除外するまたはストレステストするデフォルトでアクティブなデフォルトプロファイルがあることを確認してくださいあなたの特別なプロファイルで実行したい。
<profile>
<id>normal</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/**/*IntTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
このようなプロファイルを作成する必要があります。プロファイルの外側にsurefire-pluginをリストするだけで、プロファイルが選択されている場合はそれが上書きされます。
mvn -P integrationtest clean install
Super Helpful Integration Test Thingy などの統合テストプラグインを使用して、単体テストから統合テスト(長期実行、システム)を分離します(純粋なテストでは、実行するすべての真の単体テストで最大30秒)。単体テストと統合テストの2つのJavaパッケージを作成します。
次に、このプラグインをフェーズ(通常のMavenライフサイクル)にバインドせず、次のようにターゲットとして明示的に呼び出されたときにのみ実行します。
mvn shitty:clean shitty:install shitty:test
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>shitty-maven-plugin</artifactId>
</plugin>
</plugins>
この方法により、通常の開発者に影響を与えず、オンデマンドで統合テストを実行できます。
別のオプションは、ストレステストでMavenで実行されていることを検出し、1回または2回だけ実行することです。つまり、通常の機能テストに変わります。この方法でコードを確認できますが、長時間実行することはできません。