2012-03-23 71 views
12

在我们的构建中,有些特定情况因为我们无法控制的原因而失败,或者需要很长时间才能正确调试。这样的异步JavaScript等东西黄瓜使用标签自动重新运行失败的场景?

无论如何,有时他们的工作有时他们不这样做,所以我认为这将是很好的添加一个标签,如@rerun_on_failure或@retry会重试场景在构建失败之前X次。

我明白这不是一个理想的解决方案,但测试仍然是有价值的,我们想保持它,而不必假阴性

实际测试中的链接失效点击和预计跟踪事件被发送到服务器进行分析(通过JavaScript)。有时候,selenium网络驱动程序加载下一页的速度太快,事件没有时间发送。

感谢

+2

你可以使用wait_until? http://stackoverflow.com/questions/3876412/capybara-doesnt-recognize-dynamically-added-dom-elements – michaeltwofish 2012-03-23 22:32:53

+1

我们对其他测试使用wait_until,但在这种情况下它不适用。我会更新关于为什么的问题。谢谢 – amleszk 2012-03-23 22:46:36

+0

我不禁想到黄瓜钩可以实现这一点。可能是周围的钩子。但是,这不仅仅是重新执行场景那么简单,因为您需要您的水豚驱动程序也处于正确的状态。我试图让自己的工作,但我还没有能够做到这一点。 – iainbeeston 2012-05-26 03:46:04

回答

9

我一直在考虑写东西像你描述的,但我发现这一点:

http://web.archive.org/web/20160713013212/http://blog.crowdint.com/2011/08/22/auto-retry-failed-cucumber-tests.html

如果你厌倦了不得不重新踢由于非确定性故障而构建在您的CI服务器上,本文适合您。

简而言之:他创建了一个名为cucumber的新rake任务:rerun使用rerun.txt重试失败的测试。在这里添加一些循环最多可以重试3次(例如)应该很容易。

+2

这很有趣,但我只能用这个作为最后的手段。最好的办法是从测试中删除所有非确定性行为。 – 2012-06-09 14:03:00

+0

@Mark对于非确定性原因的非确定性失败的javascript测试,这非常困难 – 2016-12-15 22:13:21

3

最近黄瓜的版本有一个重试标志

cucumber --retry 2 

将重试测试两次,如果它失败

+0

这应该是新选定的答案。即使neomindryan当时的答案很好,但这个答案使它完全过时了。 – sergut 2017-11-30 16:12:44