Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 有没有办法让cucumber在进入下一个场景之前再次尝试一个场景_Testing_Cucumber_Hook_Suite - Fatal编程技术网

Testing 有没有办法让cucumber在进入下一个场景之前再次尝试一个场景

Testing 有没有办法让cucumber在进入下一个场景之前再次尝试一个场景,testing,cucumber,hook,suite,Testing,Cucumber,Hook,Suite,我正在努力清理工作中的功能套件,我想知道是否有办法让cucumber重复一个场景,看看是否通过,然后再进入功能中的下一个场景?Phantom是我的无头webkit浏览器poltergeist是我的司机 基本上,我们的构建一直在失败,因为盒子被所有的测试压得喘不过气来,在一个场景中,页面将没有足够的时间呈现我们要测试的内容。因此,这会产生假阳性。我不知道什么样的测试会使构建中断 最好是在每个场景之后都有一个钩子(一个想法)。如果场景通过,请打印该场景的结果并继续。但是,如果场景失败,那么请尝试再次

我正在努力清理工作中的功能套件,我想知道是否有办法让cucumber重复一个场景,看看是否通过,然后再进入功能中的下一个场景?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 @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。

我广泛使用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

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

谢谢你的回答。我刚刚投了赞成票。我会尝试一下,并在成功后接受答案。一个问题是我们的构建没有看到以前的一些成功。当它写入junit_format_rerun时,它会覆盖以前的内容。因此,除非要素文件中的所有要素在同一过程中传递,否则某些信息将丢失。cucumber中是否有附加格式化程序和/或编写cucumber格式化程序的第三方库足够智能,可以将成功的功能放置在何处?我可以写一个并把它放在github上,但我想其他人可能已经面临这个问题了。您如何处理跳过的功能?这些功能似乎没有登录到rerun.txt中。也许我没有正确理解您的问题,但为什么要在重新运行中记录跳过的功能?如果该功能有一个跳过的标记,它将永远不会重试(因此,将不会登录到rerun.txt)。我不确定是否有什么东西可以处理,所以你必须调查一下。但是,为什么要查看/记录您以前的成功(在终端之外)?重新运行的目标是只记录失败的场景,以便它可以重新运行。老实说,听起来您在这里有一个负载容量问题。如果您的测试环境被一些小黄瓜测试淹没,那么如果多个用户同时点击它,真实环境有多大的机会呢。也许重点应该放在一个更健壮、更像生产的测试服务器上,或者在一个可能相当适度的负载下解决站点性能问题(这是在所有功能测试之后,而不是负载测试,有多少测试同时运行?@mpdunson您有没有找到一种方法?我基本上知道这里的
cumber-re-run
命令,但这对我来说不起作用。由于应用程序的设计方式,我所做的测试相互依赖。因此,如果第二个测试用例由于某种原因失败,那么我所有的测试都会失败。我一直在寻找一种类似于你的方法,如果我可以运行这个特定场景,直到它过去,然后再进入下一个场景?而不是在步骤中使用
直到
除非
循环。有什么想法吗?
cucumber -p rerun