2013-05-07 28 views
24

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

+1

「収集」段階が遅いのは確かですか? py.testを '--collectonly'で実行してみてください。 – alecxe

+1

はい、それは遅いコレクションです。私はコレクトカウントの開始を0、2、7に見ることができます。私はこれを '--collectonly'で再度検証しました。収集をポストすると、実行はほぼ即時です。 –

+1

私は400以上のテストと収集フェーズを持つプロジェクトを持っていますが、非常に高速です。さらに私はconftest.pyに多くの魔法、多くの 'parametrize'、fixtures、' pytest_generate_tests'を追加しています。これは私の場合はこの収集が高速ですが、収集を遅くするものです。 pytest収集フェーズとやりとりする独自のコードを持っていないことを確認し、それを遅くします。そうでない場合は、プロファイラーのようなラインプロファイラーを実行して、どのコードが遅いかを調べることができます。 – spinus

答えて

9

pytest.iniまたはtox.iniのnorecursedirsオプションを使用すると、作業ディレクトリにある他のファイルに応じて、多くの収集時間を節約できます。 300回のテストでは、収集時間が約半分になります(0.34秒対0.64秒)。

私は好きですが、すでにtoxを使用している場合、あなたは自分のtox.iniに以下を追加する必要があります。

[pytest] 
norecursedirs = docs *.egg-info .git appdir .tox 

あなたはまた、自立pytest.iniファイルに追加することができます。

pytestのマニュアルはmore details on py.test configuration filesです。

+0

さらに(あるいは代わりに) 'testpaths'を設定する必要があります。つまり、' testpaths = src/tests'です。 '.git'、' .tox'などをスキップする必要はありません。 – blueyed

4

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

私のソリューションは、最初にテストへの相対パスでpy.testを呼び出すことだった。それを行うこともあなたのコレクションをスピードアップした場合

py.test src/www/tests/ 

、あなたはaddoptsの最後にテストへの相対パスを追加することができますあなたのpytest.iniに設定する - 例えば:

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

これはダウン1秒程度にコレクション+実行時間を落とし、私は前にあったように私はまだちょうどpy.testを呼び出すことができます。

+1

より良い方法は、 'testpaths'、すなわち' testpaths = src/www/tests'を使ってこれを設定することです。 – blueyed

1

xdistを使用すると、py.testの実行を並列化できます。リモートマシンにテストを出荷することさえできます。あなたの設定に依存してかなり高速化することができます:)

2

cygwinのpythonで動作している特別なケースでは、UNIXスタイルのファイル処理が遅いです。その特別な状況で物事をスピードアップする方法については、pytest.py test very slow startup in cygwinを参照してください。

0

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

関連する問題