我的Spring Boot应用程序还启动了一个gRPC服务及其REST(HTTP)服务。我已经为gRPC和REST编写了特定的测试。但是,当我运行 gradle测试时,这些测试是按顺序运行的;没有理由不能并行运行。
我要拍摄的是在并行执行测试时运行的Spring Boot应用程序的单个实例。
我尝试在gradle文件中设置 test 部分,使其具有'forkCount',我也尝试设置选项,例如parallel =“ classes”,但这会产生有关“平行”是一个未知的属性(也许是junit 5的东西?)
test {
options {
parallel = "classes"
// forkCount = 2
}
}
forkCount 选项不是我想要的,因为它将启动spring应用程序的多个实例。
我也尝试过从测试类中删除 @RunWith 并制作一个单独的测试类(具有 @RuWith 批注),该类具有以下方法它
@Test
void testRunner() {
JUnitCore.runClasses(ParallelComputer.classes(), {GrpcTests.class, RestTests.class});
}
但是测试仍然可以按顺序运行。
我也尝试了其他几件事,很抱歉,我没有将它们都方便使用。
目标
理想情况下,我希望的是我的Spring Boot应用程序的单个实例在测试类并行运行时运行(如果我也能使这些方法并行运行,则非常感谢)< / p>
@Test
public void contextLoads() throws Exception {
}
并在gradle文件中添加' maxParallelForks '条目,我已经在使用 @SpringBootTest 批注,但这与我使用' > forkCount `,至少有2个实例从测试关闭日志中可以看到
2019-04-25 10:24:17.245 LogLevel=INFO 53838 --- shutting down gRPC server since JVM is shutting down
...
2019-04-25 10:24:30.125 LogLevel=INFO 53839 --- shutting down gRPC server since JVM is shutting down
您会看到我收到两个关闭消息,并且显示了PID(53838和53839)。
答案 0 :(得分:0)
您需要将@SpringBootTest与maxParallelForks结合使用。
使用@SpringBootTest注释单元测试。 @SpringBootTest将启动Spring Boot上下文,该上下文将缓存在所有测试中。
“ Spring Test支持的一个不错的功能是应用程序上下文被缓存在测试之间,因此,如果您在一个测试案例中有多个方法,或者具有相同配置的多个测试案例,它们只会产生启动成本申请一次”
请参阅: https://spring.io/guides/gs/testing-web/
将以下内容添加到build.gradle中。要同时运行多个测试。
tasks.withType(Test) {
maxParallelForks = 4 //your choice here
}
请参见https://guides.gradle.org/performance/#parallel_test_execution