为了账号安全,请及时绑定邮箱和手机立即绑定

在Maven构建中并行运行junit测试?

在Maven构建中并行运行junit测试?

紫衣仙女 2020-02-18 08:00:36
在Maven构建中并行运行junit测试?我使用的是JUnit 4.4和Maven,还有大量的长期运行的集成测试。当涉及并行化测试套件时,有几种解决方案允许我在单个测试类中并行运行每个测试方法。但所有这些都要求我以一种或另一种方式改变测试。我真的认为在X线程中并行运行X不同的测试类将是一个更干净的解决方案。我有数百个测试,所以我不关心线程个别的测试类。有什么办法吗?
查看完整描述

4 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

使用maven插件:

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



查看完整回答
反对 回复 2020-02-19
?
四季花海

TA贡献1811条经验 获得超5个赞

从jUnit 4.7,现在可以不使用testng并行运行测试。实际上,从4.6开始就有可能,但4.7中有一些修正,这将使它成为一个可行的选择。您还可以使用Spring运行并行测试,您可以阅读这些测试。这里


查看完整回答
反对 回复 2020-02-19
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

受JUnit实验启发并行计算机我建立了自己的跑步者副等位套房参数化跑步者。使用这些运行程序,可以轻松地并行化测试套件和参数化测试。

Par等位Suite.java

public class ParallelSuite extends Suite {

    public ParallelSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {

        super(klass, builder);

        setScheduler(new RunnerScheduler() {

            private final ExecutorService service = Executors.newFixedThreadPool(4);

            public void schedule(Runnable childStatement) {
                service.submit(childStatement);
            }

            public void finished() {
                try {
                    service.shutdown();
                    service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace(System.err);
                }
            }
        });
    }}

参数化.java

public class ParallelParameterized extends Parameterized {

    public ParallelParameterized(Class<?> arg0) throws Throwable {

        super(arg0);

        setScheduler(new RunnerScheduler() {

            private final ExecutorService service = Executors.newFixedThreadPool(8);

            public void schedule(Runnable childStatement) {
                service.submit(childStatement);
            }

            public void finished() {
                try {
                    service.shutdown();
                    service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace(System.err);
                }
            }
        });
    }}

使用很简单。只要改变@runwith值中的一个平行*上课。

@RunWith(ParallelSuite.class)@SuiteClasses({ATest.class, BTest.class, CTest.class})public class ABCSuite {}



查看完整回答
反对 回复 2020-02-19
  • 4 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信