संस्करण 3.3 के बाद से, pytest
लाइव लॉगिंग का समर्थन करता है, जिसका अर्थ है कि परीक्षणों में उत्सर्जित सभी लॉग रिकॉर्ड तुरंत टर्मिनल पर प्रिंट किए जाएंगे। फीचर को लाइव लॉग्स सेक्शन के तहत प्रलेखित किया गया है । लाइव लॉगिंग डिफ़ॉल्ट रूप से अक्षम है; इसे सक्षम करने के लिए, 1 या 2 कॉन्फिगर log_cli = 1
में सेट करें । लाइव लॉगिंग टर्मिनल और फ़ाइल के लिए उत्सर्जन का समर्थन करता है; प्रासंगिक विकल्प रिकॉर्ड को अनुकूलित करने की अनुमति देते हैं:pyproject.toml
pytest.ini
टर्मिनल:
log_cli_level
log_cli_format
log_cli_date_format
फ़ाइल:
log_file
log_file_level
log_file_format
log_file_date_format
नोट : log_cli
ध्वज को कमांड लाइन से पारित नहीं किया जा सकता है और इसे सेट किया जाना चाहिए pytest.ini
। अन्य सभी विकल्पों को कमांड लाइन से पास किया जा सकता है या कॉन्फ़िगरेशन फ़ाइल में सेट किया जा सकता है। जैसा कि केविन बैर्रे ने इस टिप्पणी में बताया है , कमांड लाइन से इनर ऑप्शन को ओवरराइड करके -o/--override
विकल्प के माध्यम से किया जा सकता है । घोषित करने के बजाय log_cli
में pytest.ini
, आप बस फोन कर सकते हैं:
$ pytest -o log_cli=true ...
उदाहरण
प्रदर्शन के लिए उपयोग की जाने वाली सरल परीक्षण फ़ाइल:
import logging
LOGGER = logging.getLogger(__name__)
def test_eggs():
LOGGER.info('eggs info')
LOGGER.warning('eggs warning')
LOGGER.error('eggs error')
LOGGER.critical('eggs critical')
assert True
जैसा कि आप देख सकते हैं, कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है; कमांड लाइन से pytest
निर्दिष्ट pytest.ini
या पारित किए गए विकल्पों के आधार पर, स्वचालित रूप से लकड़हारा सेटअप करेगा ।
टर्मिनल, INFO
स्तर, फैंसी आउटपुट के लिए लाइव लॉगिंग
में विन्यास pyproject.toml
:
[tool.pytest.ini_options]
log_cli = true
log_cli_level = "INFO"
log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)"
log_cli_date_format = "%Y-%m-%d %H:%M:%S"
विरासत में समान कॉन्फ़िगरेशन pytest.ini
:
[pytest]
log_cli = 1
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S
परीक्षण चल रहा है:
$ pytest test_spam.py
=============================== test session starts ================================
platform darwin -- Python 3.6.4, pytest-3.7.0, py-1.5.3, pluggy-0.7.1 -- /Users/hoefling/.virtualenvs/stackoverflow/bin/python3.6
cachedir: .pytest_cache
rootdir: /Users/hoefling/projects/private/stackoverflow/so-4673373, inifile: pytest.ini
collected 1 item
test_spam.py::test_eggs
---------------------------------- live log call -----------------------------------
2018-08-01 14:33:20 [ INFO] eggs info (test_spam.py:7)
2018-08-01 14:33:20 [ WARNING] eggs warning (test_spam.py:8)
2018-08-01 14:33:20 [ ERROR] eggs error (test_spam.py:9)
2018-08-01 14:33:20 [CRITICAL] eggs critical (test_spam.py:10)
PASSED [100%]
============================= 1 passed in 0.01 seconds =============================
टर्मिनल और फ़ाइल में लाइव लॉगिंग, केवल संदेश और CRITICAL
टर्मिनल में स्तर, pytest.log
फ़ाइल में फैंसी आउटपुट
में विन्यास pyproject.toml
:
[tool.pytest.ini_options]
log_cli = true
log_cli_level = "CRITICAL"
log_cli_format = "%(message)s"
log_file = "pytest.log"
log_file_level = "DEBUG"
log_file_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)"
log_file_date_format = "%Y-%m-%d %H:%M:%S"
विरासत में समान कॉन्फ़िगरेशन pytest.ini
:
[pytest]
log_cli = 1
log_cli_level = CRITICAL
log_cli_format = %(message)s
log_file = pytest.log
log_file_level = DEBUG
log_file_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_file_date_format=%Y-%m-%d %H:%M:%S
परीक्षण चालन:
$ pytest test_spam.py
=============================== test session starts ================================
platform darwin -- Python 3.6.4, pytest-3.7.0, py-1.5.3, pluggy-0.7.1 -- /Users/hoefling/.virtualenvs/stackoverflow/bin/python3.6
cachedir: .pytest_cache
rootdir: /Users/hoefling/projects/private/stackoverflow/so-4673373, inifile: pytest.ini
collected 1 item
test_spam.py::test_eggs
---------------------------------- live log call -----------------------------------
eggs critical
PASSED [100%]
============================= 1 passed in 0.01 seconds =============================
$ cat pytest.log
2018-08-01 14:38:09 [ INFO] eggs info (test_spam.py:7)
2018-08-01 14:38:09 [ WARNING] eggs warning (test_spam.py:8)
2018-08-01 14:38:09 [ ERROR] eggs error (test_spam.py:9)
2018-08-01 14:38:09 [CRITICAL] eggs critical (test_spam.py:10)
1 pyproject.toml
संस्करण 6.0 के बाद से समर्थित है और सबसे अच्छा विकल्प आईएमओ है। चश्मे के लिए पीईपी 518 देखें ।
2 आप भी कॉन्फ़िगर कर सकते हैं pytest
में setup.cfg
के तहत [tool:pytest]
खंड, ऐसा करने के लिए परीक्षा नहीं है जा कि जब आप कस्टम लाइव लॉगिंग प्रारूप उपलब्ध कराना चाहते हैं। पढ़ने के अन्य उपकरण स्ट्रिंग इंटरपोलेशन और असफल setup.cfg
जैसे सामान का इलाज कर %(message)s
सकते हैं। सबसे अच्छा विकल्प pyproject.toml
वैसे भी उपयोग कर रहा है, लेकिन अगर आपको विरासत में आई-शैली प्रारूप का उपयोग करने के लिए मजबूर किया जाता है, तो pytest.ini
त्रुटियों से बचने के लिए छड़ी ।