SeleniumGrid環境の推奨構成
このページでは、Selenium Gridの実機でのパフォーマンス測定結果をもとに、Selenium Grid環境でPCブラウザのテストを行う際の推奨構成について記述しています。
想定スペック
動作させるPCのスペックは以下を想定しています。
- OS: Windows 7 64bit
- メモリ: 8GB
- CPU: Intel Core i7
推奨構成
HubとNodeの構成
Selenium Grid 環境でPCブラウザのテストを行うには、以下のような構成を推奨します。
HubとNodeの配置 | 同じPC上に共存してもよい | ||
---|---|---|---|
Nodeの設定値目安 | maxSession | 5~10 | maxSessionとmaxInstancesの最大値が 同じになるよう設定する |
maxInstances | 各ブラウザ5~10 | ||
1Nodeで同時に処理するリクエスト数の目安 | 最大でも50件程度に収まるとよい。 それを超える場合は、NodeもしくはSelenium Grid環境自体を増設し、リクエストを分散させることを検討する。 |
パフォーマンス測定結果
参考値として、複数件のテストを同時実行した際のパフォーマンス測定結果を以下に掲載しています。
Hubのパフォーマンス
HubにNodeを1-3台接続し、テストを実行して負荷を計測した結果、以下のようになりました。
各ノードにはIE11のみ登録し、maxSession/maxInstancesはすべて5件に設定しています。
1Node / テストを25件同時実行 | 1Node / テストを100件同時実行 |
2Node / テストを100件同時実行 | 3Node / テストを100件同時実行 |
Hubは動作時にメモリ消費がほとんどなく、接続ノード数とリクエスト数(テスト同時実行数)に応じてNodeへの振り分け時にやや負荷が生じています。
1つのHubに対して接続Node数が多い場合はHubとNodeを別マシン上に構築するのが望ましいですが、
Node数がそれほど多くない場合や、1NodeあたりのmaxSession/maxInstancesを小さく(推奨値内で)設定する場合は、
HubとNodeを同じPC上に構築する運用も可能と思われます。
Nodeのパフォーマンス
HubにNodeを1つ接続し、1NodeあたりのmaxSession/maxInstancesの設定を変えながら、テストのリクエストを50-100件同時に流して全件完了までの所要時間を計測しました。
# テスト1ケースあたりの所要時間は約18秒です。
# HubとNodeは同じPC上で起動しています。
Node数 | maxSession/maxInstances | テスト同時リクエスト数 | 所要時間(秒) | 平均時間(秒)/件 (所要時間/リクエスト数) | 平均並列動作数 (18秒×実行数/所要時間) |
---|---|---|---|---|---|
1 | 5 | 50 | 240 | 4.8 | 3.8 |
1 | 5 | 75 | 330 | 4.4 | 4.1 |
1 | 5 | 100 | 420 | 4.2 | 4.3 |
1 | 6 | 100 | 380 | 3.8 | 4.7 |
1 | 7 | 100 | 360 | 3.6 | 5.0 |
1 | 8 | 100 | 330 | 3.3 | 5.5 |
1 | 50 | 50 | 200 | 4 | 4.5 |
1 | 50 | 75 | 260 | 3.5 | 5.2 |
1 | 50 | 100 | 345 | 3.45 | 5.2 |
maxInstancesを5に設定した場合と50に設定した場合で比較すると、理論上は1/10の時間で実行されるはずですが、2割弱しか短縮されませんでした。(黄色の行)
maxInstancesを5から1ずつ増やして計測した結果、並列実行数8に設定した場合と50に設定した場合がほぼ同じ所要時間になりました。(水色の行)
つまり、maxInstancesを大きな数字に設定しても、実質同時に処理できる数には限界があり、5.5件前後に収まると考えられます。(「平均並列動作数」の列を参照)
一方で、リソース消費はmaxInstancesを50件に設定した場合の方が圧倒的に大きくなります。
また、その際、いくつかのテストがエラーで終了してしまいました。
maxInstances5件に設定/テストを100件実行 | maxInstances50件に設定/テストを100件実行 |
以上から、NodeのmaxInstancesの設定はデフォルトの5件から最大10件程度に抑えておくのが最も効率的と思われます。
maxSessionは、そのNodeに登録したブラウザのmaxInstancesの最大値に設定しておきます。