15

Django プロジェクトのビュー コード (およびビュー コードによって呼び出されるコード) からコード カバレッジを取得するにはどうすればよいですか?

coverage gunicorn <params>ヒットしている行は表示されません。

4

1 に答える 1

15

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_filecoveragecombine()

atexitこれは、他の WSGI サーバーでも機能するはずですが、メソッドを介してワーカー プロセスをクリーンアップできるかどうかによって異なります。

于 2013-12-19T19:14:42.617 に答える