2013-03-28 13 views
5

के साथ एक टेस्ट सूट (परीक्षणों का मनमानी संग्रह) चला रहा है, मैं कार्यात्मक परीक्षण ढांचे को बनाने के लिए py.test का उपयोग कर रहा हूं, इसलिए मुझे चलाने के लिए सटीक परीक्षण निर्दिष्ट करने में सक्षम होना चाहिए। मैं गतिशील परीक्षण संग्रह की सुंदरता को समझता हूं, लेकिन मैं अपने परीक्षण पर्यावरण स्वास्थ्य जांच को पहले चलाने में सक्षम होना चाहता हूं, फिर मेरे प्रतिगमन परीक्षण चलाएं; यह वर्गीकरण अन्य उद्देश्यों के लिए उपयोग किए जा रहे इन सेटों में परीक्षणों को रोकता नहीं है।py.test

परीक्षण सूट जेनकिंस बिल्ड परियोजनाओं से बंधे होंगे। मैं ओएसएक्स, पायथन 2.7.3, py.test 2.3.4 का उपयोग कर रहा हूँ।

तो मैं निम्नलिखित की तरह एक परीक्षण का मामला है:

# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    def test_first(self): 
     assert 'apple' in self.testdata 

    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

और मैं इस तरह टेस्ट स्वीट है: यदि मैं सूट के खिलाफ कमांड लाइन से निम्नलिखित चलाने

# suite_regression.py 
import unittest, pytest 
import functionaltests.sample_unittest as sample_unittest 

# set up the imported tests 
suite_sample_unittest = sample_unittest.suite() 

# create this test suite 
suite = unittest.TestSuite() 
suite.addTest(suite_sample_unittest) 

# run the suite 
unittest.TextTestRunner(verbosity=2).run(suite) 

, test_first चलता है (लेकिन मुझे अतिरिक्त जानकारी नहीं मिलती है जो py.test प्रदान करेगा):

पायथन फ़ंक्शनटास्ट/suite_regressi on.py -v

अगर मैं सूट के खिलाफ निम्नलिखित चलाने के लिए, 0 परीक्षण एकत्र कर रहे हैं:

py.test functionaltests/suite_regression.py

निम्नलिखित अगर मैं चलाने testcase, test_first के खिलाफ और चलाने test_second:

py.test functionaltests/sample_unittest.py -v

मुझे नहीं लगता कि कीवर्ड के साथ py.test कैसे करों को सूट में व्यवस्थित करने में मदद करेगा। टेस्टकेस को फ़ोल्डर संरचना में रखना और फ़ोल्डर विकल्पों के साथ py.test चलाना मुझे कार्यात्मक क्षेत्र द्वारा परीक्षण व्यवस्थित करने नहीं देगा।

तो मेरे सवालों का:

  1. वहाँ एक फिर से प्रयोग करने योग्य प्रारूप में परीक्षण की मनमानी समूहों निर्दिष्ट करने के लिए एक py.test तंत्र है?
  2. क्या py.test से unittest.TestSuite का उपयोग करने का कोई तरीका है?

संपादित करें: तो मैं py.test मार्करों बाहर की कोशिश की, मुझे की सुविधा देता है जो एक मनमाना लेबल के साथ झंडा परीक्षण कार्य करता है और परीक्षण तरीकों, और फिर रन टाइम पर उस लेबल के लिए फ़िल्टर करें।

# conftest.py 
import pytest 

# set up custom markers 
regression = pytest.mark.NAME 
health = pytest.mark.NAME 

और मेरे अद्यतन परीक्षण का मामला:

# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    @pytest.mark.healthcheck 
    @pytest.mark.regression 
    def test_first(self): 
     assert 'apple' in self.testdata 

    @pytest.mark.regression 
    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

तो निम्न आदेश एकत्र करता है और चल रहा है test_first चलाता है:

py.test functionaltests/sample_unittest।py -v -m healthcheck

और यह एकत्र करता है और test_first चलाता है और test_second: तो वापस करने के लिए

py.test functionaltests/sample_unittest.py -v -m प्रतिगमन

मेरी प्रश्न: मार्कर आंशिक समाधान है, लेकिन मेरे पास अभी भी एकत्रित चिह्नित परीक्षणों के निष्पादन को नियंत्रित करने का कोई तरीका नहीं है।

+0

जब आप कहते हैं * "एकत्रित चिह्नित परीक्षणों के निष्पादन को नियंत्रित करने का कोई तरीका नहीं है" * आपका क्या मतलब है? आदेश? –

+0

हां, मैं निष्पक्षता के अनुसार निष्पादन को नियंत्रित करना चाहता हूं, और एकत्रित परीक्षणों के किसी भी डिफ़ॉल्ट क्रम पर भरोसा नहीं करता हूं। – sophe

उत्तर

2

वर्तमान में परीक्षण निष्पादन के आदेश को नियंत्रित करने का कोई प्रत्यक्ष तरीका नहीं है। एफडब्ल्यूआईडब्ल्यू, एक प्लगइन हुक pytest_collection_modifyitems है जिसे आप कुछ लागू करने के लिए उपयोग कर सकते हैं। एक प्लगइन के लिए https://github.com/klrmn/pytest-random/blob/master/random_plugin.py देखें जो यादृच्छिकरण को लागू करने के लिए इसका उपयोग करता है।

+0

यह मुझे आगे बढ़ने का एक तरीका देता है, धन्यवाद। – sophe

+0

@ किसी अन्य फ़ोल्डर में @sophe परीक्षण अभी भी वर्णानुक्रम में निष्पादित किए गए हैं :) हालांकि होल्गर कह सकता है "इस पर भरोसा न करें" –

2

मुझे लगता है कि यह देर से अब थोड़ा है, लेकिन मैं सिर्फ यहाँ डॉक्स के साथ एक इंटरैक्टिव चयन प्लगइन समाप्त:

https://github.com/tgoodlet/pytest-interactive

मैं वास्तव में हुक होल्गर ऊपर उल्लेख किया है का उपयोग करें।

यह आपको आईपीथॉन का उपयोग करके संग्रह चरण के बाद परीक्षणों का चयन करने की अनुमति देता है। परीक्षणों को ऑर्डर करना स्लाइस, सबस्क्रिप्ट्स, या टैब-पूर्णता का उपयोग करके बहुत आसान है यदि आप इसके बाद क्या कर रहे हैं। ध्यान दें कि यह विकास के दौरान उपयोग के लिए एक इंटरैक्टिव टूल है और स्वचालित रिग्रेशन रन के लिए इतना कुछ नहीं है।

अंकों का उपयोग करके लगातार क्रम के लिए मैंने pytest-ordering का उपयोग किया है जो वास्तव में काफी उपयोगी है, खासकर यदि आपके पास लंबे समय तक रिग्रेशन सूट में आधारभूत पूर्व परीक्षण है।

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