0

私は、既存の Selenium ベースの Web アプリケーション テスト システムの機能を拡張することに取り組んでいます。システムは現在、一度に 1 つのテストしか実行できません。テストの実行に並列処理を追加して、システムのスループットを向上させたいと考えています。

そのために、私はさまざまなテクノロジを調べており、Microsoft の Orleans に興味があります。しかし、Orlean のドキュメントを 1 日読み続けた結果、特定のスケーラブルなアクターを 1 台のコンピューターで最大 n 回実行する必要があるシナリオをテクノロジがサポートしているかどうかがわかりませんでした。

私の場合は、テストを実行するアクターです。通常、Selenium では、テストの実行には WebDriver オブジェクトの作成が必要であり、Web ブラウザー インスタンスを開いて制御します。これらの Web ブラウザはすべて、同じプロセスの新しいウィンドウだけでなく、個別のプロセスとして開く必要があります。上限がなく、3 つのノードのクラスターと 60 のテストのテスト計画があるとします。各マシンで同時に 20 の Web ブラウザーを開くことになり、パフォーマンスの大幅な低下または完全なクラッシュにつながる可能性があります。システムには、マシンごとに 3 つのテスト実行アクターの上限があり、残りのテストをキューに保存し、別のワーカー アクターがテストを終了した後にのみ実行することを期待しています。

Orleans テクノロジーでそれを実装するにはどうすればよいでしょうか?

4

3 に答える 3

2

Orleans にとって正しい解決策は、MaxActiveThreads をいじくり回すことではありません。ほとんどの場合、それを実際に変更するべきではありません。代わりに、合計 9 つの通常のグレインを使用し、9 つの異なるグレイン ID (0...8) を使用するだけで、システムがそれらを 3 つのサーバーにランダムに分散させ、新しいテスト リクエストを送信するときに送信するだけです。それらの9つからランダムな粒度にします。

別の方法として、StatelessWorker グレインを 1 つだけ使用し、その最大アクティベーション (サーバーごと) を 3 に設定すると、サーバーごとに正確に 3 つのアクティベーション (合計 9 つ) が得られ、システムは自動負荷分散を行います。

http://dotnet.github.io/orleans/Documentation/Advanced-Concepts/StatelessWorker.html

Orleans では、永続的なキューイングは構築されていません。クライアント/送信者側でキューに入れるか、一度に 60 個のリクエストすべてを送信する必要があります。各グレインはリクエストを内部のメモリ キューに格納し、前の作業が完了したときに次のリクエストを開始できます。

于 2016-12-15T17:16:08.573 に答える
0

Orleans は、箱から出してほとんどの要件を満たします。サイロに設定があるので、非常に多くのグレインを並行して作成します(デフォルトは cpu コアですMaxActiveThreadsを参照)。他のすべての要求は Orleans によってキューに入れられます。

Orleans 構成ファイルで構成できます。

<Scheduler MaxActiveThreads="3"/>
于 2016-12-15T12:37:53.743 に答える
0

Your problem: You want to parallelize your test-execution.

The solution is to use the Selenium-hub and node. You don't need Orleans for that.

于 2016-12-09T15:42:45.800 に答える