0
0
PyTesttesting~5 mins

Why capturing output validates behavior in PyTest

Choose your learning style9 modes available
Introduction

Capturing output helps check if a program shows the right messages or results. It proves the program works as expected by looking at what it prints.

When you want to test if a function prints a success message after running.
When checking if error messages appear correctly when something goes wrong.
When verifying that logs or status updates are shown during a process.
When you need to confirm the exact text output of a command or script.
When testing interactive programs that communicate via the console.
Syntax
PyTest
def test_function(capsys):
    # Run code that prints output
    print('Hello')
    # Capture output
    captured = capsys.readouterr()
    # Assert output is as expected
    assert captured.out == 'Hello\n'

capsys is a pytest fixture that captures printed output.

Use captured.out for standard output and captured.err for error output.

Examples
This test checks if the printed message is exactly 'Test passed' followed by a newline.
PyTest
def test_print_message(capsys):
    print('Test passed')
    captured = capsys.readouterr()
    assert captured.out == 'Test passed\n'
This test captures and checks error output printed to standard error.
PyTest
def test_error_message(capsys):
    import sys
    print('Error occurred', file=sys.stderr)
    captured = capsys.readouterr()
    assert captured.err == 'Error occurred\n'
Sample Program

This test calls a function that prints a greeting. It captures the output and checks if it matches the expected greeting message.

PyTest
def greet(name):
    print(f'Hello, {name}!')

def test_greet(capsys):
    greet('Alice')
    captured = capsys.readouterr()
    assert captured.out == 'Hello, Alice!\n'

# Running test_greet will pass if output matches
OutputSuccess
Important Notes

Always include the newline character \n when asserting printed output because print() adds it automatically.

Use output capturing to test user-facing messages without changing the original code.

Captured output helps find bugs in what the program shows, not just what it returns.

Summary

Capturing output lets you check printed messages to confirm correct behavior.

Use pytest's capsys fixture to capture and test output easily.

Validating output is useful for testing messages, errors, and logs.