ตั้งแต่เวอร์ชัน 3.3 pytest
สนับสนุนการบันทึกแบบสดซึ่งหมายความว่าบันทึกทั้งหมดที่ปล่อยออกมาในการทดสอบจะถูกพิมพ์ไปยังเทอร์มินัลทันที คุณลักษณะนี้ได้รับการบันทึกไว้ในส่วนLive Logs การบันทึกสดถูกปิดใช้งานโดยค่าเริ่มต้น เพื่อเปิดใช้งานให้ตั้งค่าlog_cli = 1
ในpyproject.toml
1หรือpytest.ini
2การตั้งค่า Live logging รองรับการส่งไปยังเทอร์มินัลและไฟล์ ตัวเลือกที่เกี่ยวข้องอนุญาตให้ปรับแต่งบันทึก:
ขั้ว:
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
มีการตั้งค่าใน ตัวเลือกอื่น ๆ ทั้งหมดสามารถส่งผ่านจากบรรทัดคำสั่งหรือตั้งค่าในไฟล์กำหนดค่า ตามที่KévinBarréชี้ไว้ในความคิดเห็นนี้การแทนที่ตัวเลือก 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 และเป็นตัวเลือกที่ดีที่สุด IMO ดูข้อกำหนดPEP 518
2แม้ว่าคุณยังสามารถกำหนดค่าpytest
ในsetup.cfg
ภายใต้[tool:pytest]
ส่วนที่ไม่ได้ถูกล่อลวงไปทำอย่างนั้นเมื่อคุณต้องการที่จะให้รูปแบบการเข้าสู่ระบบการถ่ายทอดสดที่กำหนดเอง การอ่านเครื่องมืออื่น ๆsetup.cfg
อาจใช้%(message)s
กับการแก้ไขสตริงและล้มเหลว ทางเลือกที่ดีที่สุดคือการใช้pyproject.toml
อย่างไรก็ตามหากคุณถูกบังคับให้ใช้รูปแบบ ini-style เดิมให้ปฏิบัติตามpytest.ini
เพื่อหลีกเลี่ยงข้อผิดพลาด