How to Debug Pytest With pdb Breakpoints?

Better Stack Team
Updated on May 15, 2024

To debug a pytest test using pdb, you can manually insert a breakpoint by adding import pdb; pdb.set_trace() in your test:

test_exception.py
import pytest

def divide(x, y):
    return x / y

def test_zero_division():
    import pdb
    pdb.set_trace()
    with pytest.raises(ZeroDivisionError):
        divide(9, 0)

When running your tests, include the --pdb flag with the pytest command to enable interactive debugging:

 
pytest test_exception.py --pdb

This will initiate the pdb prompt at the point where the breakpoint is set:

Output

... 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /Users/stanley/test_exception.py(12)test_zero_division()
-> with pytest.raises(ZeroDivisionError):
(Pdb) 

Another way to set breakpoints is using the built-in breakpoint() function, which simplifies the process of setting breakpoints:

test_exception.py
def test_zero_division():
    breakpoint()
    with pytest.raises(ZeroDivisionError):
        divide(9, 0)

This method is often preferred for its simplicity compared to import pdb; pdb.set_trace().