java - Surefire:suitesAndClasses和classes之间的区别

标签 java surefire

当我在 Surefire 中运行测试时,有什么区别

<parallel>suitesAndClasses</parallel>

<parallel>classes</parallel>

第一个示例似乎并行运行我的测试类,而第二个示例则不然。

最佳答案

请在下面找到一个简单的示例来验证 <parallel>classes</parallel>按预期工作。支票<parallel>suitesAndClasses</parallel>它将并行执行 JUnit 测试套件和普通 JUnit 测试类。

测试类

public class ParallelOneTest {

    @Test
    public void testOne() throws InterruptedException {
        System.out.println("ParallelOneTest.testOne()");
        TimeUnit.SECONDS.sleep(5);
    }

    @Test
    public void testTwo() throws InterruptedException {
        System.out.println("ParallelOneTest.testTwo()");
        TimeUnit.SECONDS.sleep(5);
    }

    @Test
    public void testThree() throws InterruptedException {
        System.out.println("ParallelOneTest.testThree()");
        TimeUnit.SECONDS.sleep(5);
    }
}

.

public class ParallelTwoTest {

    @Test
    public void testOne() throws InterruptedException {
        System.out.println("ParallelTwoTest.testOne()");
        TimeUnit.SECONDS.sleep(5);
    }

    @Test
    public void testTwo() throws InterruptedException {
        System.out.println("ParallelTwoTest.testTwo()");
        TimeUnit.SECONDS.sleep(5);
    }

    @Test
    public void testThree() throws InterruptedException {
        System.out.println("ParallelTwoTest.testThree()");
        TimeUnit.SECONDS.sleep(5);
    }
}

以下所有描述的测试场景均按 mvn clean compile test 执行。

正常顺序执行

要么没有配置maven-surefire-plugin在文件pom.xml中或者至少没有<parallel>...</parallel>条款。

顺序输出(剥离)

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.07 sec
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.008 sec
...
[INFO] -------------------
[INFO] BUILD SUCCESS      
[INFO] -------------------
[INFO] Total time: 31.919s

并行执行

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18</version>
            <configuration>
                <parallel>classes</parallel>
                <threadCount>2</threadCount>
            </configuration>
        </plugin>
    </plugins>
</build>

并行输出(剥离)

[INFO] parallel='classes', perCoreThreadCount=true, threadCount=2, ...
...
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.023 sec - in sub.optimal.mavenscratch.ParallelTwoTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.023 sec - in sub.optimal.mavenscratch.ParallelOneTest
...
[INFO] -------------------
[INFO] BUILD SUCCESS      
[INFO] -------------------
[INFO] Total time: 16.770s

正如您在第二个示例中看到的(基于总时间),两个测试类都是并行执行的。

对于并行选项 suitesAndClasses您可以配置多个类 <threadCountClasses>和测试套件threadCountSuites可以并行执行。

关于java - Surefire:suitesAndClasses和classes之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097937/

相关文章:

java - 异常(exception)——继承

maven - 在 Surefire Maven 插件中 fork : is it safe to use forking?

Java 8 stream.collect( ... groupingBy ( ... mapping( ... reducing ))) 减少 BinaryOperator 的使用

java - 如何编写可中断的方法

Java Inventory - ADT 类和文件输入问题

java - 更改由 surefire-plugin 加载的类路径上的位置顺序

maven - cucumber 和junit在jenkins中的测试量错误(万无一失)

java - Maven3 - 仅调试主要源代码

javascript - SonarQube 的 JavaScript 插件中是否存在错误,它不会获取子目录中测试的 Surefire 测试结果?

java - 使用 Spring Boot RabbitMQ 的异步 RPC