2013-06-08 3 views
15

मुझे तार एकीकरण परीक्षण सूट के ऊपर नाक का उपयोग करने की इच्छा है। हालांकि, इनमें से कुछ परीक्षणों के निष्पादन का आदेश महत्वपूर्ण है।इकाई परीक्षण निष्पादन के आदेश को निर्दिष्ट करने के लिए एक नाक प्लगइन

जिसके अनुसार, मैंने सोचा कि मैं एक साथ एक त्वरित प्लगइन टॉस आदेश के साथ एक परीक्षण को सजाने के लिए चाहते हैं मैं इसे निष्पादित हैं: https://gist.github.com/Redsz/5736166

def Foo(unittest.TestCase): 

    @step(number=1) 
    def test_foo(self): 
     pass 

    @step(number=2) 
    def test_boo(self): 
     pass 

की समीक्षा प्लगइन्स मैंने सोचा था में बनाया से, मैं ओवरराइड बस सकता है loadTestsFromTestCase और सजाया 'कदम संख्या' .:

def loadTestsFromTestCase(self, cls): 
    """ 
    Return tests in this test case class. Ordered by the step definitions. 
    """ 
    l = loader.TestLoader() 
    tmp = l.loadTestsFromTestCase(cls) 

    test_order = [] 
    for test in tmp._tests: 
     order = test.test._testMethodName 
     func = getattr(cls, test.test._testMethodName) 
     if hasattr(func, 'number'): 
      order = getattr(func, 'number') 
     test_order.append((test, order)) 
    test_order.sort(key=lambda tup: tup[1]) 
    tmp._tests = (t[0] for t in test_order) 
    return tmp 

इस विधि क्रम मैं इच्छा में परीक्षण लौटा रहा है, लेकिन जब परीक्षण नाक द्वारा क्रियान्वित की जा रही हैं वे इस क्रम में निष्पादित नहीं किया जा रहा है द्वारा परीक्षण का आदेश ?

शायद मुझे किसी अन्य स्थान पर ऑर्डर करने की इस अवधारणा को स्थानांतरित करने की आवश्यकता है?

अद्यतन: मैंने जो टिप्पणी की है, उसके अनुसार प्लगइन वास्तव में अपेक्षित काम कर रहा है। मुझे पिचर्म टेस्ट रिपोर्टर पर भरोसा करने के लिए गलत लगा गया था। परीक्षण अपेक्षित के रूप में चल रहे हैं। मैंने जो सवाल उठाया उसे हटाने के बजाय मैं इसे छोड़ दूंगा।

+1

अच्छा, मुझे लगता है कि इस सवाल को नजरअंदाज कर दिया जा सकता है, प्लगइन अपेक्षित रूप से काम कर रहा है ... मुझे पिचमर से चलते समय एक मस्तिष्क का फट था जहां परीक्षण संवाददाता को अलग-अलग आदेश दिया जा रहा था। हालांकि परीक्षणों को वास्तव में निष्पादन के दौरान अपेक्षित के रूप में आदेश दिया जा रहा है। – Jesse

+3

मैं बहुत अधिक अनुमान नहीं लेना चाहता, क्योंकि मुझे आपका कोड आधार नहीं पता है, लेकिन स्वचालित परीक्षण के साथ मेरे अनुभव के आधार पर, यह बहुत संभावना है कि सर्वोत्तम दीर्घकालिक समाधान आपके परीक्षणों को इस तरह से फिर से आर्किटेक्ट कर रहा है वे अब एक दूसरे पर निर्भरता नहीं रखते हैं। आप सेटअप कार्यों में आवश्यक पूर्व शर्त को दोहराने पर विचार कर सकते हैं, या उन घटनाओं के अनुक्रमों के लिए जो वास्तव में निर्भर हैं, उन्हें एक परीक्षण में विलय कर सकते हैं। यह भी ध्यान रखें कि, एक यूनिट परीक्षण के रूप में, आपको आम तौर पर कार्यक्षमता की व्यक्तिगत "इकाइयों" का परीक्षण करना चाहिए, और जहां भी संभव हो बाहरी आईओ से परहेज करना चाहिए। – GrandOpener

उत्तर

16

documentation से:

[...] नाक वे किस क्रम में मॉड्यूल फ़ाइल में दिखाई में कार्यात्मक परीक्षण चलाता है। टेस्टकेस-व्युत्पन्न परीक्षण और अन्य परीक्षण वर्ग वर्णमाला क्रम में चलाए जाते हैं।

तो एक सरल उपाय अपने परीक्षण के मामले में परीक्षण नाम बदलने के लिए हो सकता है:

class Foo(unittest.TestCase): 

    def test_01_foo(self): 
     pass 

    def test_02_boo(self): 
     pass 
1

मैं इसके लिए एक समाधान पाया PyTest आदेश प्लगइन here का प्रयोग करके।

CLI में py.test YourModuleName.py -vv की कोशिश करो और परीक्षण आदेश वे अपने मॉड्यूल (पहले test_foo और फिर test_bar)

मैं ऐसा ही किया था और मेरे लिए ठीक काम करता है में दिखाई में चलेंगे।

नोट: आपको PyTest पैकेज स्थापित करने और इसे आयात करने की आवश्यकता है।

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