Selenium 4 での可観測性
カテゴリ
Selenium サーバーが動作していない場合に問題を診断するのは、これまで容易ではありませんでした。Selenium 4 では、OpenTelemetry を統合して、問題のトラブルシューティング、パフォーマンスの最適化、およびシステムへの可視性の提供を支援します。Selenium サーバーを可観測可能にすることで、より多くの力をユーザーの手に委ねています。
可観測性の必要性
Selenium サーバーは分散テスティングを可能にします。テスト用のブラウザをローカルで実行する代わりに、テストはサーバーを指すリモートブラウザドライバを使用します。サーバーは、さまざまなリモートサーバーでテストを実行するための「スマート」な決定を行います。このような各リモートサーバーは、さまざまなタイプのブラウザとブラウザバージョンをホストできます。
Selenium 3 は、ハブをコーディネーターとして使用します。ハブは、新しいセッションリクエストを受信し、適切なノードに転送します。ノードは、ブラウザ自体が実行されるリモートエンドです。
Selenium 4 はこれを拡張して、ユーザーが本格的な分散システムをセットアップする方法を提供します。本質的に、Selenium 4 はハブをさまざまなコンポーネントに分割し、追加の機能強化を行っています。ただし、ノードの役割は変わりません。下位互換性と Grid のセットアップの簡素化を確保するために、新しい Selenium サーバーではスタンドアロンモードとハブノードモードも利用できます。
ここで、数百のノード、さまざまなブラウザとブラウザバージョンを備えた本格的な分散 Selenium Grid を実行している状況を想像してください。このようなインフラストラクチャで大規模にテストを行うには、大量のリクエストが発生します。これらのリクエストをどのように追跡できるでしょうか? Selenium 可観測性の登場です!
Selenium はどのように可観測性を提供しますか?
Selenium は OpenTelemetry を使用して、トレースとイベントログをインストルメント化します。トレースは、リクエストのライフサイクルを追跡します。リクエストが分散システムを移動するにつれて、リクエストのトレースには、その過程で実行された重要な操作に関するすべての情報が含まれます。このような操作はスパンと呼ばれます。スパンは、システムの状態を理想的にカプセル化するイベントと呼ばれるタイムドログを記録できます。これらがイベントログです。
デフォルトでは、Selenium サーバーはトレースを有効にします。Selenium サーバーは、さまざまなモードで実行できます。
トレースとイベントログは、すべてのモードで利用できます。トレースを確認する最も簡単な方法は、コンソールログの形式です。デフォルトでは、Selenium サーバーは INFO レベル以上でログを出力します。Selenium Grid の実行中に選択したログレベルを渡すには、log-level フラグを使用します。log-level を FINE に設定すると、トレースとイベントログがコンソールログとして表示されます。
大規模システムの場合、トレースをログとして消費することは効率的ではない可能性があります。トレースを視覚化およびクエリすることで、リクエストの失敗を簡単にトラブルシューティングできます。Jaeger は OpenTelemetry とシームレスに統合して、リクエストトレースのクエリ、視覚化、および収集の豊富なエクスペリエンスを提供します。
java -jar selenium-server-<selenium-version>.jar info tracing
を実行します。
Selenium サーバーで Jaeger をセットアップするための詳細で最新の手順が提供されます。トレースを視覚化すると、トレースを解釈し、リクエストフローを理解することが容易になります。Grid ユーザーは、リクエストを簡単にトレースし、エラーをドリルダウンしたり、クエリを実行して何が起こっているかを観察したりできます。

詳細については、Selenium 可観測性 を参照してください。
フルスタックトレース
Java クライアントバインディングはトレースをサポートしています。フルスタックトレースを使用すると、クライアントからサーバー、そして戻るまでのリクエストをトレースできます。クライアントは単一のコンポーネントですが、クライアントトレースにはリクエストの構築に役立つスパンが含まれます。クライアント側の問題を特定し、必要に応じてテストを修正することが容易になります。
サーバーがトレースをどのようにサポートし、それを活用する方法はすでに説明しました。クライアント側では、Opentelemetry 依存関係をプロジェクトセットアップに追加し、トレースを Jaeger にエクスポートするために必要なシステムプロパティを追加します。詳細な手順については、RemoteWebdriver クライアント を参照してください。
トレースとイベントログの活用
問題の解決策は、エラーを知ることにあります。既知のエラー状況の場合、イベントログが役に立ちます。イベントログは、詳細なエラー情報とスタックトレースを提供します。エラーコードで時間範囲の収集されたトレースをクエリして、エラーの頻度を特定します。これにより、エラーが一時的なものかどうかを判断し、それに応じてアクションを実行するのに役立ちます。

リクエストのレイテンシを観察して、潜在的なボトルネックを特定します。各トレースには、各スパンにかかった時間も含まれます。問題は、基盤となるインフラストラクチャのセットアップ、ネットワークのレイテンシ、またはコード自体にある可能性があります。原因に関係なく、問題のある領域を特定することが容易になります。
可観測性は、システムに不可欠なプロパティになりつつあります。Selenium は可観測になりました! さあ、試してみてください。改善が必要な点があればお知らせください。