【问题标题】:How do I get Maven Surefire to run all classes and tests?如何让 Maven Surefire 运行所有类和测试?
【发布时间】:2018-10-10 02:57:59
【问题描述】:
我有一个运行一些测试的 Java JUnit Selenium 测试框架。有两个类,每个类有两个测试。
我已经像这样配置了 maven surefire
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
<parallel>methods</parallel>
<threadCount>100</threadCount>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
</configuration>
<version>2.12.4</version>
</plugin>
我希望它同时运行 4 个测试,但无论我使用 threadCount、parallel 和 fork 设置的哪种组合,我似乎只能获得 1 类价值的测试用例来运行一次。看来应该可以了,谁能提供解决方案?
【问题讨论】:
标签:
java
maven
testing
junit
maven-surefire-plugin
【解决方案1】:
您想并行运行套件还是并行运行方法或测试?
我发现并行运行套件的唯一可行解决方案是设置
<property>
<name>suitethreadpoolsize</name>
<value>8</value>
</property>
在 pom.xml 中。其他所有组合都不起作用,因为我需要在同一个 JVM 上运行测试,而不是启动分叉进程。
【解决方案2】:
我在 maven v3.5.0 中为surefire v2.20.1 使用以下配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<useUnlimitedThreads>true</useUnlimitedThreads>
<rerunFailingTestsCount>1</rerunFailingTestsCount>
<parallel>methods</parallel>
<forkedProcessExitTimeoutInSeconds>2</forkedProcessExitTimeoutInSeconds>
</configuration>
</plugin>
我相信这是可行的,因为我们的测试套件比以前快了很多,并且 Windows 报告运行进程在运行肯定时特别显着增加。
【解决方案3】:
对你来说可能晚了 1 年,但以防万一它可以帮助某人。
像您一样使用 parallel=methods 将一次启动所有测试(方法),但一次启动 1 个类(顺序)。因此,在您的示例中,有 2 个测试的 2 个类,您将执行 ClassA 的所有测试,然后执行 ClassB 的所有测试。
如果您要使用 parallel=classes,则所有类将同时启动,但一次运行 1 个测试(方法)(顺序)。因此,在您的示例中,有 2 个测试的 2 个类,您将并行启动 ClassA 的 Test1 和 ClassB 的 Test1,然后执行 ClassA 的 Test2 和 ClassB 的 Test2。
由于您希望所有 4 个测试并行执行,因此请使用 parallel=all。
方法和类都将并行执行。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<parallel>all</parallel>
<threadCount>10</threadCount>
</configuration>
<version>2.22.0</version>
</plugin>
注意:或者,您可能希望删除 块并将它们设置为 mvn 命令行中的参数。
例如: mvn clean test -Dparallel=all -DthreadCount=10
问候,