web-dev-qa-db-ja.com

py.testを高速化する方法

py.testの繰り返し実行を高速化する方法はありますか?コマンドラインで実行するファイルを指定しても、テストの収集に多くの時間を費やしているようです。すべての.pyファイルでpyflakesを実行するのは非常に高速であるため、ディスク速度の問題でもないことはわかっています。

41

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設定ファイル に関する詳細があります。

17
scanny

プロジェクトのルートでpy.testを呼び出すのと同じ問題があり、テストが3つのサブディレクトリ下にありました。コレクションは、実際のテスト実行の0.4秒前に6〜7秒かかっていました。

私の解決策は当初、テストへの相対パスを使用してpy.testを呼び出すことでした:

py.test src/www/tests/

これによりコレクションの速度も上がる場合は、テストへの相対パスをpytest.iniaddopts設定の最後に追加できます。例:

[pytest]
addopts = --doctest-glob='test_*.md' -x src/www/tests/

これにより、コレクションと実行時間が約1秒に短縮され、以前と同じようにpy.testを呼び出すことができました。

6
thisismyrobot

xdist を使用すると、py.testの実行を並列化できます。テストをリモートマシンに送信することもできます。あなたのセットアップに依存しますが、かなりスピードアップできます:)

2
neutrinus

Cygwinのpythonで実行している特殊なケースでは、UNIXスタイルのファイル処理が遅くなります。特別な状況で速度を上げる方法については、 pytest.py cygwinでの非常に遅い起動のテスト を参照してください。

2
rocky

ウイルス対策ソフトウェアを実行している場合は、オフにしてみてください。私はこれとまったく同じ問題を抱えていました。テストの収集は非常に遅く実行されました。問題を引き起こしているのは私のアンチウイルスソフトウェア(Avast)であることがわかりました。ウイルス対策ソフトウェアを無効にすると、テストコレクションの実行が約5倍速くなりました。私は何度かテストして、ウイルス対策のオンとオフを切り替えたので、それが私の場合の原因だったのは間違いありません。

0
Sean