2012-08-17 15 views
13

छोड़ें मैं अजगर में लिखे गए वेब एप्लिकेशन के परीक्षणों पर काम कर रहा हूं।पायथन नोजेटेस्ट कुछ टेस्ट

मान लीजिए कि मेरे test_login.py मॉड्यूल में 5 परीक्षण हैं।

प्रत्येक एकल परीक्षा एक कक्षा है।

अक्सर एक आधार परीक्षण होता है जो टेस्टफ्लो क्लास को बढ़ाता है, जो हमारी पूर्वनिर्धारित टेस्ट क्लास है।

और फिर इस मॉड्यूल में अन्य परीक्षण उस बेस टेस्ट का विस्तार करते हैं।

उदाहरण के लिए:

#The base test 

TestLogin(TestFlow): 
    #do login_test_stuff_here 

#Another test in the same module 

TestAccountDetails(TestLogin) 
    #do account_details_test_stuff_here 

... 

यह आदेश उदाहरण के लिए परीक्षण करने के लिए AccountDetails क्योंकि उपयोगकर्ता के प्रवेश हो गया है, वास्तव में काफी आसान है, तो मैं सिर्फ TestLogin परीक्षण से विरासत सकता है और मैं अन्य कार्यक्षमता का परीक्षण के लिए तैयार हूँ एक लॉग उपयोगकर्ता के रूप में।

सभी परीक्षण परियोजना/परियोजना/परीक्षण फ़ोल्डर में हैं।

हम परीक्षण चलाने के लिए विकल्प के साथ-साथ-पिलोन के साथ नोसेटेट का उपयोग करते हैं।

और मेरा प्रश्न यह है कि अगर कुछ टेस्ट क्लास को "इस परीक्षण न करें" के रूप में चिह्नित करने का कोई तरीका है।

क्योंकि मैं इन "बेस टेस्ट" को निष्पादित करने के लिए समय बर्बाद नहीं करना चाहता, क्योंकि वे उन अन्य परीक्षणों द्वारा निष्पादित किए जाएंगे जो उनके द्वारा Iherit।

शायद इन परीक्षणों के टन होंगे और मैं हर दूसरे सेकेंड को सहेजना चाहता हूं जहां यह संभव हो।

मैं पहले से ही छोड़ें, SkipTest या @nottest, लेकिन test_methods एक ceratin TestClass भीतर के लिए इनमें से केवल काम की तरह कुछ मिल गया है, तो मुझे नहीं लगता कि इसे यहाँ काम करेंगे है, मैं प्रत्येक के लिए एक एकल वर्ग है गया परीक्षण का मामला।

उत्तर

2

http://nose.readthedocs.org/en/latest/writing_tests.html

लेखन परीक्षण

py.test साथ के रूप में, नाक परीक्षण unittest.TestCase की उपवर्गों होने की ज़रूरत नहीं। कॉन्फ़िगर किए गए टेस्ट मैच नियमित अभिव्यक्ति ((?:^| [\ B _ \ .-]) [Tt] est) डिफ़ॉल्ट रूप से - है, जो किसी शब्द सीमा पर परीक्षण या परीक्षण है या उसके बाद किसी भी फ़ंक्शन या क्लास से मेल खाता है या _) और उस मॉड्यूल में रहता है जो उस अभिव्यक्ति से मेल खाता है एक परीक्षण के रूप में चलाया जाएगा। विरासत unittest परीक्षण मामलों के साथ संगतता के लिए, नाक unittest से परीक्षण लोड भी होगा .स्टेस उपclasses बस unittest करता है। Py.test की तरह, नाक क्रम में कार्यात्मक परीक्षण चलाता है जिसमें वे मॉड्यूल फ़ाइल में दिखाई देते हैं। टेस्टकेस-व्युत्पन्न परीक्षण और अन्य टेस्ट क्लास वर्णमाला क्रम में चलाए जाते हैं।

उपरोक्त regex और नियम नोट करें। रेगेक्स से मेल नहीं खाते, अपने कार्यों/विधियों/कक्षाओं का नाम दें, और वे नहीं चलेंगे।

कहा जा रहा है कि, मैं परीक्षण के लिए विरासत विरासत के आपके सुझाव की अनुशंसा नहीं करता हूं। यह निराशा और गड़बड़ी के लिए एक नुस्खा है।

आप शायद मिक्स्ड क्लास बनाने या बेस क्लास को परिभाषित करने के साथ बेहतर हो सकते हैं, जिसमें कोई वास्तविक परीक्षण नहीं है - लेकिन इसमें कई सहायक कार्य हैं जो कक्षाओं को विरासत में रखते हैं और स्वयं के रूप में उपयोग कर सकते हैं।

यदि आप अधिक लोकप्रिय पैकेजों के परीक्षणों को देखते हैं, तो वे लगभग सभी दृष्टिकोण का उपयोग करते हैं।

+0

ध्यान दें कि मैच regex शामिल करने के लिए केवल गेट नहीं है - * नाक भी परीक्षण unittest.TestCase उपवर्गों से * लोड होगा। यह ऐसा कुछ भी करता है जो इसे आयात करता है। मेरे पास 'foo_helpers.py' नामक मॉड्यूल में 'FooMixin' नाम का एक परीक्षण है जिसे इसे एक परीक्षण के रूप में माना जा रहा है क्योंकि यह' unittest.TestCase' से लिया गया है। –

12

फार्म nosetests यह जब परीक्षण आप मापदंड पर नहीं बल्कि बस से फ़ाइल नाम से आधारित परीक्षण का चयन करना चाहते जाएगा http://nose.readthedocs.org/en/latest/plugins/attrib.html

अक्सर विशेषताओं को निर्दिष्ट करके नीचे के रूप में किया जा सकता है। उदाहरण के लिए, आप धीमे लोगों को छोड़कर सभी परीक्षणों को चलाने के लिए चाहते हैं। आप अपने परीक्षण विधियों पर विशेषताओं को सेट करके विशेषता चयनकर्ता प्लगइन के साथ ऐसा कर सकते हैं। यहाँ एक उदाहरण है:

def test_big_download(): 
    import urllib 
    # commence slowness... 

test_big_download.slow = 1 

एक बार जब आप एक विशेषता धीमी = 1 आपको लगता है कि परीक्षण और

$ nosetests -a '!slow' 
2

आप वास्तव में उपयोग कर सकते हैं चलाकर धीमी विशेषता होने अन्य सभी परीक्षण बाहर कर सकते हैं निर्दिष्ट किया है कक्षाओं के लिए भी सबसे पतला।

import unittest 

@unittest.skip("Class disabled") 
class TestLogin(TestFlow): 
    ... 
+0

ध्यान दें कि पायथन <= 2.6 पर आपको काम करने के लिए unittest2 इंस्टॉल करने की आवश्यकता है। – gaborous

+1

वह उपलब्ध उपयोग के मामले के लिए काम नहीं करेगा। बेस क्लास में स्किप सजावट जोड़ने से सभी उप वर्गों को भी छोड़ दिया जाएगा। यहां तक ​​कि यदि आपने बेस क्लास पर '@ unittest.skipIf (True," बेस क्लास ") का उपयोग किया है, और subclasses पर' @ unittest.skipIf (झूठी, "") ', उपclasses अभी भी छोड़ दिया गया है –

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