私はプロジェクトのためのPythonユニットテストをたくさん持っていて、それを実行するのに時間がかかります。物事を遅くすることを知っているので、私はもっと追加したくありません。どのように人々はこの問題を解決するのですか?クラスタ上でテスト実行を簡単に配布する方法はありますか?分散/高速のPythonユニットテスト
答えて
テストが遅すぎるため、すべてのテストを頻繁に実行することはできません。これはあなたのプロジェクトが大きくなり、遠ざかることは避けられない結果です。確かに、テストを並行して実行して素早くスピードアップを試すことができるかもしれませんが、問題はちょうど後で戻ってくるでしょうし、あなたのプロジェクトが小さいときと同じになることはありません。
生産性を高めるには、単体テストをコード化して実行し、数秒以内に結果を得ることができる必要があります。テストの階層構造を持っている場合は、これを効果的に行うことができます:頻繁に作業しているモジュールのテストを実行すること、時には作業中のコンポーネントのテストを実行すること、プロジェクト全体のテストをあまり実行しないことそれをチェックすることを考えている)。一晩中実行できる統合テストまたは完全なシステムテストがあるかもしれません。この戦略は、そのアイディアを拡張したものです。
これを設定するには、コードを整理し、階層をサポートするために必要な作業がすべて必要です。
本当に遅いものを見てください。あなたは配布なしでこの問題を解決することができます。テストが本当に単体テストであれば、複数の実行エンジンにまたがってテストを実行することで多くの問題は発生しません。
この問題の解決策の最初の部分は、実行する必要のあるテストのみを実行することです。共有ブランチへのコミットの間に、新しいワークが対話するテストだけが実行されます。 5秒間かかるはずです。このモデルを採用する場合、共有リソースにコミットする前にテストスイート全体を実行することが重要になります。
完全なテストスイートを回帰目的で実行することの問題は、当然フル・スイートをあまり頻繁に実行しないことで既に部分的に対処されていますが、残っています。そのジョブの実行中に待たされることを避けるために、テストのタスクを別のマシンにオフロードすることができます。それは、継続的な統合システムのための仕事にすぐに変わります。 buildbotはあなたのユースケースにはかなり適しているようです。
また、buildbotを使用してホスト間でテストを配布し、異なるエントリポイントの2つのジョブをテストスイートに送り出すこともできます。しかし、私はこれが私がここで言及した最初の2つのステップをはるかに上回ることを確信していません。共有リソースへのコミット間隔よりも実行に時間がかかる場合に備えて予約する必要があります。
D'A
[警告のレクター:。Buildbotのの私の理解では、この時点では、主に理論的であり、おそらく、それは見た目より難しいです]
これは非常に悪いアドバイスのように、特にユニットテストの文脈のようです。コードを編集した後、* all *単位テストは、コミットする前に再度実行する必要があります。 あなたのアドバイスは、単体テスト(例:統合テスト、回帰テスト、パフォーマンステストなど)ではなく、単体テストよりも広い範囲のテストにも適しています。 – bignose
私のリビジョン管理のモデルは、厳密に原子コミットを優先していることに注意する価値があります。その大半は、チーム全体に公開されていません。これは、すべてのコミットがあまりにもわずかな利益のために負担になるため、アプリケーション全体でユニットテストを実行することになります。 私はあなたがあなた自身の周りにうっとりしている間にあなたが壊したものを捕まえるために、* shared *スペースにコミットする前にユニットテストスイート全体を再実行することに重点を置いています。 – darch
コーディングが、唯一のクラスのテストを実行あなたが変更したばかりで、プロジェクト全体のすべてのテストではありません。
ただし、コードをコミットする前にすべてのテストを実行することをお勧めします(ただし、継続的インテグレーションサーバーで実行できます)。
単体テストをマシングループに渡す機能を持つpy.test、またはマルチプロセッシングモジュールと並行してテストを実行することをサポートする(現在リリースされていないバージョンではトランクとして)Noseを参照してください。
py.testでテストを配布する方法を学ぶのは非常に面白いです。私は、多くの異なるホストにまたがって多くの "仮想"クライアントを起動することによって、n層アプリケーションのストレステストを行うための負荷テストフレームワークを作成しています。これをco-oridinateするコードを書く必要があり、py.testのコードは確かに参考になるでしょう。 – jkp
- 1. Pythonの平均と共分散の高速増分更新
- 2. 小規模ファイル用高速分散ファイルシステム
- 3. 平均と分散を計算するブーストアキュムレータ - 高速ですか?
- 4. 分散システム、最高のフレームワーク?
- 5. RcppEigen速い共分散
- 6. 高速Python MySQL
- 7. 高速のUart(Python)
- 8. Pythonの高速サブセットサブリスト
- 9. 分散分析Pythonで
- 10. Python離散微分
- 11. 分散グラフアルゴリズムのパフォーマンスをどのように高速化するには?
- 12. 高速python HTMLパーサ
- 13. 高速Python IPv6コンパクション
- 14. Pythonの分散型マルチプロセッシングプール
- 15. Pythonの分散コンピューティング - Webクローラー
- 16. スイフト3:高速ファイルパス分離
- 17. Pythonの高速素数篩
- 18. Pythonイテレータの高速化
- 19. Pythonの高速pingスイープ
- 20. プロセスの高速化Python
- 21. Pythonでの高速テキストマッチング
- 22. 共分散と高kindedタイプ2.12
- 23. Pythonでビンビン加重分散
- 24. pythonロード・インスタンスが高速
- 25. Python高速単色ビットマップ
- 26. Python - 高速ファイル検索
- 27. ループ内でのプロットによるシミュレーション - 離散化の高速化
- 28. Pythonで文字列分割を高速化する方法
- 29. MATLABでの高速文字列分割
- 30. Javaでの高速整数分割
"長い時間"を定義します。なぜこれらはバックグラウンドで実行できないのですか? –
あなたは何をしたいのかを見つけましたか? –