2009-04-30 19 views
4

私はプロジェクトのためのPythonユニットテストをたくさん持っていて、それを実行するのに時間がかかります。物事を遅くすることを知っているので、私はもっと追加したくありません。どのように人々はこの問題を解決するのですか?クラスタ上でテスト実行を簡単に配布する方法はありますか?分散/高速のPythonユニットテスト

+0

"長い時間"を定義します。なぜこれらはバックグラウンドで実行できないのですか? –

+1

あなたは何をしたいのかを見つけましたか? –

答えて

4

テストが遅すぎるため、すべてのテストを頻繁に実行することはできません。これはあなたのプロジェクトが大きくなり、遠ざかることは避けられない結果です。確かに、テストを並行して実行して素早くスピードアップを試すことができるかもしれませんが、問題はちょうど後で戻ってくるでしょうし、あなたのプロジェクトが小さいときと同じになることはありません。

生産性を高めるには、単体テストをコード化して実行し、数秒以内に結果を得ることができる必要があります。テストの階層構造を持っている場合は、これを効果的に行うことができます:頻繁に作業しているモジュールのテストを実行すること、時には作業中のコンポーネントのテストを実行すること、プロジェクト全体のテストをあまり実行しないことそれをチェックすることを考えている)。一晩中実行できる統合テストまたは完全なシステムテストがあるかもしれません。この戦略は、そのアイディアを拡張したものです。

これを設定するには、コードを整理し、階層をサポートするために必要な作業がすべて必要です。

2

本当に遅いものを見てください。あなたは配布なしでこの問題を解決することができます。テストが本当に単体テストであれば、複数の実行エンジンにまたがってテストを実行することで多くの問題は発生しません。

1

この問題の解決策の最初の部分は、実行する必要のあるテストのみを実行することです。共有ブランチへのコミットの間に、新しいワークが対話するテストだけが実行されます。 5秒間かかるはずです。このモデルを採用する場合、共有リソースにコミットする前にテストスイート全体を実行することが重要になります。

完全なテストスイートを回帰目的で実行することの問題は、当然フル・スイートをあまり頻繁に実行しないことで既に部分的に対処されていますが、残っています。そのジョブの実行中に待たされることを避けるために、テストのタスクを別のマシンにオフロードすることができます。それは、継続的な統合システムのための仕事にすぐに変わります。 buildbotはあなたのユースケースにはかなり適しているようです。

また、buildbotを使用してホスト間でテストを配布し、異なるエントリポイントの2つのジョブをテストスイートに送り出すこともできます。しかし、私はこれが私がここで言及した最初の2つのステップをはるかに上回ることを確信していません。共有リソースへのコミット間隔よりも実行に時間がかかる場合に備えて予約する必要があります。

D'A

[警告のレクター:。Buildbotのの私の理解では、この時点では、主に理論的であり、おそらく、それは見た目より難しいです]

+0

これは非常に悪いアドバイスのように、特にユニットテストの文脈のようです。コードを編集した後、* all *単位テストは、コミットする前に再度実行する必要があります。 あなたのアドバイスは、単体テスト(例:統合テスト、回帰テスト、パフォーマンステストなど)ではなく、単体テストよりも広い範囲のテストにも適しています。 – bignose

+0

私のリビジョン管理のモデルは、厳密に原子コミットを優先していることに注意する価値があります。その大半は、チーム全体に公開されていません。これは、すべてのコミットがあまりにもわずかな利益のために負担になるため、アプリケーション全体でユニットテストを実行することになります。 私はあなたがあなた自身の周りにうっとりしている間にあなたが壊したものを捕まえるために、* shared *スペースにコミットする前にユニットテストスイート全体を再実行することに重点を置いています。 – darch

1

コーディングが、唯一のクラスのテストを実行あなたが変更したばかりで、プロジェクト全体のすべてのテストではありません。

ただし、コードをコミットする前にすべてのテストを実行することをお勧めします(ただし、継続的インテグレーションサーバーで実行できます)。

3

単体テストをマシングループに渡す機能を持つpy.test、またはマルチプロセッシングモジュールと並行してテストを実行することをサポートする(現在リリースされていないバージョンではトランクとして)Noseを参照してください。

+0

py.testでテストを配布する方法を学ぶのは非常に面白いです。私は、多くの異なるホストにまたがって多くの "仮想"クライアントを起動することによって、n層アプリケーションのストレステストを行うための負荷テストフレームワークを作成しています。これをco-oridinateするコードを書く必要があり、py.testのコードは確かに参考になるでしょう。 – jkp