特别例外(红宝石)立即重新尝试失败的黄瓜

时间:2014-01-10 15:34:17

标签: ruby cucumber

背景:

我们在Windows VM上通过Jenkins运行我们的黄瓜。我们经常得到以下异常(可能一天两次,而套件运行5或6次):

No connection could be made because the target machine actively refused it. - connect(2)  (Errno::ECONNREFUSED)

此异常没有一致性。它可以并且已经触及任何代码行上的任何步骤。我偶尔也会这样做(尽管很少见)。黄瓜失去了与浏览器交互的所有能力,之后的所有测试都失败了。

在此代码中

After do |scenario|
  if scenario.failed?

我想检查一下我是否得到了这个特殊的异常。如果我这样做,我将通过系统调用终止Chrome浏览器,然后重新启动它(简单部分)。但是,我想重新运行刚刚失败的场景,然后继续使用套件的其余部分。这可能吗?

备注:我知道浏览器没有关闭有两个原因。 1.在当地,我可以看到它。 2.尝试再次启动测试会导致VM出现故障,因为Chrome已打开。 VM未关闭。请记住,这偶尔会发生在本地。我花了几个小时在谷歌搜索解决这个问题,我发现没有一个对我们有用。

版本:

Cucumber 1.3.8
ruby 1.9.2
chromedriver 2.4 
chrome 29 (We run tests against a javascript environment that uses GWT, which often breaks with new chrome releases)

提前致谢!

2 个答案:

答案 0 :(得分:2)

为什么不使用现有的重新运行格式化程序:

bundle exec cucumber --format rerun --out tmp/failed.txt

failed.txt将存储失败的测试以及行号(并且--out是可选的)。这将在运行后重试运行所有失败的测试。

我不确定您是否可以在现有运行之间运行/调用方案,因此对于损坏的方案,重新启动chrome - >运行失败的测试 - >由于你的跑步尚未完成,继续可能无效。

但是,您可以在类似的行上捕获异常(伪代码):

After do |scenario|
  if scenario.failed?
  e = scenario.exception

  <match e.class with your exception's class>

如果匹配,请使用cucumber @ failed.txt创建一个命令,然后使用您要运行的其他方案

cucumber @failed.txt features/sample.feature -t @test -t @all -n 'test scenario3' ...

然后单独发出此命令。这将首先执行'failed.txt'文件中的方案(当我们使用重新运行格式化程序时创建),然后继续进行其他提到的测试。 我希望这会有所帮助。

答案 1 :(得分:0)

你可以说:

fail "Your failure message here..."

你将得到一条带有该消息的RuntimeError