【问题标题】:Running a cucumber feature multiple times多次运行黄瓜功能
【发布时间】:2011-03-04 09:50:04
【问题描述】:

我正在尝试多次运行黄瓜功能(即 500 次)。有没有办法做到这一点,而不是我每次都必须输入相同的命令?我猜这可以使用 Rake 来完成?我不是使用耙子或黄瓜的专家。

感谢您的帮助。

谢谢

【问题讨论】:

  • 这与 watir 有什么关系?
  • 不敢相信我是第一个这么说的,但是:不要这样做。
  • 为什么不这样做呢?如果您正在测试,并且测试不稳定,那么运行 5 次以查看失败的次数以及是否每次都在同一个地方失败可能会很有用。

标签: ruby rake cucumber


【解决方案1】:
ruby -e '500.times { `cucumber` }'

【讨论】:

  • 我相信您也可以在 bash 脚本中执行此操作,但我比 bash 更了解 ruby​​。
  • for x in {1..500}; do cucumber; done 应该可以解决问题,除非您运行的是旧版本的 Bash。不过,它实际上在 Ruby 中更简单、更短、更快!
  • 当我在 Windows 上运行它时,我没有得到任何输出。仅在提示符下运行 cucumber 一次或使用 -f progress 可以正常工作并按预期显示输出。编辑:如果我在“黄瓜”之前添加 puts,它会显示输出。
【解决方案2】:

在您的 rake 文件中:

require 'rubygems'
require 'cucumber'
require 'cucumber/rake/task'

cuke_task = Cucumber::Rake::Task.new(:features) do |t|
  t.cucumber_opts = "features --format pretty"
end

task :feature, :name, :times do |task,args|
  puts "Executing feature: #{args[:name]} #{args[:times]} times"
  cuke_task.cucumber_opts = "features/#{args[:name]}"
  args[:times].to_i.times { Rake::Task[:features].execute }
end    

首先我创建一个默认的黄瓜任务,它将执行我的所有功能并为我设置漂亮的格式。

之后,我定义了一个名为 feature 的 rake 任务,它将接受两个参数 name 的功能和 times 的执行。

然后我扩充 cuke 任务以使用我指定的功能 name,然后按照指定的次数执行 Rake 任务。

$ rake feature['login.feature',500]

【讨论】:

  • 赞成。当我实现这一点时,如果测试失败,程序将退出,因此您可能必须将执行行包装在 try catch 块中
【解决方案3】:

用类似的东西标记你的功能:@AndIwillwalk500miles

@AndIwillwalk500miles
Feature: Walk A Mile
  'That I can walk a mile in another man's shoes.'

  Scenario: That I can walk a Mile in loafers
    Given I am wearing loafers
    And I start at point A
    When I walk a mile
    Then I am at point B

在您的 features/support/ 文件夹中创建一个 ruby​​ 文件。约定似乎是env.rbhooks.rb,但只要它在那个文件夹中,你怎么称呼它都没关系。我打电话给我的env.rb。将以下代码放入其中:

Around('@AndIwillwalk500miles') do |scenario, block|
  500.times { block.call }
end

完成后,删除标签。如果您只想从您的功能运行一个场景,只需标记它。这样,您可以根据需要运行任意多或尽可能少的测试 500 次,而无需使用 Rake 或弄乱命令行。如果您在操作系统环境之间移动,这将特别有用。

【讨论】:

  • 如果 Around 钩子可以采用正则表达式并从标签中解析时间,那就更好了!或者如果我们可以从命令行获取时间。
【解决方案4】:

这也可以使用场景大纲和嵌套步骤来完成:

创建一个包含 N 个示例的场景大纲。该场景将运行 N 次。

Feature: Login Robustness

  Scenario Outline: I want to be assured that login works consistently
    When i run login # "<login>" repeatedly, it never fails

  Examples:
    | login                |
    | repeated login # 1   |
    | repeated login # 2   |
    | repeated login # N   | 
           …

将现有步骤用作您定义的场景大纲中的嵌套步骤:

When(/^i run login \# "(.*?)" repeatedly, it never fails$/) do |login_run_number|
  puts login_run_number
  steps %{
  Given I am at initial login, Core
  When A correct username and password are entered, Native (Core)
  Then I should be logged in, Native (Core)
}
end

优点:

  • 整个测试运行只写一份报告;没有N 报告进行挖掘以查看结果。
  • 它使用现有的黄瓜功能;没有修改 需要框架。
  • 测试人员已经了解场景大纲的工作原理。

缺点:

  • 丑陋的多行 .feature 文件。

【讨论】:

  • 不需要额外的步骤定义,只需将“Scenario”更改为“Scenario Outline”并在其底部添加“Examples:”,其中包含N个不同的值和您选择的名称。跨度>
【解决方案5】:

这是一个愚蠢的解决方法,但试试这个

黄瓜特征/file.feature features/../features/file.feature

只要文件的路径每次都不相同,您可以添加任意数量的“..”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多