在并行测试时,如何为每个jmv gradle生成不同的系统属性?

时间:2017-10-27 10:19:30

标签: testing gradle

Gradle允许我启动多个jvms进行测试,如下所示:

test {
   maxParallelForks = 10
}

我的应用程序的一些测试需要一个需要端口的假ftp服务器。使用一个jvm很容易做到这一点:

test {
   systemProperty 'ftpPort', 10000
}

然而,当并行运行时,我需要启动10个假的ftp服务器。如何为gradle生成的每个jvm添加自定义系统属性?

类似的东西:

test {
   maxParallelForks 10
   customizeForks { index ->
       systemProperty 'ftpPort', 10000 + index
   }
}

1 个答案:

答案 0 :(得分:1)

在分叉之前和之后没有设置任务。但是,您可以在项目中覆盖测试任务以实现该行为(此处为Java),因为Test任务只是一个类:

  public class ForkTest extends org.gradle.api.tasks.testing.Test {
        private final AtomicInteger nextPort = new AtomicInteger(10000); 
        public Test copyTo(JavaForkOptions target) {
            super.copyTo(target);
            target.systemProperty("ftpPort", nextPort.getAndAIncrement());
            return this;
        }
    }

然后在build.gradle中:

task testFork(Type: ForkTest){
   forkEvery = 1
   maxParallelForks = 10
   ... 
}