py.test
の繰り返し実行を高速化する方法はありますか?コマンドラインで実行するファイルを指定しても、テストの収集に多くの時間を費やしているようです。すべての.pyファイルでpyflakesを実行するのは非常に高速であるため、ディスク速度の問題でもないことはわかっています。
Pytest.iniまたはtox.iniでnorecursedirs
オプションを使用すると、作業ディレクトリにある他のファイルに応じて、収集時間を大幅に節約できます。私の収集時間は、それを配置している場合、300テストのスイートでおよそ半分になります(0.34秒vs 0.64秒)。
私のようにすでに tox を使用している場合は、tox.iniに以下を追加するだけです。
[pytest]
norecursedirs = docs *.Egg-info .git appdir .tox
独立したpytest.ini
ファイルに追加することもできます。
Pytestのドキュメントには py.test設定ファイル に関する詳細があります。
プロジェクトのルートでpy.test
を呼び出すのと同じ問題があり、テストが3つのサブディレクトリ下にありました。コレクションは、実際のテスト実行の0.4秒前に6〜7秒かかっていました。
私の解決策は当初、テストへの相対パスを使用してpy.test
を呼び出すことでした:
py.test src/www/tests/
これによりコレクションの速度も上がる場合は、テストへの相対パスをpytest.ini
のaddopts
設定の最後に追加できます。例:
[pytest]
addopts = --doctest-glob='test_*.md' -x src/www/tests/
これにより、コレクションと実行時間が約1秒に短縮され、以前と同じようにpy.test
を呼び出すことができました。
xdist を使用すると、py.testの実行を並列化できます。テストをリモートマシンに送信することもできます。あなたのセットアップに依存しますが、かなりスピードアップできます:)
Cygwinのpythonで実行している特殊なケースでは、UNIXスタイルのファイル処理が遅くなります。特別な状況で速度を上げる方法については、 pytest.py cygwinでの非常に遅い起動のテスト を参照してください。
ウイルス対策ソフトウェアを実行している場合は、オフにしてみてください。私はこれとまったく同じ問題を抱えていました。テストの収集は非常に遅く実行されました。問題を引き起こしているのは私のアンチウイルスソフトウェア(Avast)であることがわかりました。ウイルス対策ソフトウェアを無効にすると、テストコレクションの実行が約5倍速くなりました。私は何度かテストして、ウイルス対策のオンとオフを切り替えたので、それが私の場合の原因だったのは間違いありません。