Иногда я хочу просто вставить некоторые операторы print в мой код и посмотреть, что будет напечатано, когда я это осуществлю. Мой обычный способ «тренироваться» это с помощью существующих тестов pytest. Но когда я запускаю их, я не вижу никакого стандартного вывода (по крайней мере, из PyCharm, моей IDE).
Есть ли простой способ увидеть стандартный вывод во время запуска Pytest?
Ответы:
-s
Переключатель отключает в-тест захвата.источник
-s
=--capture=no
В upvoted комментарий к общепринятом ответ , Джо спрашивает:
В UNIX это обычно упоминается как тиинг . В идеале, пи-тест будет использоваться по умолчанию, а не в виде захвата. Не в идеале, ни py.test, ни какой-либо существующий сторонний плагин py.test (... в любом случае, о котором я знаю ) не поддерживают teee - несмотря на то, что Python тривиально поддерживает teeing " из коробки" .
Обезьяны-патчи py.test делать что-либо неподдерживаемое нетривиально. Почему? Потому что:
_pytest
пакетом, который не предназначен для внешнего импорта. Попытка сделать это, не зная, что вы делаете, обычно приводит к тому, что публичныйpytest
пакет вызывает неясные исключения во время выполнения. Большое спасибо, py.test. Действительно надежная архитектура у вас там._pytest
API безопасным образом, вы должны сделать это прежде , чем запустить публичныйpytest
запуск пакета внешнейpy.test
команды. Вы не можете сделать это в плагине (например,conftest
модуль верхнего уровня в вашем наборе тестов). К тому времени py.test лениво получает вокруг , чтобы динамически импортировать плагин, любой py.test класс вы хотели обезьяньего патч уже давно был создан экземпляр - и вы не имеете доступа к этому экземпляру. Это подразумевает, что, если вы хотите, чтобы ваш monkey-patch применялся осмысленно, вы больше не можете безопасно запускать внешнююpy.test
команду. Вместо этого вы должны обернуть выполнение этой команды пользовательскими настройкамиtest
подайте команду (по порядку):_pytest
API.pytest.main()
функцию для запускаpy.test
команды.Этот ответ monkey-patches py.test's
-s
и--capture=no
опции для захвата stderr, но не stdout. По умолчанию эти параметры не захватывают ни stderr, ни stdout. Конечно, это не совсем так. Но каждое великое путешествие начинается с утомительного приквела, который все забывают через пять лет.Зачем это делать? Я сейчас скажу вам. Мой набор тестов на основе py.test содержит медленные функциональные тесты. Отображение стандартного вывода этих тестов полезно и обнадеживает, предотвращая достижение leycec,
killall -9 py.test
когда еще один продолжительный функциональный тест не может что-либо делать в течение нескольких недель подряд. Однако отображение stderr этих тестов не позволяет py.test сообщать о трассировках исключений при неудачных тестах. Что совершенно бесполезно. Следовательно, мы принудительно используем py.test для захвата stderr, но не stdout.Прежде чем мы перейдем к нему, этот ответ предполагает, что у вас уже есть настраиваемая
test
команда setuptools, вызывающая py.test. Если вы этого не сделаете, см Руководства по интеграции подразделу хорошо написанного py.test в Надлежащей практике страницы.Вы не устанавливать pytest-бегун , сторонние Setuptools плагин Заказное Setuptools
test
команда также применение py.test. Если pytest-runner уже установлен, вам, вероятно, потребуется удалить этот пакет pip3, а затем применить ручной подход, указанный выше.Предполагая, что вы следовали инструкциям в Ручной интеграции, выделенным выше, ваша база кода должна теперь содержать
PyTest.run_tests()
метод. Измените этот метод, чтобы он напоминал:Чтобы включить этот monkey-patch, запустите py.test следующим образом:
Stderr, но не stdout, теперь будет захвачен. Острота!
Расширение вышеприведенного патча обезьяны на tedout и stderr оставлено в качестве упражнения для читателя с бочкой свободного времени.
источник
При запуске теста используйте
-s
опцию. Все операторы print inexampletest.py
будут напечатаны на консоли при запуске теста.источник
Согласно документации pytest , версия 3 pytest может временно отключить захват в тесте:
источник
pytest захватывает стандартный вывод из отдельных тестов и отображает их только при определенных условиях вместе со сводкой тестов, которые он выводит по умолчанию.
Дополнительная сводная информация может быть показана с помощью опции '-r':
показывает захваченный вывод пройденных тестов.
показывает захваченный вывод неудачных тестов (поведение по умолчанию).
Форматирование вывода красивее с -r, чем с -s.
источник
Попробуйте
pytest -s -v test_login.py
больше информации в консоли.-v
это короткий--verbose
-s
означает «отключить все захваты»источник
Если вы используете PyCharm IDE, вы можете запустить этот отдельный тест или все тесты с помощью панели инструментов «Выполнить». В окне инструмента Выполнить отображаются выходные данные, сгенерированные вашим приложением, и вы можете увидеть все операторы печати в них как часть результатов теста.
источник
pytest --capture=tee-sys
был недавно добавлен. Вы можете захватить, а также увидеть результат на stdout / err.источник
Другие ответы не работают. Только способ увидеть захваченный выход использует следующий флаг:
источник
--show-capture=all
это значение по умолчанию. Добавление этого ничего не влияет.