Reputation: 3025
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?
Upvotes: 26
Views: 6409
Reputation: 1244
There is now an adapter library available to expose a --pudb
tracing option similar to the --pdb
one. The more general -s
option remains a valid solution for manually placed breakpoints from any debugger, of course.
To use, do pip install pytest-pudb
, and then execute Pytest via py.test --pudb
. Additionally, import pudb; pudb.set_trace()
functionality is supported without the need for -s
or --capture=no
if this adapter is installed.
Upvotes: 14
Reputation: 3025
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.
Upvotes: 30