Есть ли способ изменить объект конфигурации pytest из обычного ключевого слова?

Я хочу распечатать, зарегистрировать и сделать отчет в своей среде pytest.

Я создаю объект конфигурации в pytest_configure следующим образом

conftest.py

def pytest_configure(config):
    config.logs = []

Затем я создаю приспособление для изменения этого объекта.

@pytest.fixture(scope="function", autouse=True)
def print_info(request):
    return request.config.logs

В тестовом файле я вызываю это приспособление для изменения объекта

test_logs.py

def test_dummy(print_info):
    print_info.append("I am in test_dummy")

Я хочу изменить объект конфигурации, не передавая этот объект в тестовом примере. Например, я хочу сделать следующее

from conftest import print_log
def test_dummy():
    print_log("I am in test_dummy")

и в conftest.py мы можем определить эту функцию для изменения объекта конфигурации

conftest.py

def print_log(message):
    #function to modify config object

person Sanket Lad    schedule 02.02.2018    source источник


Ответы (1)


Не поможет ли здесь модуль логирования?

Вы можете настроить запись журнала так, чтобы она содержала именно ту информацию, которую вы хотите, например. модуль и тестовая функция, в которой было зарегистрировано сообщение.

Ведение журнала имеет отличные функции, такие как фильтрация по уровню журнала, содержанию сообщений, запись различных записей в отдельные файлы журнала с различными текстовыми форматами и т. д.

Я бы посоветовал вам взглянуть на: https://docs.pytest.org/en/latest/logging.html

person Jakub Górzyński    schedule 06.02.2018
comment
У нас будет модуль ведения журнала. Но мы хотим сгенерировать html-отчет, используя журналы, которые мы собираем. Caplog Pytest помогает, но он также выбрасывает весь остальной мусор. Вот почему мы хотим быть конкретными в отношении того, что мы регистрируем. - person Sanket Lad; 06.02.2018
comment
Я бы по-прежнему выступал за модуль ведения журнала. Это действительно мощно. Взгляните на filter-objects. Вы можете настроить отдельный обработчик для захвата стандартного вывода и придания ему форматирования, отличного от форматирования обычных журналов. - person Jakub Górzyński; 07.02.2018
comment
Вы можете фильтровать по всем параметрам LogRecord. Вы можете, например, поместить все вспомогательные функции в отдельный модуль или включить определенную строку в имя функции и отфильтровать журналы в соответствии с этим. Я лично использую пару обработчиков для записи полного журнала, журнала консоли и журнала с записью только неудачного теста. Я могу включить несколько примеров в свой ответ, если вы хотите попробовать этот подход. - person Jakub Górzyński; 07.02.2018