2012-08-10 69 views
23

我有一个多项目构建测试在子项目和父项目。构建被汇总,以便父项目运行子项目中的所有测试。如何关闭多项目构建测试的并行执行?

我配置它,以便有在这两个子项目和父项目的测试并行执行,通过

parallelExecution in Test := false 

不过,我也有挥之不去的感觉,是跨越多个项目的测试跑在平行下。在其中一个子项目的情况下,这是一个问题,因为它同时在测试数据库中改变状态,导致测试失败。

任何想法,如何在全球范围内的测试并行执行的开关,项目之间?

回答

24

我想你可以申请跨应用范围ThisBuild项目的设置,像

parallelExecution in ThisBuild := false 

我不知道你是否能结合起来,与范围Test,但它可能没有必要。

+0

对不起,我还挺新斯卡拉以及所面临的同样的问题 - 我应该在哪里,就把这行?该项目的文件? – kirhgoff 2013-06-21 12:24:49

+0

最简单的就是把它放到'build.sbt'中(即使你在'project/Build.scala'中有完整的配置文件也可以使用该文件) – 2013-06-21 12:38:52

+0

谢谢!我自己想到了,太急于问而不是思考:)。无论如何,谢谢 – kirhgoff 2013-06-21 17:51:10

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 
+2

这对我不起作用:我得到'参考未定义的设置:Project2/*:从Project2/*测试:test(/Users/the21st/Work/Project2/build.sbt:36)您的意思是Project2/web-assets-test:test?' – the21st 2015-07-21 09:34:41

13

要限制的同时执行测试在所有项目中,使用的数量:

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

sbt documentation

discussion

0

另一种可能性,是根据https://stackoverflow.com/a/27068019/1922026,是根项目定义一个命令别名:

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

其中S1,S2和S3的子项目。当您在根项目中并运行“测试”时,测试将按照定义的顺序依次执行。

相关问题