Починаючи з версії 3.3, pytest
підтримується реєстрація в реальному часі, це означає, що всі записи журналу, випущені в тестах, будуть негайно надруковані на терміналі. Ця функція задокументована в розділі " Живі журнали ". Запис за умовчанням ведеться в режимі реального часу; щоб увімкнути його, встановіть log_cli = 1
у pytest.ini
конфігурації 1 . Реєстрація в режимі реального часу підтримує випромінювання в термінал і файл; відповідні параметри дозволяють налаштування записів:
термінал:
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
. Усі інші параметри можуть бути передані з командного рядка або встановлені у файлі конфігурації. Як зазначав Кевін Барре в цьому коментарі , перевизначення параметрів 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
рівень, вигаданий вихід
Конфігурація в 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
файл
Конфігурація в 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 Незважаючи на те, що ви можете налаштувати pytest
в setup.cfg
цьому [tool:pytest]
розділі, не спокушайтеся це робити, коли ви хочете надати власний формат журналу. Інші інструменти для читання setup.cfg
можуть сприймати такі речі як %(message)s
інтерполяцію рядків та не вдаватися. Використовуйте, pytest.ini
щоб уникнути помилок.