如何关闭多项目构建的并行测试执行?

时间:2012-08-10 10:24:20

标签: scala sbt

我有一个多项目构建,在子项目和父项目中都有测试。聚合构建,以便父项目在子项目中运行所有测试。

我对它进行了配置,以便在子项目和父项目中没有并行执行测试,通过

parallelExecution in Test := false

然而,我有一种唠叨的感觉,跨越多个项目的测试是并行运行的。对于其中一个子项目,这是一个问题,因为它会同时改变测试数据库中的状态,导致测试失败。

关于如何在项目之间全局切换测试并行执行的任何想法?

5 个答案:

答案 0 :(得分:29)

我认为您可以使用范围ThisBuild跨项目应用设置,例如

parallelExecution in ThisBuild := false

我不知道您是否可以将其与范围Test结合使用,但可能没有必要。

答案 1 :(得分:16)

要限制所有项目中并发执行测试的数量,请使用:

concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)

请参阅sbt documentation

请参阅discussion

答案 2 :(得分:4)

请在此处查看我的回答How to run subprojects tests (including setup methods) sequentially when testing

还有另一种方法可以阻止并行执行。您可以使不同项目的测试任务相互依赖:

test in Project2 := (test in Project2).dependsOn(test in Project1).value
parallelExecution in Test in Project2 := false

答案 3 :(得分:3)

这在1.1.0中对我有用:

Test / parallelExecution := false

答案 4 :(得分:1)

基于https://stackoverflow.com/a/27068019/1922026的另一种可能性是在根项目中定义命令别名:

.settings(addCommandAlias("test", ";s1/test;s2/test;s3/test"): _*)

其中s1,s2和s3是子项目。当您在根项目中并运行“test”时,测试将按顺序执行,并按照定义的顺序执行。