Surefireプラグインを使用してSelenium GridでSeleniumテストを実行し、テストを実行しています。私のテストの内訳に関して、私はいくつかのクラスを持っています。そのうちのいくつかはそこに1つのテストがあり、いくつかは複数のテストがあります。
したがって、私のグリッドには30 chrome Webドライバーがあり、すべてのクラス内のすべてのテストを並行して実行したいと考えています。
私が設定したparallel
パラメータを使用してこれを行う方法を読みました:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<includes>
<include>${testSuite}</include>
</includes>
<parallel>all</parallel>
<useSystemClassLoader>false</useSystemClassLoader>
<perCoreThreadCount>false</perCoreThreadCount>
<threadCount>20</threadCount>
<browser>${browser_type}</browser>
</configuration>
</plugin>
しかし、これは私が利用できるすべてのChrome Webドライバーを満たしているようではありません。
もし私がそれならforkCount
を使う:
<forkCount>20</forkCount>
<reuseForks>true</reuseForks>
その後、テストの実行が最初に開始されると、すべてのWebドライバーが満たされますが、すぐに1つずつドロップして動作し始めます。
だから私の質問:
ありがとう。
明示的なjunitテストプロバイダーを提供する必要があります。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
<configuration>
<parallel>all</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
<useSystemClassLoader>false</useSystemClassLoader>
<includes>
<include>${testSuite}</include>
</includes>
<systemPropertyVariables>
<browser>${browser_type}</browser>
</systemPropertyVariables>
</configuration>
</plugin>
また、古いバージョンでは並列テストが正しく機能しないため、JUnit 4.7以降を使用する必要があります。
また、テストがJVMランタイムに影響を与えない場合は、フォーク関連のパラメーターを省略できます(通常はそうではありません)。
または、テストをTestNGに移行します。これはよりエレガントなフレームワークであり、JUnit(imo)よりもはるかに優れた並列テストで動作します。
テストを並行して実行するための非常に多くの構成があります。
ドキュメントによると:
forkCount
パラメータ
forkCount
は、テストを実行するためにSurefireが同時に生成するJVMプロセスの最大数を定義します。これは、maven-coreの-T
と同じ構文をサポートします。値をC
で終了すると、その値はシステムで使用可能なCPUコアの数で乗算されます。たとえば、クアッドコアシステムでforkCount=2.5C
を使用すると、テストを実行する最大10個の同時JVMプロセスがフォークされます。...
デフォルト設定は
forkCount=1
/reuseForks=true
です。これは、Surefireが1つの新しいJVMプロセスを作成して、1つのMavenモジュールですべてのテストを実行することを意味します。
threadCount
reuseForks=true
と1より大きいforkCount
値を使用すると、テストクラスはフォークされたプロセスに1つずつ渡されます。したがって、parallel=classes
は何も変更しません。ただし、parallel=methods
を使用できます。クラスはforkCount
並行プロセスで実行され、各プロセスはthreadCount
スレッドを使用して1つのクラスのメソッドを並列に実行できます。
私が理解しているように、threadCount
は各フォークのサブスレッドのようなものです。
これらのパラメータを微調整して、テストのパフォーマンスを向上させることができます。たとえば、次のようにすることができます。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<includes>
<include>${testSuite}</include>
</includes>
<parallel>all</parallel>
<useSystemClassLoader>false</useSystemClassLoader>
<perCoreThreadCount>false</perCoreThreadCount>
<forkCount>2.0C</forkCount>
<reuseForks>true</reuseForks>
<threadCount>20</threadCount>
<browser>${browser_type}</browser>
</configuration>
</plugin>
あなたはそのサイトで詳細を見つけることができます: