2010-06-16 2 views
6

Я пытаюсь запустить функцию огурца несколько раз (т.е. 500 раз). Есть ли способ сделать это, чем мне приходится каждый раз вводить одну команду? Я предполагаю, что это можно сделать с помощью Rake? Я не специалист по использованию грабли или огурца.Выполнение функции огурца несколько раз

Поблагодарите вашу помощь.

Благодаря

+0

Как это связано с watir? –

+0

Не могу поверить, что я первый, кто сказал это, но: не делай этого. –

+0

Почему бы не сделать это? Если вы тестируете, а тест является отслаившимся, может быть полезно запустить его 5 раз, чтобы узнать, сколько раз он терпит неудачу, и если он терпит неудачу в одном и том же месте каждый раз. – zmorris

ответ

8
ruby -e '500.times { `cucumber` }' 
+0

Я уверен, что вы можете просто сделать это в сценарии bash, но я знаю рубин лучше, чем bash. – lambdabutz

+1

'для x в {1..500}; делать огурцы; done' должен делать трюк, если вы не используете более старую версию Bash. Однако на самом деле это проще, короче и быстрее в Ruby! – irkenInvader

+0

И более выразительный! – lambdabutz

5

В файле граблей:

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, которая принимает два параметра name функции и times исполнения.

Затем я увеличиваю задачу cuke, чтобы использовать функцию name, которую я задал, а затем выполнил задачу Rake с указанием количества раз.

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

Упрощенный. Когда я выполнил это, если тест завершился неудачно, программа выйдет, поэтому вам может понадобиться обернуть строку выполнения в блоке try catch – jmccure

1

Tag ваша функция что-то вроде: @ 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/. Конвенция представляется env.rb или hooks.rb, но не имеет значения, что вы называете ее, пока она находится в этой папке. Я называю мой env.rb. Вставьте в него следующий код:

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

Когда вы закончите, удалите тег. Если вы хотите запустить только один сценарий из своей функции, просто пометьте его. Таким образом, вы можете запускать столько или несколько тестов, сколько хотите 500 раз, без необходимости использовать Rake или mess с командной строкой. Это особенно полезно, если вы перемещаетесь между средами операционной системы.

+0

, было бы еще лучше, если бы Around hook мог взять регулярное выражение и проанализировать время из тега! Или если мы можем получить время из командной строки. –

-2

Это глупая работа вокруг, но попробовать этот

Особенность огурца/Особенность file.feature /../ Возможность/file.feature

до тех пор, как путь к файлу не совпадает каждый раз , вы можете лавировать на столько, сколько «..», как вы хотите

3

Это также может быть достигнуто с помощью сценария Outline и вложенные шаги:

Создать сценарий Схема с 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 файл.
Смежные вопросы