Bird
Raised Fist0
PyTesttesting~20 mins

capsys for stdout/stderr in PyTest - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Capsys Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output captured by capsys?
Consider the following pytest test function using capsys to capture output. What will be the value of captured.out after the print statements?
PyTest
def test_capture_output(capsys):
    print("Hello")
    print("World", end="!")
    captured = capsys.readouterr()
    print("Again")
    return captured.out
A"Hello\nWorld!"
B"Hello\nWorld!\nAgain\n"
C"HelloWorld!\n"
D"Hello\nWorld!\n"
Attempts:
2 left
💡 Hint
capsys.readouterr() captures output up to the point it is called.
❓ assertion
intermediate
2:00remaining
Which assertion correctly checks stderr output captured by capsys?
Given the following test code, which assertion will correctly verify that the error message 'Error occurred' was printed to stderr?
PyTest
def test_error_message(capsys):
    import sys
    print('Error occurred', file=sys.stderr)
    captured = capsys.readouterr()
Aassert 'Error occurred' in captured.out
Bassert captured.out == 'Error occurred\n'
Cassert captured.err == ''
Dassert 'Error occurred' in captured.err
Attempts:
2 left
💡 Hint
stderr output is captured in captured.err, not captured.out.
🔧 Debug
advanced
2:00remaining
Why does capsys.readouterr() not capture output after the test ends?
In the following test, the last print statement is not captured by capsys. Why does this happen?
PyTest
def test_late_print(capsys):
    print('Start')
    captured = capsys.readouterr()
    print('End')
    assert captured.out == 'Start\n'
Acapsys only captures output printed before readouterr() is called
Bcapsys captures output only from stderr
Cprint statements after assertions are ignored by pytest
Dcapsys captures all output during the entire test function
Attempts:
2 left
💡 Hint
Think about when capsys.readouterr() captures output.
❓ framework
advanced
2:00remaining
How to capture output multiple times in one test using capsys?
You want to capture output twice in a single test function using capsys. Which code snippet correctly captures and asserts both outputs separately?
A
captured1 = capsys.readouterr()
print('First')
captured2 = capsys.readouterr()
print('Second')
assert captured1.out == ''
assert captured2.out == 'First\n'
B
print('First')
print('Second')
captured1 = capsys.readouterr()
captured2 = capsys.readouterr()
assert captured1.out == 'First\nSecond\n'
assert captured2.out == ''
C
print('First')
captured1 = capsys.readouterr()
print('Second')
captured2 = capsys.readouterr()
assert captured1.out == 'First\n'
assert captured2.out == 'Second\n'
D
print('First')
captured1 = capsys.readouterr()
print('Second')
captured2 = capsys.readouterr()
assert captured1.out == 'First'
assert captured2.out == 'Second'
Attempts:
2 left
💡 Hint
Call capsys.readouterr() after each print to capture output separately.
🧠 Conceptual
expert
2:00remaining
What happens if you do not call capsys.readouterr() in a pytest test?
In a pytest test function using capsys, if you print output but never call capsys.readouterr(), what is the effect on the test output and captured output?
AThe test raises an error because capsys.readouterr() was not called
BThe printed output is captured silently and not shown unless the test fails or -s is used
CThe printed output goes to the console normally and is not captured by pytest
DThe printed output is lost and not shown anywhere
Attempts:
2 left
💡 Hint
Think about pytest's default behavior with output capture.

Practice

(1/5)
1. What is the main purpose of using capsys in pytest tests?
easy
A. To capture and check printed output sent to stdout and stderr
B. To speed up test execution by skipping print statements
C. To automatically fix syntax errors in print statements
D. To generate random test data for print output

Solution

  1. Step 1: Understand what capsys does

    capsys is a pytest feature that captures output sent to the console, including both stdout and stderr.
  2. Step 2: Identify its main use in tests

    It allows tests to check what was printed, so you can verify messages or errors your code produces.
  3. Final Answer:

    To capture and check printed output sent to stdout and stderr -> Option A
  4. Quick Check:

    capsys captures output = C [OK]
Hint: capsys catches print output for verification [OK]
Common Mistakes:
  • Thinking capsys speeds up tests
  • Believing capsys fixes code errors
  • Confusing capsys with test data generation
2. Which of the following is the correct way to use capsys to capture printed output in a pytest test function?
easy
A. def test_func(capsys): captured = capsys.capture(); print('Hello')
B. def test_func(): capsys = print('Hello'); captured = capsys.readouterr()
C. def test_func(capsys): print('Hello'); captured = capsys.readouterr()
D. def test_func(): captured = capsys.readouterr(); print('Hello')

Solution

  1. Step 1: Check how capsys is passed and used

    In pytest, capsys is passed as a function argument and used after printing to capture output.
  2. Step 2: Verify correct method to read output

    The method to get output is capsys.readouterr(), which returns captured stdout and stderr.
  3. Final Answer:

    def test_func(capsys): print('Hello'); captured = capsys.readouterr() -> Option C
  4. Quick Check:

    capsys as argument + readouterr() = A [OK]
Hint: Pass capsys as argument and call readouterr() after print [OK]
Common Mistakes:
  • Not passing capsys as a test function argument
  • Calling non-existent capture() method
  • Calling readouterr() before printing
3. What will be the output of the following pytest test code snippet?
def test_output(capsys):
    print('Test message')
    captured = capsys.readouterr()
    assert captured.out == 'Test message\n'
medium
A. Test passes because printed output matches assertion
B. Test fails because captured.out does not include newline
C. Test fails due to syntax error in print statement
D. Test fails because capsys.readouterr() is called before print

Solution

  1. Step 1: Understand output capture timing

    The print statement runs first, sending 'Test message' plus a newline to stdout.
  2. Step 2: Check captured output and assertion

    capsys.readouterr() captures the output including the newline. The assertion checks for 'Test message\n', which matches exactly.
  3. Final Answer:

    Test passes because printed output matches assertion -> Option A
  4. Quick Check:

    Printed output includes newline = B [OK]
Hint: Remember print adds newline; assert with '\n' [OK]
Common Mistakes:
  • Forgetting newline in assertion string
  • Calling readouterr() before print
  • Assuming captured.out excludes newlines
4. Identify the error in this pytest test using capsys:
def test_error(capsys):
    captured = capsys.readouterr()
    print('Hello')
    assert captured.out == 'Hello\n'
medium
A. Missing parentheses in print statement
B. Calling capsys.readouterr() before printing captures nothing
C. Assertion string missing newline character
D. capsys must be imported before use

Solution

  1. Step 1: Check order of output capture and print

    capsys.readouterr() is called before the print statement, so it captures output up to that point, which is empty.
  2. Step 2: Understand assertion failure reason

    The assertion expects 'Hello\n' but captured.out is empty, causing test failure.
  3. Final Answer:

    Calling capsys.readouterr() before printing captures nothing -> Option B
  4. Quick Check:

    Read output after print, not before = A [OK]
Hint: Always call readouterr() after print to capture output [OK]
Common Mistakes:
  • Calling readouterr() before print
  • Forgetting newline in assertion
  • Assuming capsys needs import
5. You want to test a function that prints error messages to stderr using pytest and capsys. Which code snippet correctly captures and asserts the stderr output?
hard
A. def test_error_message(capsys): print('Error occurred', file=sys.stdout) captured = capsys.readouterr() assert captured.err == 'Error occurred\n'
B. def test_error_message(capsys): print('Error occurred') captured = capsys.readouterr() assert captured.err == 'Error occurred\n'
C. def test_error_message(): print('Error occurred', file=sys.stderr) captured = capsys.readouterr() assert captured.err == 'Error occurred\n'
D. def test_error_message(capsys): print('Error occurred', file=sys.stderr) captured = capsys.readouterr() assert captured.err == 'Error occurred\n'

Solution

  1. Step 1: Identify how to print to stderr

    Use print(..., file=sys.stderr) to send output to stderr stream.
  2. Step 2: Check correct use of capsys and assertion

    capsys.readouterr() captures both stdout and stderr. To check stderr, assert captured.err matches expected string including newline.
  3. Final Answer:

    def test_error_message(capsys): print('Error occurred', file=sys.stderr) captured = capsys.readouterr() assert captured.err == 'Error occurred\n' -> Option D
  4. Quick Check:

    Print to stderr + assert captured.err = D [OK]
Hint: Print with file=sys.stderr and assert captured.err [OK]
Common Mistakes:
  • Not passing capsys as argument
  • Printing to stdout instead of stderr
  • Asserting captured.out instead of captured.err
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard