私はcoverallsをcoverage.pyと組み合わせて使用して、テストスクリプトのPythonコードカバレッジを追跡しています。次のコマンドを使用します。
coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
これは、マルチプロセッシングを除いて非常にうまく機能します。ワーカープールまたは子プロセスによって実行されたコードは追跡されません。
マルチプロセッシングコードも追跡する可能性はありますか?私が見逃している特定のオプションはありますか?マルチプロセッシングライブラリにラッパーを追加して、新しいプロセスが生成されるたびにカバレッジを開始するのではないでしょうか。
編集:
私(そしてjonrsharpeも:-)はマルチプロセッシング用のモンキーパッチを見つけました。
ただし、これは私には機能しません。私のTracis-CIビルドは、開始直後に強制終了されます。ローカルマシンで問題を確認し、マルチプロセッシングにパッチを追加するとメモリが破壊されたようです。1GBよりはるかに少ないメモリを使用するテストでは、この修正で16GB以上が必要になります。
EDIT2:
モンキーパッチは、小さな変更を加えた後でも機能します。config_file
解析(config_file=os.environ['COVERAGE_PROCESS_START']
)を削除するとうまくいきました。これにより、メモリの肥大化の問題が解決されました。したがって、対応する行は単純に次のようになります。
cov = coverage(data_suffix=True)
Coverage 4.0には、--concurrency=multiprocessing
これに対処するためのコマンドラインオプションが含まれています。coverage combine
後で使用する必要があります。たとえば、テストがにあるregression_tests.py
場合は、コマンドラインでこれを行うだけです。
coverage run --concurrency=multiprocessing regression_tests.py
coverage combine
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加