0

https://github.com/lihaoyi/utest

如文档中所述,uTest 并行运行测试。如果使用,一个测试套件中的测试用例可以按顺序运行

import utest.ExecutionContext.RunNow

但是 sbt 总是并行运行不同的测试套件。https://github.com/lihaoyi/utest#parallel-testing

这通常对性能有好处,但在测试对象或其他“单一资源”时,这可能会导致问题。如果在多个测试套件中测试或使用同一对象,这些并行测试可能会相互干扰。

日志是一个很好的例子:日志可以使用一个通用工厂对象,在某些情况下,这个对象可以包含默认日志级别或日志实例的数据结构等状态。日志用于几个软件模块/几个测试套件中,如果其中之一那些测试套件测试日志本身,然后其他测试套件可能会导致日志测试套件中的随机错误结果。数据库是“单一资源”的另一个例子。

有什么方法可以限制 uTest 测试套件的并行运行,以便用户可以决定哪些测试套件始终按顺序运行,哪些测试套件可以并行运行?

例如:依次运行测试套件:com.XXX.yyy.MyTestSuiteA、com.XXX.yyy.MyTestSuiteB 和 com.XXX.yyy.MyTestSuiteC(按此顺序),其余的并行运行(DZ)。

sbt“脚本”不是一个好的解决方案

sbt testOnly com.XXX.yyy.MyTestSuiteA
sbt testOnly com.XXX.yyy.MyTestSuiteB
sbt testOnly com.XXX.yyy.MyTestSuiteC
sbt testOnly com.XXX.yyy.MyTestSuiteD
sbt testOnly com.XXX.yyy.MyTestSuiteE
sbt testOnly com.XXX.yyy.MyTestSuiteF
...

因为那时没有任何东西是并行运行的,我必须列出所有测试套件。这样的事情可能很好:

sbt test -- sequentially com.XXX.yyy.MyTestSuiteA, com.XXX.yyy.MyTestSuiteB, com.XXX.yyy.MyTestSuiteC

这意味着其余的可以以任何顺序并行运行。或者

sbt test -- sequentially 

意味着所有测试套件都按顺序运行

4

1 回答 1

0

这是一个快速修复,您可以将其添加到项目构建文件中,该文件可用于完整的顺序执行。

parallelExecution in Test := false

引用实际文档。

禁用测试的并行执行默认情况下,sbt 并行运行所有任务。因为每个测试都映射到一个任务,所以默认情况下测试也是并行运行的。要使给定项目中的测试串行执行:

scala parallelExecution in Test := false Test 可以替换为 IntegrationTest 以仅串行执行集成测试。请注意,来自不同项目的测试仍可能同时执行。

对于其他用例,我建议尝试标记测试并专门运行标记测试。

Tags.exclusive(Benchmark)

请参阅此文档以获取更多信息。

于 2016-02-06T09:32:37.260 回答