2010-09-01 28 views
6

Tôi đang sử dụng dưa chuột với webrat/cơ giới hóa để kiểm tra trang PHP và tôi đang cố gắng cải thiện tốc độ chạy thử bằng cách tránh chạy các bước không cần thiết.Chạy một bước đăng nhập trước khi phác thảo kịch bản trong dưa chuột

Tôi muốn sử dụng một phác thảo kịch bản để kiểm tra một toàn bộ rất nhiều các trang được truy cập/được bảo vệ tùy thuộc vào người dùng đăng nhập:

Scenario Outline: Check page access is secure 
    Given I am logged in as "<user>" 
    And I am on <page> 
    Then I should see "<message>" 
Examples: 
    |user |page  |message    | 
    |admin |home page |Welcome to my site  | 
    |admin |admin page|Site administration | 
    |editor|home page |Welcome to my site  | 
    |editor|admin page|Access denied   | 
    |guest |home page |Please login   | 
    |guest |admin page|Access denied   | 
    ... 

này hoạt động, nhưng với tôi có 10 vai trò và hàng trăm các trang cần kiểm tra, có rất nhiều chi phí trong việc chạy bước đăng nhập mỗi khi đường viền chạy.

Tôi tự hỏi liệu có cách nào để chạy bước đăng nhập một lần cho mỗi vai trò, sau đó truy cập từng trang lần lượt mà không cần phải đăng nhập mỗi lần. tức là chạy "đăng nhập, truy cập 1, hãy truy cập 2, truy cập 3" thay vì "đăng nhập, truy cập 1, đăng nhập, truy cập 2, đăng nhập, truy cập 3".

Tôi đã thử sử dụng móc và Nền, nhưng dường như không thể tìm thấy cách tiếp cận hoạt động. Điều này có thể không?

+0

Bạn cũng có thể xem [Đồ đạc] (http://github.com/aslakhellesoy/cucumber/wiki/Fixtures). – rampion

Trả lời

0

Bạn có thể thực hiện các bước Given chỉ đăng nhập một lần cho mỗi vai trò:

# lazily log in each role as needed, and keep the login in a hash table 
$logins = Hash.new do |_logins, role| 
    _logins[role] = do_expensive_login(role) 
end 
Given /^I am logged in as "([^"]+)"$/ |role| 
    @login = $logins[role] 
end 

Tất nhiên, nếu các bước tương lai có thể thay đổi trạng thái đăng nhập, hoặc thay đổi thế giới như vậy mà đăng nhập là không còn hợp lệ nữa, điều này có thể giúp bạn giảm tốc độ, vì vậy hãy cẩn thận.

+0

Điều đó có vẻ giống như một cách tiếp cận tốt nếu trang web tôi đã thử nghiệm được viết bằng Ruby, nhưng tôi đang thử nghiệm một trang web PHP và tôi không chắc chắn làm thế nào để lưu trạng thái đăng nhập. – simoncoggins

0

Thay vì đặt tất cả thông tin về những gì có thể truy cập/được bảo vệ trong đối tượng địa lý, hãy xem xét đặt chúng trong bước xác định (thậm chí tốt hơn là sử dụng định nghĩa trong ứng dụng của bạn, nhưng điều đó không dễ dàng nếu ứng dụng của bạn không trong quá trình)

Nếu bạn có thể sống với một tính năng đó là như trừu tượng như

Given I am an admin 
Then I should be able to access admin pages 

Sau đó, bạn có thể làm tất cả công việc hiệu quả hơn nhiều trong defs bước

Sau đây là chỉ là một phác thảo đang để cung cấp cho một số ý tưởng của wh tại bạn có thể làm ...

# step def 
module AccessHelper 
    AdminPages = { 
    {page: ..., msg: ... 
    ... 
    } 
    def login_as ... ; end 
    def correct_message? msg ...; end 
    def check_admin_access_for user 
    @errors = [] 
    login_as @I 
    AdminPages.each do |page| 
     visit page[:path] 
     errors << page unless correct_message? 
    end 
    end 
end 
World(AccessHelper) 

Then "I should be able to access admin pages" do 
    check_admin_access_for @I 
    @errors.should be_empty 
end 

Bạn có thể mở rộng điều này bằng cách sử dụng toàn bộ sức mạnh của ruby ​​để đáp ứng các nhu cầu cụ thể của bạn. Ý tưởng cơ bản là bạn luôn có thể thực hiện một số hành động dưa chuột và tóm tắt chúng thành một hành động dưa chuột.

Hy vọng điều đó hữu ích

+0

Dấu trừ của cách tiếp cận như vậy là các bên liên quan không thể viết mã không thể xem trang và thư nào được cho là được kiểm tra –

Các vấn đề liên quan