Ведение журнала Pytest игнорирует параметры в pytest.ini - PullRequest
0 голосов
/ 04 июня 2018

У меня есть тест, с которым я работаю:

pytest --capture=no --verbose --rootdir=testing/ testing/tests/docker_test.py

из /home/user/development/.Тест проверяет, запущены ли некоторые контейнеры, и использует стандартную среду ведения журналов Python 3.6.Регистратор внутри тестового файла настроен следующим образом:

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO, stream=sys.stdout, format="%(asctime)s %(levelname)s %(message)s")

Внутренние тесты Я использую регистратор следующим образом:

logger.info(f"TEST SUCCESSFUL: container {container_name} is running")
logger.info(f"TEST SUCCESSFUL: all required containers are running")

Внутри testing (корневой каталог) У меня естьфайл pytest.ini:

[pytest]
log_level = INFO
log_cli_level = INFO
log_format = %(asctime)s %(levelname)s %(message)s
log_cli_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %H:%M:%S
log_cli_date_format = %H:%M:%S

По сути, я не хочу, чтобы в метке времени была указана какая-либо дата, и я хочу, чтобы pytest записывал журнал в реальном времени в командную строку при выполнении тестов.

Для меня, мне интересно, что означает asctime.Это выглядит как "время ASCII".Я не хочу стандартизированную метку времени, но вместо этого формат, который я описываю в pytest.ini.Вот почему я также попытался использовать date, datetime и timestamp вместо asctime, что привело к ошибке.Так что я думаю, asctime - единственный способ получить метку времени.

Однако pytest, похоже, игнорирует все параметры, которые я задаю в моем файле pytest.ini, хотя указывает на то, что он нашел файл,когда я запускаю тесты:

cachedir: testing/.pytest_cache
rootdir: /home/user/development/testing, inifile: pytest.ini

Как я могу изменить метку времени при ведении журнала pytest?

1 Ответ

0 голосов
/ 04 июня 2018

Я думаю, что вам не хватает log_cli = 1 (или true / yes / etc) в вашем pytest.ini.Кроме того, с предоставленной вам конфигурацией записи журнала печатаются в формате, который вы указали в log_cli_format.Вы даже можете уменьшить pytest.ini до:

[pytest]
log_cli = 1
log_cli_level = INFO
log_cli_format = %(asctime)s %(levelname)s %(message)s
log_cli_date_format = %H:%M:%S

Кроме того, вышеуказанная конфигурация позаботится о конфигурации корневого регистратора в сеансе тестирования, поэтому вам не нужно настраивать регистратор в тестах для работы в реальном времени.протоколирование.Просто вызовите регистратор в тестах:

import logging

def test_spam():
    logger = logging.getLogger(__name__)
    logger.info('spam')
    logger.warning('eggs')
    logger.error('bacon')

Это напечатает:

$ pytest
============================== test session starts ================================
platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- /data/gentoo64/usr/bin/python3.6
cachedir: .pytest_cache
rootdir: /data/gentoo64/home/u0_a82/projects/stackoverflow/so-50677656, inifile: pytest.ini
plugins: mock-1.6.3, cov-2.5.1, flaky-3.4.0
collected 1 item

testing/tests/test_docker.py::test_logs
---------------------------------- live log call ----------------------------------
16:29:12 INFO spam
16:29:13 WARNING eggs
16:29:13 ERROR bacon
PASSED                                                                       [100%]
============================ 1 passed in 1.08 seconds =============================

Для одного мне интересно, что означает asctime

документы для ведения журнала немного лаконичны:

удобочитаемое время при создании LogRecord.По умолчанию это имеет вид '2003-07-08 16: 49: 45,896' (числа после запятой - это доли миллисекунды).

Однако asctime не означаетчто записи всегда будут форматироваться с использованием time.asctime - это только формат даты и времени по умолчанию, используемый, если вы не передаете свой собственный аргумент logging.Formatter ( второй аргумент в конструкторе форматера * 1034)*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...