使用格式化选项重新运行失败的黄瓜场景
一些设置:我们是使用Jruby / Cucumber为我们的ETL过程编写验收测试的数据仓库系列。 这个端到端流程涉及连续启动15个Informatica工作流程。 我只提到这一点,以便熟悉Informatica的任何人都能理解为什么当我说运行一个黄瓜场景需要大约3分钟时间。 将其中20个放在一个功能中,现在运行一个小时。
我们使用Jenkins作为CI服务器,每晚进行我们的黄瓜测试。 目前,如果我们有一个场景失败,我们进入并修复违规代码,然后必须再次启动整个工作,等待一个小时的反馈。 我们正在寻找的是一种使用可选参数在詹金斯启动工作的方法,该参数只会重新运行前一次运行失败的场景,让我们更快速地从红到绿的转身。
看看有关重新运行失败场景的其他一些问题,我能够提出以下Rake任务:
Cucumber::Rake::Task.new(:task_name) do |t|
rerun_file = "temp/task_name_rerun.txt"
tags = "--tags ~@wip --tags @task_name"
html_output = "--format html --out features/build_results/task_name.html"
junit_output = '--format junit --out features/build_results/reports'
rerun_output = "--format rerun --out #{rerun_file}"
outputs = [html_output, junit_output, rerun_output]
if (ENV['Rerun'] == 'TRUE')
t.cucumber_opts = "@#{rerun_file} #{html_output}"
else
t.cucumber_opts = "--format pretty #{tags} #{outputs.join(' ')}"
end
end
当我第一次运行Rerun = FALSE时,它运行得非常漂亮,并完全按照预期创建task_name_rerun.txt文件。 然而,当我再次打开重新运行并重新启动时,它就好像我没有任何场景通过它一样,给出这个输出:
C:jruby-1.7.20binjruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:jruby-1.7.20bin/rake task_name
io/console not supported; tty will not be manipulated
C:/jruby-1.7.20/bin/jruby -S bundle exec cucumber @temp/task_name_rerun.txt --format html --out features/build_results/task_name.html
io/console not supported; tty will not be manipulated
io/console not supported; tty will not be manipulated
Process finished with exit code 0
当我改变这些选项时,只需简单地做
t.cucumber_opts = "@#{rerun_file}"
它确实找到了该方案,但现在找不到相关的步骤:
C:jruby-1.7.20binjruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:jruby-1.7.20bin/rake task_name
io/console not supported; tty will not be manipulated
C:/jruby-1.7.20/bin/jruby -S bundle exec cucumber @temp/task_name_rerun.txt
io/console not supported; tty will not be manipulated
io/console not supported; tty will not be manipulated
@task_name
Feature: My Feature
Scenario: One should Equal One # features/scenarios/extended/path/my_test.feature:4
Given I have a passing test # features/scenarios/extended/path/my_test.feature:5
1 scenario (1 undefined)
1 step (1 undefined)
0m0.180s
You can implement step definitions for undefined steps with these snippets:
Given(/^I have a passing test$/) do
pending # Write code here that turns the phrase above into concrete actions
end
Process finished with exit code 0
所以,我的问题有两方面:
1)是否有可能使用黄瓜重新运行的文件,并应用其他格式? 我发现的每个其他相关问题都涉及到立即重新运行Rake任务,因此失败场景的构建报告仍会发布给Jenkins。 但是,由于我想再次执行该操作,因此只执行重新运行,如果Jenkins无法找到最新的html报告,那么即使所有方案都变为绿色,也会将作业标记为不稳定。 我还希望再次输出失败,以便如果说10个场景最初失败,我们修复其中的5个并重新运行,那么rerun.txt文件将只包含5个最近的失败。
2)我不确定为什么重新运行突然找不到我的步骤定义。 我目前的猜测是因为我的功能文件不直接在功能/场景/中。 在基于标签运行之前,这从来没有给我们带来任何问题,所以我不明白为什么使用场景行号调用特定功能应该突然打破它。 我还没有确认移动文件是否可以正常工作。
编辑 :我解决了第二个问题的问题。 以上我用一堆虚拟文件/文件夹名称来发布问题,在我们的实际测试套件中,嵌套的文件夹名称中包含空格。 一旦我删除了Spaces,它就能够正常运行测试。
一些额外的细节可能有所帮助:
事实证明,这个解决方案是双重的。 一个问题是我们的一些实际文件夹名称中有空格。 显然,Cucumber在使用标签运行时并不关心空间,但在通过文件传入时失败(这非常合理)。 重命名所有的文件夹解决了第二个问题,它不会再运行。
通过升级到最新版本的Cucumber(2.0.2)解决了无法使用其他格式和输出重新运行的第一个问题的解决方案。 我无法将其追踪到特定的更改日志,但只要我升级它就开始工作而没有其他更改。
链接地址: http://www.djcxy.com/p/38783.html上一篇: Rerun failed cucumber scenarios with formatting options