2010-09-01 12 views
6

में परिदृश्य रूपरेखा से पहले एक लॉगिन कदम चल रहा है मैं webrat साथ ककड़ी का उपयोग कर रहा/PHP साइट का परीक्षण करने के मशीनीकरण और मैं गति से चल रहा है अनावश्यक चरणों से परहेज द्वारा की गई जांच में सुधार करने की कोशिश कर रहा हूँ।ककड़ी

मैं कर रहे हैं सुलभ/संरक्षित उपयोगकर्ता पर निर्भर करता है जो में लॉग ऑन है पृष्ठों की एक पूरी बहुत कुछ जांच करने के लिए एक परिदृश्य रूपरेखा का उपयोग करना चाहते:

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   | 
    ... 

यह काम करता है, लेकिन यह देखते हुए मैं 10 भूमिकाओं और सैकड़ों पृष्ठों को जांचने के लिए, प्रत्येक बार रूपरेखा चलने पर लॉगिन चरण चलाने में बहुत अधिक ओवरहेड होता है।

अगर वहाँ, हर पात्र के लिए एक बार लॉगिन कदम को चलाने के लिए तो हर बार प्रवेश करने की जरूरत के बिना बदले में प्रत्येक पृष्ठ पर जाएँ एक तरीका है मैं सोच रहा हूँ। i.e चलाएं "लॉगिन करें, 1 पर जाएं, 2 पर जाएं," 3 पर जाएं "लॉगिन के बजाय, 1 पर जाएं, लॉगिन करें, 2 पर जाएं, लॉगिन करें, 3 पर जाएं"।

मैंने हुक और पृष्ठभूमि का उपयोग करने का प्रयास किया है, लेकिन ऐसा लगता है कि काम करने वाले दृष्टिकोण को नहीं मिल रहा है। क्या यह संभव है?

+0

आप [फिक्स्चर] की जाँच करने के लिए (http://github.com/aslakhellesoy/cucumber/wiki/Fixtures) के रूप में अच्छी तरह से चाहते हो सकता है

आशा thats। – rampion

उत्तर

0

आप Given कदम को लागू कर सकता है केवल हर पात्र के लिए एक बार में लॉग इन करने:

# 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 
बेशक

, भविष्य के कदम लॉगिन के राज्य को बदल सकते हैं, या दुनिया को बदल ऐसी है कि लॉगिन है अगर अब मान्य नहीं है, यह आपको लाइन के नीचे नली कर सकता है, इसलिए ध्यान से चलें।

+0

यह एक अच्छा दृष्टिकोण जैसा प्रतीत होता है यदि साइट का परीक्षण मैं रूबी में लिखा था, लेकिन मैं एक PHP साइट का परीक्षण कर रहा हूं और मुझे यकीन नहीं है कि लॉगिन स्थिति को कैसे सहेजना है। – simoncoggins

0

सुविधा में सुलभ/संरक्षित होने के बारे में सारी जानकारी डालने के बजाय, उन्हें चरण डीफ़ में डालने पर विचार करें (आपके आवेदन में परिभाषाओं का भी बेहतर उपयोग करना होगा, लेकिन यदि आपका ऐप आसान नहीं है तो यह आसान नहीं है नहीं इस प्रक्रिया में)

आप एक विशेषता यह है कि के रूप में

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

के रूप में सार है के साथ रह सकते हैं तो फिर आप सब काम अधिक कुशलता से कदम defs

बाद में कर सकते हैं सिर्फ एक कोड स्केच है wh के बारे में कुछ विचार देने के लिए आप कर सकते हैं पर ...

# 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 

आप निश्चित रूप से यह आप विशेष जरूरतों को पूरा करने माणिक की पूरी शक्ति का उपयोग कर विस्तार कर सकते हैं। मूलभूत विचार यह है कि आप हमेशा कई ककड़ी क्रियाएं ले सकते हैं और उन्हें एक ककड़ी की क्रिया में जोड़ सकते हैं। उपयोगी

+0

इस तरह के दृष्टिकोण का ऋण यह है कि हितधारकों जो कोड नहीं लिख सकते हैं वे नहीं देख सकते कि कौन से पेज और संदेश चेक किए जाने चाहिए –

संबंधित मुद्दे