Как записывать операторы печати внутри хуков pytest - PullRequest
0 голосов
/ 11 июля 2020

Я новичок в работе с фреймами pytest и пытаюсь понять хуки pytest. Я поместил несколько операторов печати в хуки pytest, но не уверен, как я могу распечатать их на консоли. Вот пример, который я пробовал

# content of conftest.py
import pytest
import sys

def pytest_load_initial_conftests(args):
  print ("Hello")
  if 'xdist' in sys.modules:  # pytest-xdist plugin
    import multiprocessing

    num = max(multiprocessing.cpu_count() / 2, 1)
    args[:] = ["-n", str(num)] + args
    print ("args: ", args)

# content of the test_sample.py
def test_answer():
  # assert 0
  print ("test function")
  pass

Я пробовал использовать pytest test_sample.py -s, pytest --capture=sys/fd/no. Я мог получить оператор печати на консоли только из функции test_answer, но не из обработчика pytest.

Спасибо

1 Ответ

0 голосов
/ 12 июля 2020

Ссылаясь на документацию хука pytest_load_initial_conftests,

Примечание:

Этот хук не будет вызываться для файлов conftest.py, только для плагинов setuptools.

Таким образом, размещение его в conftest.py не имеет никакого эффекта. Вам нужно вызвать ловушку через систему плагинов pytest. Либо переместите крючок impl в отдельный пакет, как указано в документации:

# myplugin.py

def pytest_load_initial_conftests(args):
    ...

# setup.py
from setuptools import setup

setup(
    name='myplugin',
    py_modules=['myplugin'],
    entry_points={'pytest11': ['myplugin = myplugin']}
)

и установите его как обычно через pip install / python setup.py install.

Или оставьте myplugin.py с остальной частью кода и передайте настраиваемый плагин через -p arg:

$ pytest -p myplugin

Вам может потребоваться обновить PYTHONPATH, чтобы myplugin.py стал импортируемым. Пользовательский аргумент плагина можно переместить в pytest.ini, чтобы упростить вызов:

[pytest]
addopts = -p myplugin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...