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

Posted

技术标签:

【中文标题】如何关闭多项目构建的并行执行测试?【英文标题】:How to turn off parallel execution of tests for multi-project builds? 【发布时间】:2012-08-07 15:23:15 【问题描述】:

我有一个多项目构建,其中包含子项目和父项目中的测试。构建被聚合,以便父项目运行子项目中的所有测试。

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

parallelExecution in Test := false

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

关于如何在项目之间全局切换并行执行测试有什么想法吗?

【问题讨论】:

【参考方案1】:

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

parallelExecution in ThisBuild := false

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

【讨论】:

抱歉,我对 Scala 有点陌生,遇到了同样的问题 - 我应该把这条线放在哪里?到项目的哪个文件? 最简单的就是放到build.sbt中(即使你在project/Build.scala中有完整的配置也会用到那个文件) 谢谢!我自己想通了,太仓促而不是思考:)。无论如何谢谢你 在 build.sbt 中的任何地方?【参考方案2】:

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

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

见sbt documentation

见discussion

【讨论】:

【参考方案3】:

这在 1.1.0 中对我有用:

Test / parallelExecution := false

【讨论】:

【参考方案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

【讨论】:

这对我不起作用:我收到References to undefined settings: Project2/*:test from Project2/*:test (/Users/the21st/Work/Project2/build.sbt:36) Did you mean Project2/web-assets-test:test ?【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

你也可以试试Global / parallelExecution := false

【讨论】:

【参考方案7】:

Test 范围内禁用并行执行的“现代”(即 sbt 1.x)等效项是将以下内容添加到您的build.sbt

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

对于那些不熟悉 sbt 语法的人,在上下文中你想做类似的事情:

lazy val main = project
  .in(file("."))
  .settings(
    name := "foo",
    // more settings
    // ...
    Global / concurrentRestrictions += Tags.limit(Tags.Test, 1)
  )

来自 sbt 文档的 tags and rules 部分。

附言ScalaTest 非常有用的设置,特别是在数据库测试期间围绕设置/拆卸逻辑。修复了一些非常令人费解的非确定性错误,在启用并行执行时您将不可避免地遇到这些错误。

【讨论】:

以上是关于如何关闭多项目构建的并行执行测试?的主要内容,如果未能解决你的问题,请参考以下文章

具有并行构建的 Jenkins

如何在多平台多项目 Kotlin 构建中向另一个项目的测试添加依赖项

在多模块 Maven 项目中构建所有模块后,如何运行集成测试?

Visual Studio中Rebuild和Clean + Build之间的区别

Xcode 8项目构建成功但UI测试构建失败[关闭]

如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?