I'm running Selenium tests on the Selenium Grid using the Surefire Plugin to execute tests. In terms of my test breakdown I have several classes, some of which have 1 test in there and some more than one test.
So on my Grid i have 30 chrome web drivers and I want to execute all tests within all classes in parallel.
I've read how to do this using the parallel
parameter which i have set as:
<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>
However this doesnt seem to fill all the Chrome web drivers I have available.
If i then use forkCount
, like:
<forkCount>20</forkCount>
<reuseForks>true</reuseForks>
Then when the test execution first starts, all web drivers are filled however it quickly starts dropping and behaving one at a time.
So my questions:
Thanks.
You have to provide explicit junit test provider:
<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>
And you should use JUnit 4.7+ as older versions does not work with parallel testing correctly.
Also you can omit fork-related parameters if your tests do NOT affect JVM runtime (usually it's not the case).
Or migrate your tests to TestNG - it is more elegant framework and it works with parallel testing much better, then JUnit (imo).