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

问题描述 投票:10回答:1

Gradle允许我像这样启动多个jvm进行测试:

test {
   maxParallelForks = 10
}

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

test {
   systemProperty 'ftpPort', 10000
}

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

类似:

test {
   maxParallelForks 10
   customizeForks { index ->
       systemProperty 'ftpPort', 10000 + index
   }
}
testing gradle
1个回答
0
投票

分叉之前没有设置任务。但是,您可以在项目中覆盖测试任务以实现该行为(此处为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
   ... 
}
© www.soinside.com 2019 - 2024. All rights reserved.