2014-03-13 104 views
8

如果有时只有失败的测试,我可以请求sbt持续运行测试,直到失败?如何进行持续的测试直到flakey测试失败?

否则,我被卡住的箭头一边看着箭头。 (双关语意外,但膨松)

https://stackoverflow.com/q/22366719/1296806

+0

我可以想到的唯一方法,标记你想要的测试并在这个标签 – 4lex1v

+0

上运行'〜testOnly'也许你可以在sbt中定义自己的任务/命令,循环并调用testOnly任务,直到失败? – johanandren

+0

将需要一个命令(不是任务),我相信 –

回答

3

老问题,但刚刚有同样的需要我自己,这里是一个解决方案:sbt将返回非零退出代码,如果你运行一次与测试,所以,一种方式来循环,直到失败是只需看看外壳中的退出代码:

while [ $? -eq 0 ]; do sbt test; done 
+1

没有人会对绿色小气。 –

+0

我在{1..100}中为'i做了类似的事情;这样可以很好的不会每次加载SBT,因为这占用了大部分时间,这可以通过使用Ammonite- REPL而不是SBT – einnocent

+0

我的一个班轮:'i = 0; while sbt siteService/test; do echo -e“Count:$ i \ n \ n \ n \ n \ n \ n”; i = $((i + 1) ); sleep 0.2; done; echo $ i' –

0

在我看来,它并不特别适用于SBT或任何其他构建管理工具。这没有内置的SBT功能。你必须建立一个,但它远不如SBT所提供的 - 建立配置管理。造成构建/测试失败的情况可能需要相当长的时间。这是非常不可预测的。

当您的测试失败时,这意味着有些情况下测试未通过。错误应该告诉你你用什么来改进测试。

ScalaCheck: Property-based testing for Scala可能会有所帮助。

+0

我没有downvote争议的建议,sbt不是像'〜compile'这样的交互式工具,直到我得到正确的语法为止。在这里,我要求'〜测试'直到片状测试失败。 –

10

我遇到了同样的问题,并且我最终将其作为命令实现。

lazy val root = Project("test", file(".")). 
    settings(commands += Command.command("testUntilFailed") { state => 
    "test" :: "testUntilFailed" :: state 
    }) 

好处是它会跳过SBT加载。您还可以添加额外的参数或运行testOnly来测试单个测试。

+1

这应该是公认的答案!运行速度更快 –

+0

@SaadMalik绿色检查意味着“解决了我的问题” Upvotes意味着很好的答案。大多数上涨意味着总体上最好的答案。 –

1

我为片状测试检测创建了sbt插件:sbt-flaky。您可以运行测试:

  • 指定时间sbt clean "flaky duration=30"
  • 指定的时间sbt clean "flaky times=30"
  • ,直到第一次失败sbt clean "flaky firstFail"

这个插件的优点是故障的汇总,历史趋势和在管道中添加片状测试检测的可能性。