使用格式化选项重新运行失败的黄瓜场景
Rerun failed cucumber scenarios with formatting options
一些设置:我们是一个数据仓库行,使用 Jruby/Cucumber 为我们的 ETL 过程编写验收测试。这个端到端流程涉及连续启动约 15 个 Informatica 工作流。我提到这一点只是为了让熟悉 Informatica 的人都能理解为什么我说 运行 一个 Cucumber 场景需要大约 3 分钟。将其中的 20 个放在一个功能中,运行 现在是一个小时。
我们使用 Jenkins 作为 CI 服务器来 运行 我们每晚的黄瓜测试。目前,如果我们有一个场景失败,我们会进入并修复有问题的代码,然后必须重新开始整个工作,等待长达一个小时的反馈。我们正在寻找的是一种使用可选参数在 jenkins 中启动工作的方法,该参数只会重新 运行 之前 运行 失败的场景,让我们更快地从红色到绿色转身。
查看有关重新运行失败场景的其他一些问题,我能够提出以下 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
当我 运行 第一次使用 Re运行 = FALSE 时,它工作得很好,并且完全按照预期创建了 task_name_rerun.txt 文件。然而,当我打开 Re运行 并再次启动它时,它就像我没有通过任何场景一样,给出了这个输出:
C:\jruby-1.7.20\bin\jruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load([=11=]=ARGV.shift) C:\jruby-1.7.20\bin/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.20\bin\jruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load([=13=]=ARGV.shift) C:\jruby-1.7.20\bin/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) 不能将 cucumber 与 re运行 文件一起使用并应用其他格式吗?我发现的所有其他相关问题都涉及 Rake 任务的立即重新运行,因此失败场景的构建报告仍会发布到 Jenkins。但是,由于我想再次启动它,只执行 re运行,如果 Jenkins 找不到最近的 html 报告,即使所有场景都变绿,也会将作业标记为不稳定。理想情况下,我还想再次从 re运行 输出失败,这样如果说 10 个场景最初失败,我们修复其中 5 个并 re运行,然后 rerun.txt 文件将只包含 5 个最近的失败。
2) 我不确定为什么 re运行 突然找不到我的步骤定义。我目前的猜测是因为我的特征文件不直接在features/scenarios/。在基于标签 运行ning 之前,这从来没有给我们带来问题,所以我不明白为什么用场景行号调用特定功能会突然打破它。我还没有验证移动文件是否有效。
编辑:我用第二个问题解决了这个问题。上面我使用了一堆虚拟 file/folder 名称来发布问题,在我们的实际测试套件中,嵌套文件夹名称中有空格。一旦我删除了空间,它就能够 运行 正常进行测试。
一些可能有用的额外细节:
- Jruby 版本:1.7.20
- 黄瓜版本:2.0.0
- 运行宁:Windows 7
事实证明,解决这个问题有两个方面。一个问题是我们的一些实际文件夹名称中有空格。显然 Cucumber 在 运行ning 使用标签时不关心空格,但在通过文件传入时失败(这很有意义)。重命名所有文件夹解决了第二个问题,它不会 运行 第二次。
无法重新运行 使用其他格式和输出的第一个问题的解决方案已通过升级到最新版本的 Cucumber (2.0.2) 得到解决。我无法将其追踪到特定的更改日志,但我一升级它就开始工作,没有其他更改。
一些设置:我们是一个数据仓库行,使用 Jruby/Cucumber 为我们的 ETL 过程编写验收测试。这个端到端流程涉及连续启动约 15 个 Informatica 工作流。我提到这一点只是为了让熟悉 Informatica 的人都能理解为什么我说 运行 一个 Cucumber 场景需要大约 3 分钟。将其中的 20 个放在一个功能中,运行 现在是一个小时。
我们使用 Jenkins 作为 CI 服务器来 运行 我们每晚的黄瓜测试。目前,如果我们有一个场景失败,我们会进入并修复有问题的代码,然后必须重新开始整个工作,等待长达一个小时的反馈。我们正在寻找的是一种使用可选参数在 jenkins 中启动工作的方法,该参数只会重新 运行 之前 运行 失败的场景,让我们更快地从红色到绿色转身。
查看有关重新运行失败场景的其他一些问题,我能够提出以下 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
当我 运行 第一次使用 Re运行 = FALSE 时,它工作得很好,并且完全按照预期创建了 task_name_rerun.txt 文件。然而,当我打开 Re运行 并再次启动它时,它就像我没有通过任何场景一样,给出了这个输出:
C:\jruby-1.7.20\bin\jruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load([=11=]=ARGV.shift) C:\jruby-1.7.20\bin/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.20\bin\jruby.exe --1.9 -e $stdout.sync=true;$stderr.sync=true;load([=13=]=ARGV.shift) C:\jruby-1.7.20\bin/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) 不能将 cucumber 与 re运行 文件一起使用并应用其他格式吗?我发现的所有其他相关问题都涉及 Rake 任务的立即重新运行,因此失败场景的构建报告仍会发布到 Jenkins。但是,由于我想再次启动它,只执行 re运行,如果 Jenkins 找不到最近的 html 报告,即使所有场景都变绿,也会将作业标记为不稳定。理想情况下,我还想再次从 re运行 输出失败,这样如果说 10 个场景最初失败,我们修复其中 5 个并 re运行,然后 rerun.txt 文件将只包含 5 个最近的失败。
2) 我不确定为什么 re运行 突然找不到我的步骤定义。我目前的猜测是因为我的特征文件不直接在features/scenarios/。在基于标签 运行ning 之前,这从来没有给我们带来问题,所以我不明白为什么用场景行号调用特定功能会突然打破它。我还没有验证移动文件是否有效。
编辑:我用第二个问题解决了这个问题。上面我使用了一堆虚拟 file/folder 名称来发布问题,在我们的实际测试套件中,嵌套文件夹名称中有空格。一旦我删除了空间,它就能够 运行 正常进行测试。
一些可能有用的额外细节:
- Jruby 版本:1.7.20
- 黄瓜版本:2.0.0
- 运行宁:Windows 7
事实证明,解决这个问题有两个方面。一个问题是我们的一些实际文件夹名称中有空格。显然 Cucumber 在 运行ning 使用标签时不关心空格,但在通过文件传入时失败(这很有意义)。重命名所有文件夹解决了第二个问题,它不会 运行 第二次。
无法重新运行 使用其他格式和输出的第一个问题的解决方案已通过升级到最新版本的 Cucumber (2.0.2) 得到解决。我无法将其追踪到特定的更改日志,但我一升级它就开始工作,没有其他更改。