2017-05-23 8 views
3

Conext:Mavenのフェイルセーフ統合テストプラグインで実行されるjunitテストクラスがあり、無限に並列化できるいくつかのテストがあります。彼らはすでに展開されているクラウドプラットフォームに対して、プロモーションを構築するためのゲートとして運営されています。これらのテストのそれぞれは、最初は速いメモリスパイクを持っていますが、その後の使用は非常に少なく、アクションが完了するまで基本的にポーリングします。junitでのスタガー並列テスト開始?

すべてのテストを並列に実行する必要があります(ジョブを高速化するスケーリング動作を引き起こす待ち行列に負荷がかかるため)。フェイルセーフで簡単ですが、メモリのスパイクも私は記憶を使い果たしてはいません。私はそれらをずらす達成すべきどのように

?現在の実装ではThread.sleep(random)が実行されますが、十分な統計的確率で重複してメモリが足りなくなります。 Semaphoreをテストクラスに入れ、@Beforeメソッドで待機する必要がありますか?これは私がカスタムJUnitランナーでもっと簡単にできることですか?

答えて

1

メモリを1つの同期化された方法でスパイクさせるデータを取得しないのはなぜですか?このようにして、各テストはメモリを1つずつスパイクします。

+0

私もこの考えがありました。それは間違いなく機能しますが、私は自分の記憶を綿密に(1つずつ)守る必要があるかどうかはわかりません。おそらく一度に5人ほどが良いかもしれませんか?いずれにしても、それはうまくいくので、アップヴォートを持ってください。 –

2

Semaphoreアプローチは、私には良いアイデアだと思いますが、あなたはおそらく@Before@Afterを使用してより細かい制御をしたい - 例えば、テストクラスにセマフォの静的を作り、メモリスパイク直前に許可証を取得し、そしてリリースメモリがGC可能になるとすぐに許可する。 Semaphoreの構築時に利用可能なパーミットの数によって、同時発生するメモリスパイクの数を制御することができます。

関連する問題