27

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?

3

2 Answers 2

32

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.

Sign up to request clarification or add additional context in comments.

Comments

13

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.

1 Comment

This adapter no longer works with current versions of pytest and pudb.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.