2012-08-07 14 views
24

हमने हाल ही में पाइथन परीक्षण (जो शानदार बीटीडब्ल्यू) के लिए py.test पर स्विच किया है। हालांकि, मैं यह पता लगाने की कोशिश कर रहा हूं कि लॉग आउटपुट को कैसे नियंत्रित किया जाए (यानी अंतर्निहित पायथन लॉगिंग मॉड्यूल)। हमारे पास pytest-capturelog इंस्टॉल है और यह अपेक्षित काम करता है और जब हम लॉग देखना चाहते हैं तो हम --nologcapture विकल्प पास कर सकते हैं।py.test लॉगिंग नियंत्रण

हालांकि, आप लॉगिंग स्तर (जैसे जानकारी, डीबग इत्यादि) को कैसे नियंत्रित करते हैं और लॉगिंग फ़िल्टर करते हैं (यदि आप केवल एक विशिष्ट मॉड्यूल में रूचि रखते हैं)। क्या यह प्राप्त करने के लिए py.test के लिए मौजूदा प्लगइन्स हैं या क्या हमें अपना रोल करने की आवश्यकता है?

धन्यवाद, जॉनी

+0

pytest-capturelog को https://pypi.python.org/pypi/pytest-catchlog/ द्वारा प्रतिस्थापित किया गया है, यह नीचे दी गई कई टिप्पणियों में उल्लिखित है, लेकिन शुरुआत में मैंने इस जानकारी को याद किया और उपयोग करने का प्रयास किया pytest-capturelog। मैं इस टिप्पणी को छोड़कर उम्मीद कर रहा हूं कि यह और अधिक दिखाई देगा और अगले व्यक्ति को मेरी गलती करने से बचाएगा। – cledoux

उत्तर

9

स्थापित करना और pytest-capturelog plugin का उपयोग कर अपने pytest/प्रवेश जरूरतों के सबसे को पूरा कर सकता है। यदि कुछ गुम है तो आप इसे अपेक्षाकृत आसानी से कार्यान्वित करने में सक्षम होना चाहिए।

+0

मैंने अभी इसे सबसे ज्यादा 3.0.6 के साथ करने की कोशिश की। यह ठीक काम करता है लेकिन बहुत छाल करता है: /pytest_capturelog.py:171 'pytest_runtest_makereport' हुक बहिष्कृत __multicall__ तर्क डब्ल्यूसी 1 का उपयोग करता है कोई भी pytest_funcarg__caplog: "pytest_funcarg__" उपसर्ग का उपयोग करके फिक्स्चर घोषित कर दिया गया है और इसे pytest 4.0 में हटाया जाना निर्धारित है। कृपया उपसर्ग को हटाएं और इसके बजाय @ pytest.fixture सजावट का उपयोग करें। ... – mark

+1

ऐसा लगता है कि इस समस्या को हल करने वाला एक कांटा है: https://pypi.python.org/pypi/pytest-catchlog/ –

8

रूप होल्गर कहा कि तुम pytest-capturelog उपयोग कर सकते हैं:

def test_foo(caplog): 
    caplog.setLevel(logging.INFO) 
    pass 

आप pytest-capturelog उपयोग करने के लिए आप अपने प्रवेश config में एक stdout StreamHandler उपयोग कर सकते हैं नहीं करना चाहते हैं तो pytest लॉग आउटपुट को कैप्चर होगा। यहाँ एक उदाहरण basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+3

pytest-capturelog अनचाहे प्रतीत होता है और चेतावनियां फेंकता है। ऐसा लगता है कि इस समस्या को हल करने वाला एक कांटा है: https://pypi.python.org/pypi/pytest-catchlog/ –

7

एक देर से योगदान के बारे में थोड़ी है, लेकिन मैं एक साधारण ड्रॉप-में प्रवेश पर कब्जा समाधान के लिए pytest-logging सिफारिश कर सकते हैं। pip install pytest-logging के बाद आप

$ py.test -s -v tests/your_test.py 
$ py.test -s -vv tests/your_test.py 
$ py.test -s -vvvv tests/your_test.py 

आदि के साथ अपने लॉग (स्क्रीन पर प्रदर्शित) की शब्दाडंबर नियंत्रित कर सकते हैं ... एनबी - -s झंडा महत्वपूर्ण है, बिना यह py.test सभी sys.stderr जानकारी को फ़िल्टर कर देगा।

1

बाद में योगदान का थोड़ा सा: आप pytest-logger आज़मा सकते हैं। इस प्लगइन की नवीनता फाइल सिस्टम पर लॉगिंग कर रही है: पायस्टेस्ट प्रत्येक टेस्ट आइटम के लिए नोडिड प्रदान करता है, जिसका प्रयोग टेस्ट सत्र लॉग निर्देशिका को व्यवस्थित करने के लिए किया जा सकता है (pytest tmpdir सुविधा की सहायता से और यह टेस्टकेस प्रारंभ/अंत हुक) है।

आप टर्मिनल और फाइल सिस्टम के लिए अलग-अलग हैंडलर (स्तरों के साथ) को कॉन्फ़िगर कर सकते हैं और अपने विशिष्ट परीक्षण वातावरण के लिए काम करने के लिए लॉगर्स/स्तरों को फ़िल्टर करने के लिए स्वयं cmdline विकल्प प्रदान कर सकते हैं - उदा। डिफ़ॉल्ट रूप से आप फाइल सिस्टम और छोटे अंश को टर्मिनल पर लॉग कर सकते हैं, जिसे आवश्यक होने पर प्रति सत्र आधार पर --log विकल्प के साथ बदला जा सकता है। यदि प्लगइन कोई हुक परिभाषित नहीं करता है, तो प्लगइन डिफ़ॉल्ट रूप से कुछ भी नहीं करता है।

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