Nosetestsを使用して一連のテスト(.pyファイル)を実行しています。クラシックを使用
import pdb; pdb.set_trace()
実行されるnosetestsは決して完了しません。ブレークポイントが設定された場所でハングしますが、pdbデバッガーにドロップすることはありません。
なぜこれになるのか考えはありますか?ブレークポイントをいくつかの異なる位置(他のテスト関数、他のファイル)に移動しようとしましたが、役に立ちませんでした。
-s
/--nocapture
オプションを指定してnoseを実行すると、pdbプロンプトが表示され、デバッガーと正常に対話できるようになります。
コマンドラインを使用する場合、次のことを意味します。-
python manage.py test -s [other-opts-and-args]
Noseは出力をキャプチャし、リダイレクトしています。したがって、ブレークポイントはヒットしますが、表示されません。デバッグ出力が画面に表示されるように、出力リダイレクトをオフにする必要があります。
あなたが使用する場合、鼻はあなたのためにこれを行うことができます:
from nose.tools import set_trace; set_trace()
の代わりに:
import pdb;pdb.set_trace()
私の場合、フラグフラグ-s/-nocaptureはまだ解決せず、コンパイラをpdbにドロップします。
調べることができるもう1つの理由は、テストの一部としてMySQLなどのデータベースを使用している場合、別の同時プロセスによってロックされていないことです。私の場合、SQL Alchemyを介してMySQLデータベースにクエリを実行するためにpython Shellを起動し、テーブルをロックしていました。その結果、私の鼻のテストがハングし、実行/終了しませんでした。
テーブルをロックしていたpythonプロセスを強制終了し、Noseはスニッフィングをバックアップしていました
> $ ps auxww | grep python | awk '{print $ 2}' | Sudo xargs kill -9