BSJ*_*BSJ 10 java parallel-processing junit4 maven
我最近偶然发现了一种通过在java项目的pom.xml文件中指定以下内容来通过jUnit并行执行测试的简单方法:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<parallel>classes</parallel>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我发现有两个测试类(让我们称之为"badtestclass1"和"badtestclass2")由于编写测试的方式而不断受到并行执行的惩罚.理想情况下,我会重构那些测试类以表现得更好,但在此期间,我想知道是否有一种漂亮的方法来"排除"这些特定类并行执行.基本上,是否有一种方法可以并行执行其他所有操作,然后按顺序执行其他操作(或其他顺序,无关紧要).会有类似下面的工作吗?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<parallel>classes</parallel>
<excludes>
<excludesFile>badtestclass1</excludesFile>
<excludesFile>badtestclass2</excludesFile>
</excludes>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
Dan*_*dis 23
@poletto 的答案建议使用 jcip@NotThreadSafe注释,它可以与构建中的 Surefire 插件一起使用,但不能与命令行一起使用mvn test。@patson-luk 的答案是正确的,不幸的是,通过排除默认配置中的“坏测试”,它仍然被排除在外,并且没有在单独的<execution>.
我设法使用以下配置使其工作:
对于 JUnit 5,这些就足够了
在我的src/test/resources/junit-platform.properties文件中(或者您可以作为命令行参数传递):
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
Run Code Online (Sandbox Code Playgroud)
在我的非线程安全类的顶部(而不是 jcip 注释):
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
Run Code Online (Sandbox Code Playgroud)
对于 JUnit 4,将接受的答案修改如下:
import static org.junit.jupiter.api.parallel.ExecutionMode.SAME_THREAD;
@Execution(SAME_THREAD)
class SingleThreadedTest {
// ...
}
Run Code Online (Sandbox Code Playgroud)
pol*_*tto 10
您可以使用jcip @NotThreadSafe注释不希望并行化的类,并保留在启动示例中的surefire配置.这样,只要surefire找到带注释的类,它就会在单个线程中执行它.它解释的权利在这里的" 并行测试执行和单线程执行 "段落.
在原始测试短语中排除这 2 个测试,然后使用在单线程中运行的这 2 个类创建新的执行?:)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>path/to/your/class/badtestclass1.java</exclude>
<exclude>path/to/your/class/badtestclass2.java</exclude>
</excludes>
<parallel>classes</parallel>
</configuration>
<executions>
<execution>
<id>single-thread-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>path/to/your/class/badtestclass1.java</include>
<include>path/to/your/class/badtestclass2.java</include>
</includes>
<threadCount>1</threadCount>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9083 次 |
| 最近记录: |