pytest предоставляет следующие фикстуры для доступа к stdout/stderr и выполнения проверок:
- capsys -- перехват stdout и stderr процесса
- capsysbinary -- то же самое, только в байтах
- capfd -- если нужно работать на уровне файловых дестрипторов ОС
- capfdbinary -- то же самое, только в байтах
Все эти фикстуры имеют функцию readouterr(), которая возвращает named tuple:
- out -- содержимое stdout
- err -- содержимое stderr
Использование:
def test_myoutput(capsys): # or use "capfd" for fd-level
print("hello")
sys.stderr.write("world\n")
captured = capsys.readouterr()
assert captured.out == "hello\n"
assert captured.err == "world\n"
print("next")
captured = capsys.readouterr()
assert captured.out == "next\n"
Или:
def test_foo(capfd):
foo() # Writes "Hello World!" to stdout
out, err = capfd.readouterr()
assert out == "Hello World!"