使用 maven-surefire 插件时如何使同步工作?
How to make synchronized work when using maven-surefire plugin?
我正在使用 maven-surefire 插件并行执行 Cucumber Runner。在每个 Runners 中,我都在调用 Utilities class 的同步静态方法。但是并行的所有 Runners 运行 都能够以非同步的方式调用该方法。
@RunWith(CucumberWithSerenity.class)
@CucumberOptions(...)
public class SampleRunner {
@BeforeClass
public static void loadLocators() {
Utilities.doSomething();
}
}
public class Utilities {
public synchronized static void doSomething() {
System.out.println("Start");
.
.
.
System.out.println("Stop");
}
}
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<includes>
<include>**/*Runner.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>${parallel.tests}</threadCount>
<forkCount>${parallel.tests}</forkCount>
<perCoreThreadCount>true</perCoreThreadCount>
<!-- <skip>true</skip> -->
</configuration>
</plugin>
当我的 threadCount 为 3 时,执行 mvn clean verify serenity:aggregate
我得到以下日志
Start
Start
Stop
Stop
Start
Stop
我期待的是
Start
Stop
Start
Stop
Start
Stop
将 forkCount
设置为 1,插件将仅使用 1 个 JVM 来执行测试。如果超过 1,则将使用多个 JVM,因此将使用不同的 synchronized static
方法。
我正在使用 maven-surefire 插件并行执行 Cucumber Runner。在每个 Runners 中,我都在调用 Utilities class 的同步静态方法。但是并行的所有 Runners 运行 都能够以非同步的方式调用该方法。
@RunWith(CucumberWithSerenity.class)
@CucumberOptions(...)
public class SampleRunner {
@BeforeClass
public static void loadLocators() {
Utilities.doSomething();
}
}
public class Utilities {
public synchronized static void doSomething() {
System.out.println("Start");
.
.
.
System.out.println("Stop");
}
}
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<includes>
<include>**/*Runner.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>${parallel.tests}</threadCount>
<forkCount>${parallel.tests}</forkCount>
<perCoreThreadCount>true</perCoreThreadCount>
<!-- <skip>true</skip> -->
</configuration>
</plugin>
当我的 threadCount 为 3 时,执行 mvn clean verify serenity:aggregate
我得到以下日志
Start
Start
Stop
Stop
Start
Stop
我期待的是
Start
Stop
Start
Stop
Start
Stop
将 forkCount
设置为 1,插件将仅使用 1 个 JVM 来执行测试。如果超过 1,则将使用多个 JVM,因此将使用不同的 synchronized static
方法。