web-dev-qa-db-ja.com

Djangoテストを実行しているときにstdoutを表示するにはどうすればよいですか?

./manage.py testを使用してテストを実行すると、printを介して標準出力に送信したものは何も表示されません。テストが失敗すると、失敗したテストごとに「stdout」ブロックが表示されるので、Djangoはそれをトラップします(ただし、テストが成功しても表示されません)。

44

TEST_RUNNERsettings.pyを確認しました。これは、Noseを呼び出すプロジェクト固有のランナーを使用しています。 Noseにはstdoutのキャプチャを停止する-sオプションがありますが、実行すると:

./manage.py test -s

manage.pyは最初にそれをキャプチャし、「no such option」エラーをスローします。 manage.pyのヘルプではこれについて言及していませんが、実行すると次のことがわかりました。

./manage.py test -- -s

-sを無視し、カスタムランナー側でキャプチャして、問題なくNoseに渡します。

39

ええ、この問題はNoseTestSuiteRunnerが原因です。 -- -sの追加は注意が必要であり、最善の解決策ではありません。 settings.pyに次の行を追加してみてください:

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

これは私の問題を解決しました。

38
WisZhou

関連するすべてのパッケージ(Django==1.11.2Django-nose==1.4.5nose==1.3.7)の現在のバージョンを使用すると、テストの実行時に--nocaptureフラグを追加するだけで十分です。したがって、単純な

./manage.py test --nocapture

十分であろう。

もちろんあります

TEST_RUNNER = "Django_nose.NoseTestSuiteRunner"

settings.py

5
oivvio

おそらく、Noseなどの中間テストランナーがあり、stdoutをインターセプトして保存しています。 Djangoテストを直接実行するか、代わりにstderrに書き込みます。

4
John Millikin