[Django]-How do I see stdout when running Django tests?

47đź‘Ť

âś…

Checked TEST_RUNNER in settings.py, it’s using a project-specific runner that calls out to Nose. Nose has the -s option to stop it from capturing stdout, but if I run:

./manage.py test -s

manage.py captures it first and throws a “no such option” error. The help for manage.py doesn’t mention this, but I found that if I run:

./manage.py test -- -s

it ignores the -s and lets me capture it on the custom runner’s side, passing it to Nose without a problem.

👤agentofuser

42đź‘Ť

Yeah, this issue is caused by NoseTestSuiteRunner. Adding -- -s is tricky and not the best solution.
Try to add the following lines in the settings.py:

NOSE_ARGS = ['--nocapture',
             '--nologcapture',]

This solved my problems.

👤WisZhou

28đź‘Ť

There are several levels of verbosity available which affects the amount of details we see:
You can try:

python manage.py test -v 2

Other levels available are:

  • -v 0 : Least amount of details

  • -v 1: Default

  • -v 2 : More details e.g. print statements included.

👤Sourabh Sinha

6đź‘Ť

Using current versions of all the relevant packages (Django==1.11.2, django-nose==1.4.5 and nose==1.3.7) it is sufficient to add the --nocapture flag when running your tests. Thus a simple

./manage.py test --nocapture

will suffice.

Granted of course that you have

TEST_RUNNER = "django_nose.NoseTestSuiteRunner"

in your settings.py

👤oivvio

4đź‘Ť

You probably have some intermediate test runner, such as Nose, intercepting and storing stdout. Try either running the Django tests directly, or write to stderr instead.

👤John Millikin

Leave a comment