1

我正在尝试在工作中清理我们的功能套件,我想知道是否有办法让黄瓜重复一个场景并查看是否通过,然后再进入功能中的下一个场景?Phantom 是我的无头 webkit 浏览器 poltergeist 是我的驱动程序。

基本上,我们的构建一直失败,因为盒子被所有的测试压得喘不过气来,而且在一个场景中,页面没有足够的时间来呈现我们正在尝试测试的任何内容。因此,这会产生误报。我不知道什么测试会挂起构建。

最好在每个场景之后都有一个钩子(一个想法)。如果场景通过然后很好地打印该场景的结果并继续前进。但是,如果场景失败,请尝试再次运行它,以确保它不会让构建变得头晕目眩。然后,只有这样,您才会打印该场景的结果并继续进行下一个测试。

有谁知道如何实现它?

我在想类似的东西

 After do |scenario|
     if scenario.failed?
         result = scenario.run_again # I just made this function up I know for a fact this doesn't actually exist (see http://cukes.info/api/cucumber/ruby/yardoc/Cucumber/Ast/Scenario.html)
         if !result
            Cucumber.wants_to_quit = true
         end
     end
 end

我看到的最初解决方案是:如何使用 Cucumber 重新运行失败的场景?

这很好,但我需要确保

 cucumber @rerun.txt

如果测试通过,实际上更正了报告。像

 cucumber @rerun.txt --format junit --out foo.xml

其中 foo.xml 是 junit 报告,最初说功能 1、2 和 5 正在通过而 3 和 4 失败,但现在会说 1、2、3、4 和 5 正在通过,即使 rerun.txt 只说重新运行 3 和 4。

4

1 回答 1

3

我广泛使用 rerun,是的,它确实将正确的功能输出到 rerun.txt 文件中。我有一个 cucumber.yml 文件,它定义了一堆“配置文件”。注意重新运行配置文件:

    <%
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
%>

<% standart_opts = "--format html --out report.html --format rerun --out rerun.txt --no-source --format pretty --require features --tags ~@wip" %>
default: <%= standart_opts %> --no-source --format pretty --require features


rerun: <%= rerun_opts %> --format junit --out junit_format_rerun --format html --out rerun.html --format rerun --out rerun.txt --no-source --require features

core: <%= standart_opts %> --tags @core
jenkins: <%= standart_opts %> --tags @jenkins

所以这里发生的是我运​​行黄瓜。在初始运行期间,它会将所有失败的场景放入 rerun.txt 文件中。然后,之后,我将使用以下命令仅重新运行失败的测试:

cucumber -p rerun

唯一的缺点是它需要一个额外的命令(当然,您可以自动化)并且如果您有测试指标,它会使测试指标变得混乱。

于 2014-01-31T22:37:11.197 回答