Search code examples
pythonpytestpudb

Using Python PuDB debugger with pytest


Before my testing library of choice was unittest. It was working with my favourite debugger - PuDB. Not Pdb!!!

To use PuDB with unittest, I paste import pudb;pudb.set_trace() between the lines of code. I then executed python -m unittest my_file_test, where my_file_test is module representation of my_file_test.py file.

Simply using nosetests my_file_test.py won't work - AttributeError: StringIO instance has no attribute 'fileno' will be thrown.

With py.test neither works:

py.test my_file_test.py

nor

python -m pytest my_file_test.py

Both throw

ValueError: redirected Stdin is pseudofile, has no fileno()

How can I use Pudb with py.test?


Solution

  • Simply by adding the -s flag, pytest will not replace standard input and standard output and debugging will be accessible, i.e., pytest -s my_file_test.py will do the trick.

    In documentation provided by ambi, it is also said that previously using -s explicitly was required for regular pdb too, but now the -s flag is implicitly used with the --pdb flag.

    However, pytest does not implicitly support PuDB, so setting -s is needed.