Kể từ phiên bản 3.3, pytesthỗ trợ ghi nhật ký trực tiếp, có nghĩa là tất cả các bản ghi nhật ký được phát ra trong các bài kiểm tra sẽ được in ra thiết bị đầu cuối ngay lập tức. Tính năng này được ghi lại trong phần Live Logs . Ghi nhật ký trực tiếp bị tắt theo mặc định; để kích hoạt nó, hãy đặt log_cli = 1trong pytest.inicấu hình 1 . Ghi nhật ký trực tiếp hỗ trợ phát ra thiết bị đầu cuối và tệp; các tùy chọn liên quan cho phép tùy chỉnh hồ sơ:
thiết bị đầu cuối:
log_cli_level
log_cli_format
log_cli_date_format
tập tin:
log_file
log_file_level
log_file_format
log_file_date_format
Lưu ý : log_clikhông thể chuyển cờ từ dòng lệnh và phải được đặt trong pytest.ini. Tất cả các tùy chọn khác có thể được chuyển từ dòng lệnh hoặc thiết lập trong tệp cấu hình. Như đã chỉ ra bởi Kévin Barré trong nhận xét này , việc ghi đè các tùy chọn ini từ dòng lệnh có thể được thực hiện thông qua -o/--overridetùy chọn. Vì vậy, thay vì khai báo log_clitrong pytest.ini, bạn có thể chỉ cần gọi:
$ pytest -o log_cli=true ...
Ví dụ
Tệp thử nghiệm đơn giản được sử dụng để chứng minh:
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
Như bạn thấy, không cần cấu hình bổ sung; pytestsẽ tự động thiết lập trình ghi nhật ký, dựa trên các tùy chọn được chỉ định trong pytest.inihoặc chuyển từ dòng lệnh.
Ghi nhật ký trực tiếp vào thiết bị đầu cuối, INFOcấp độ, đầu ra ưa thích
Cấu hình trong 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
Chạy thử nghiệm:
$ 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 =============================
Ghi nhật ký trực tiếp vào thiết bị đầu cuối và tệp, chỉ thông báo và CRITICALcấp trong thiết bị đầu cuối, đầu ra ưa thích trong pytest.logtệp
Cấu hình trong 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
Chạy thử nghiệm:
$ 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 Mặc dù bạn có thể cấu hình pytestở setup.cfgdưới [tool:pytest]phần, không bị cám dỗ để làm điều đó khi bạn muốn cung cấp định dạng logging tùy chỉnh trực tiếp. Các công cụ khác đọc setup.cfgcó thể coi những thứ như %(message)snội suy chuỗi và thất bại. Sử dụng pytest.iniđể tránh sai sót.