3.3 sürümünden bu yana, pytest
canlı günlük kaydını destekler, yani testlerde yayınlanan tüm günlük kayıtları hemen terminale yazdırılacaktır. Özellik, Canlı Günlükler bölümünde belgelenmiştir . Canlı günlük kaydı varsayılan olarak devre dışıdır; etkinleştirmek log_cli = 1
için pyproject.toml
1 veya pytest.ini
2 yapılandırmasında ayarlayın. Canlı kayıt, terminale ve dosyaya yaymayı destekler; ilgili seçenekler kayıtların özelleştirilmesine izin verir:
terminal:
log_cli_level
log_cli_format
log_cli_date_format
dosya:
log_file
log_file_level
log_file_format
log_file_date_format
Not : log_cli
bayrak komut satırından geçirilemez ve ayarlanması gerekirpytest.ini
. Diğer tüm seçenekler hem komut satırından geçirilebilir hem de yapılandırma dosyasında ayarlanabilir. As tarafından işaret Kévin Barré içinde bu yorumun yoluyla yapılabilir komut satırından ini seçenekleri geçersiz kılma, -o/--override
opsiyon. Bunun yerine bildirmek log_cli
de pytest.ini
, sadece çağırabilirsiniz:
$ pytest -o log_cli=true ...
Örnekler
Göstermek için kullanılan basit test dosyası:
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
Gördüğünüz gibi, ekstra bir konfigürasyona gerek yok; komut satırında pytest
belirtilen pytest.ini
veya komut satırından iletilen seçeneklere göre kaydediciyi otomatik olarak kuracaktır .
Terminale, INFO
seviyeye, süslü çıktıya canlı günlük kaydı
Yapılandırma 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"
Eski modeldeki aynı yapılandırma 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
Testi çalıştırmak:
$ 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 =============================
Terminal ve dosyaya canlı kayıt, terminalde sadece mesaj ve CRITICAL
seviye, pytest.log
dosyada fantezi çıktı
Yapılandırma 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"
Eski modeldeki aynı yapılandırma 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
Test sürüşü:
$ 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
sürüm 6.0'dan beri desteklenmektedir ve en iyi seçenek IMO'dur. Özellikler için PEP 518'e bakın .
2 Ayrıca yapılandırmak rağmen pytest
içinde setup.cfg
altında [tool:pytest]
bölümüne yapmak cazip değil özel canlı kayıt formatı sağlamak istediğinizde söyledi. Okumakta olan diğer araçlar , dizi enterpolasyonu setup.cfg
gibi şeyleri ele %(message)s
alıp başarısız olabilir. En iyi seçenek pyproject.toml
yine de kullanmaktır , ancak eski ini tarzı formatı kullanmak zorunda kalırsanız, pytest.ini
hataları önlemek için bağlı kalın.