Django プロジェクトのビュー コード (およびビュー コードによって呼び出されるコード) からコード カバレッジを取得するにはどうすればよいですか?
coverage gunicorn <params>
ヒットしている行は表示されません。
Django プロジェクトのビュー コード (およびビュー コードによって呼び出されるコード) からコード カバレッジを取得するにはどうすればよいですか?
coverage gunicorn <params>
ヒットしている行は表示されません。
coverage gunicorn <params>
gunicorn はワーカー プロセスを作成し、coverage
モジュールはフォーク間で動作できないため (基本的に、新しいプロセスの作成)、機能しません。ただし、たとえば WSGI アプリケーションを含む python モジュールでカバレッジ APIを使用できます。
# wsgi_with_coverage.py
import atexit
import sys
import coverage
cov = coverage.coverage()
cov.start()
from wsgi import application # adjust to python module containing your wsgi application
def save_coverage():
print >> sys.stderr, "saving coverage"
cov.stop()
cov.save()
atexit.register(save_coverage)
次に実行しgunicorn -w 1 wsgi_with_coverage:application <other params>
ます。
問題は、atexit
たとえば CTRL+C を使用して gunicorn プロセスを強制終了すると、関数が呼び出されないことです。ただし、これらは で呼び出されるSIGHUP
ため、実行するkill -HUP $(cat <gunicorn_pidfile_here>)
と、カバレッジ データが保存されます (デフォルトでは、現在のディレクトリの ".coverage" に保存されます)。
考えられる注意点は、これは複数の gunicorn ワーカーでは機能しないということです。これは、".coverage" ファイルがすべて上書きされるためです。絶対に複数のワーカーが必要な場合は、書き込み(パラメーターを介してコンストラクター".coverage-%d" % os.getpid()
にファイル名を設定) し、メソッドを使用して個々の測定値をマージすることができます。data_file
coverage
combine()
atexit
これは、他の WSGI サーバーでも機能するはずですが、メソッドを介してワーカー プロセスをクリーンアップできるかどうかによって異なります。