TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.2K subscribers
Post #7143 3.48K
📱 Python: как захватывать stdout и stderr в unit test

Когда вы тестируете функции, которые что-то печатают в терминал (stdout/stderr), полезно уметь перехватывать этот вывод и проверять его. В Python это можно сделать с помощью contextlib.redirect_stdout() и redirect_stderr().

Простой пример:
from contextlib import redirect_stdout
from io import StringIO
from unittest import TestCase

from example import print_silly


class PrintSillyTests(TestCase):
def test_print_silly(self):
with redirect_stdout(StringIO()) as buffer:
print_silly("What a lovely day!")

self.assertEqual(buffer.getvalue(), "WhAt a lOvElY DaY!\n")


📌 Если нужно одновременно захватывать stdout и stderr, удобно вынести это в отдельный контекстный менеджер:
from contextlib import contextmanager, redirect_stdout, redirect_stderr
from io import StringIO
from typing import Generator, TextIO


@contextmanager
def capture_output() -> Generator[tuple[TextIO, TextIO]]:
with (
redirect_stdout(StringIO()) as out,
redirect_stderr(StringIO()) as err,
):
yield out, err


И использовать в тестах:
class PrintSillyTests(TestCase):
def test_print_silly(self):
with capture_output() as (out, err):
print_silly("What a lovely day!")

self.assertEqual(out.getvalue(), "WhAt a lOvElY DaY!\n")
self.assertEqual(err.getvalue(), "")


Советы:
— Для логов используйте self.assertLogs() вместо перехвата stdout.
— В pytest ещё проще: есть встроенный capsys для захвата вывода (captured = capsys.readouterr()).
— Не используйте test.support.captured_stdout() — это внутренняя утилита Python, нестабильная и не гарантирована к доступу во всех сборках.

📖 Источник: https://clc.to/DNjodQ

🐸 Библиотека питониста

#буст
  • 👍 9
  • ❤ 4
  • 👏 1
More from @pyproglib
  1. Oct 7, 2026🎓 С Днём учителя! Учиться никогда не поздно — особенно когда технологии меняются быстрее,…
  2. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  3. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  4. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  5. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  6. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →