背景:
我们在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)
提前致谢!
答案 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