27

テスト スクリプトの Python コード カバレッジを追跡するために、 coverallsをcoverage.pyと組み合わせて使用​​します。次のコマンドを使用します。

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose

これは、 multiprocessingを除いて非常にうまく機能します。ワーカー プールまたは子プロセスによって実行されるコードは追跡されません。

マルチプロセッシング コードも追跡する可能性はありますか? 私が見逃している特定のオプションはありますか?マルチプロセッシング ライブラリにラッパーを追加して、新しいプロセスが生成されるたびにカバレッジを開始するのでしょうか。

編集

私 (および jonrsharpe も :-) は、マルチプロセッシング用のモンキー パッチを見つけました。

しかし、これは私にはうまくいきません。Tracis-CIビルドは開始直後に強制終了されます。ローカル マシンで問題を確認したところ、マルチプロセッシングにパッチを追加すると、メモリが失われるようです。1GB をはるかに下回るメモリしか必要としないテストでは、この修正により 16GB 以上が必要になります。

EDIT2

モンキー パッチは、少し変更を加えると機能します。config_file解析 ( config_file=os.environ['COVERAGE_PROCESS_START']) を削除するとうまくいきました。これにより、肥大化したメモリの問題が解決されました。したがって、対応する行は次のようになります。

cov = coverage(data_suffix=True)
4

2 に答える 2

1

カバレッジmultiprocessing.Poolが で動作することを確認するためにしばらく時間を費やしましたが、うまくいきませんでした。

私は最終的にそれを機能させる修正を行いました.

https://gist.github.com/andreycizov/ee59806a3ac6955c127e511c5e84d2b6

于 2016-12-28T16:04:31.507 に答える