2010-06-16 32 views
6

Tôi đang cố gắng chạy tính năng dưa chuột nhiều lần (tức là 500 lần). Có một cách để làm điều này hơn tôi phải gõ vào cùng một lệnh mỗi lần? Tôi đoán điều này có thể được thực hiện bằng cách sử dụng Rake? Tôi không phải là chuyên gia trong việc sử dụng cào hay dưa chuột.Chạy tính năng dưa chuột nhiều lần

Sẽ đánh giá cao sự trợ giúp của bạn.

Cảm ơn

+0

Điều này liên quan đến watir như thế nào? –

+0

Tôi không thể tin rằng tôi là người đầu tiên nói điều đó, nhưng: đừng làm điều này. –

+0

Tại sao không làm điều này? Nếu bạn đang thử nghiệm, và một thử nghiệm là flaky, nó có thể hữu ích để chạy nó 5 lần để xem có bao nhiêu lần nó không thành công và nếu nó không ở cùng một vị trí mỗi lần. – zmorris

Trả lời

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

Tôi chắc chắn bạn chỉ có thể làm điều này trong một kịch bản bash là tốt, nhưng tôi biết ruby ​​tốt hơn so với bash. – lambdabutz

+1

'cho x trong {1,.500}; làm dưa chuột; done' nên thực hiện thủ thuật trừ khi bạn đang chạy phiên bản Bash cũ hơn. Nó thực sự dễ dàng hơn, ngắn hơn và nhanh hơn trong Ruby! – irkenInvader

+0

Và biểu cảm hơn! – lambdabutz

5

Trong tập tin cào của bạn:

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  

Trước tiên tôi tạo ra một nhiệm vụ dưa chuột mặc định rằng sẽ thực hiện tất cả các tính năng của tôi và định dạng chúng khá cho tôi.

Sau đó, tôi xác định tác vụ cào, có tên feature sẽ chấp nhận hai thông số name của đối tượng địa lý và times thực thi.

Sau đó tôi tăng thêm tác vụ cuke để sử dụng tính năng name mà tôi đã chỉ định và sau đó thực hiện tác vụ Rake số lần được chỉ định.

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

Được thăng hạng. Khi tôi thực hiện điều này nếu một thử nghiệm thất bại chương trình sẽ thoát ra, bạn có thể phải quấn dòng thực thi trong khối try catch – jmccure

1

Tag tính năng của bạn với một cái gì đó như: @ 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 

Tạo một tập tin trong thư mục ruby ​​features/support/ của bạn. Công ước có vẻ là env.rb hoặc hooks.rb, nhưng không quan trọng bạn gọi nó là gì miễn là nó nằm trong thư mục đó. Tôi gọi tôi là env.rb. Đặt mã sau vào trong đó:

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

Khi bạn hoàn tất, hãy xóa thẻ. Nếu bạn chỉ muốn chạy một kịch bản từ tính năng của mình, chỉ cần gắn thẻ cho nó. Bằng cách này, bạn có thể chạy bao nhiêu hoặc vài lần kiểm tra như bạn muốn 500 lần, mà không cần phải sử dụng Rake hoặc lộn xộn với dòng lệnh. Điều này đặc biệt hữu ích nếu bạn đang di chuyển giữa các môi trường hệ điều hành.

+0

nó sẽ tốt hơn nếu móc xung quanh có thể lấy regex và phân tích cú pháp các lần từ thẻ! Hoặc nếu chúng ta có thể lấy thời gian từ dòng lệnh. –

-2

Đây là một tác phẩm ngớ ngẩn xung quanh, nhưng cố gắng này

tính năng dưa chuột/tính năng file.feature /../ tính năng/file.feature

miễn là đường dẫn đến tập tin là không giống nhau mỗi lần , bạn có thể đính vào càng nhiều ".." như bạn muốn

3

này cũng có thể được thực hiện bằng cách sử dụng Outline Kịch bản và các bước lồng nhau:

Tạo một Outline Kịch bản với N Ví dụ. Kịch bản sẽ chạy N lầ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 | 
      … 

Sử dụng bước hiện tại của bạn như bước lồng trong đề cương kịch bản bạn xác định:

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 

Ưu điểm:

  • Chỉ có một báo cáo được viết cho toàn bộ chạy thử; không có các báo cáo N để tìm hiểu để xem kết quả.
  • Nó sử dụng chức năng dưa chuột hiện có; không cần phải sửa đổi khuôn khổ .
  • Người thử nghiệm đã hiểu cách Hoạt động của Kịch bản hoạt động.

Nhược điểm:

  • Ugly, file multiline .feature.
Các vấn đề liên quan