我使用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网络驱动程序。
如果我然后使用forkCount
,例如:
<forkCount>20</forkCount>
<reuseForks>true</reuseForks>
然后,当测试执行首次启动时,所有Web驱动程序都会被填充,但它会快速开始丢弃并一次执行一个。
所以我的问题:
感谢。
答案 0 :(得分:4)
您必须提供显式的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运行时(通常情况并非如此),您也可以省略与fork相关的参数。
或者将测试迁移到TestNG - 它是更优雅的框架,它更好地用于并行测试,然后是JUnit(imo)。
答案 1 :(得分:2)
有很多配置可以并行运行测试。
根据文件:
forkCount
参数
forkCount
定义Surefire将同时生成以执行测试的最大JVM进程数。它支持与maven-core中的-T
相同的语法:如果使用C
终止该值,则该值将与系统中可用CPU核心的数量相乘。例如,四核系统上的forkCount=2.5C
将导致最多十个并发执行测试的JVM进程。...
默认设置为
forkCount=1
/reuseForks=true
,这意味着Surefire会创建一个新的JVM进程来执行一个maven模块中的所有测试。
<强> THREADCOUNT 强>
当使用大于1的
reuseForks=true
和forkCount
值时,测试类将逐个移交给分叉进程。因此,parallel=classes
不会改变任何东西。但是,您可以使用parallel=methods
:在forkCount
并发进程中执行类,然后每个进程可以使用threadCount
个线程并行执行一个类的方法。
根据我的理解,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>
您可以在其网站上找到更多详细信息: