2

parallel_tests のソースを読んでいますが、まだ理解できていないので、本題に飛び込んでここで質問しようと思いました。

parallel_tests gem は、sweet 内のすべてのテストを同時に実行しますか、それとも順番に実行しますか? (複数のテストを同時に実行することは可能ですか)

並列テストを実行すると、次のようになります。

  1. 私のすべてのテストを見つける
  2. それらを偶数の山に分割します(各プロセッサに1つ)
  3. 各テストの山を順番に実行します

rake parallel:test (75 分) と rake test (85 分) を 4 プロセッサで実行した場合の時間差はわずかであるため、これについては疑問に思っています。

並列テストの出力は、一連のテストを順番に実行しているように見えます。

私の出力は次のようになります。

すべてのプロセッサが見つかったことを示すことから始めます。

rake parallel:test[functional]

4 processes for 223 tests, ~ 55 tests per process

次に、テストの各サブセットを順番に実行するようです:

......
841 tests, 3605 assertions, 0 failures, 3 errors, 0 skips

Test run options: --seed 15002
oaded suite -e

...............
Finished in 1928.494289 seconds.

542 tests, 2296 assertions, 0 failures, 0 errors, 0 skips

Test run options: --seed 30455
oaded suite -e
....
etc...

それで、これは私の出力のトリックですか、それとも実際に一連のテストを次々と実行しているのでしょうか。時間が改善されればもっと良くなると思っていましたが、これは、テストを実行するために並列化する必要がある他のものに大きな影響を与えます。

4

1 に答える 1

1

テストに大量のセットアップ/ティアダウン コードが必要な場合、または IO などのリソースの競合がある場合は、テストを並列化してもパフォーマンスが大幅に向上しない可能性があります。STDOUTparallel_test は確かにテストを並行して実行しますが、出力を順番にバッファリングします。これは、4 つのプロセスが直接書き込みを行っていて、メッセージが互いにインターリーブされているかどうかを理解するのが非常に難しいためです。

テストが並行して実行されていることに確信が持てない場合は、プルアップするtopか、他のツール (OS X のアクティビティ モニターなど) を使用して、何が起こっているかを確認してください。

これはあなたの質問に対する答えではありませんが、841 テストを並列化しようとするよりも、実行に 30 分かかるテストを最適化した方が、おそらくより多くの利益が得られるでしょう。

于 2013-03-29T19:44:41.710 に答える