Kể từ phiên bản 3.3, pytest
hỗ 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 = 1
trong pytest.ini
cấ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_cli
khô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/--override
tùy chọn. Vì vậy, thay vì khai báo log_cli
trong 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; pytest
sẽ 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.ini
hoặc chuyển từ dòng lệnh.
Ghi nhật ký trực tiếp vào thiết bị đầu cuối, INFO
cấ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à CRITICAL
cấp trong thiết bị đầu cuối, đầu ra ưa thích trong pytest.log
tệ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.cfg
dướ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.cfg
có thể coi những thứ như %(message)s
nội suy chuỗi và thất bại. Sử dụng pytest.ini
để tránh sai sót.