Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Exploring Azure Functions for Synthetic Monitoring with Playwright: A Complete Guide - Part 2

2025年09月11日に「Dev.to」が公開したITニュース「Exploring Azure Functions for Synthetic Monitoring with Playwright: A Complete Guide - Part 2」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Playwrightテストのカスタムレポーターは、テスト結果を自動で処理する。テストの成功・失敗や実行時間はApplication Insightsへ送り、稼働状況を監視する。失敗時の詳細レポートはAzure Blob Storageに保存し、問題の原因究明に活用する。これにより、アプリの健全性を効率的に管理できる。

ITニュース解説

合成監視は、WebサイトやAPIが常に正常に機能しているかを、実際のユーザーと同じように定期的に自動でチェックする仕組みだ。これにより、問題が発生した場合にすぐ検知し、ユーザーが気づく前に対応できる。この記事では、前回の記事で構築したAzure FunctionsとPlaywrightを使った合成監視ソリューションにおいて、テスト結果をどのように収集し、報告するかという「レポート機能」について詳しく解説する。具体的には、テスト結果の情報をApplication Insightsに送り、テスト中に生成されたHTMLレポートやスクリーンショットといった「成果物」をAzure Blob Storageに保存する仕組みが中心となる。

テストを実行するだけでは、何が起こったのか、なぜ失敗したのかがすぐに分からない。そこで重要になるのが、テスト結果を分かりやすく整理し、必要な情報を適切な場所に送る「カスタムレポーター」の存在だ。PlaywrightはWebブラウザを自動操作してテストを行うツールであり、レポーターはそのテスト実行中に結果を処理するためのプラグインとして機能する。私たちのカスタムレポーターは、Playwrightが提供するインターフェースを実装しており、個々のテストが終了した際に呼び出されるonTestEnd()と、全てのテストが完了した際に呼び出されるonEnd()という主要な二つのメソッドを持っている。

このカスタムレポーターをPlaywrightのテストに組み込むには、playwright.config.tsという設定ファイルにレポーターのパスを記述する。複数のレポーターを同時に実行できるため、Playwright標準のHTMLレポートやJUnit形式のXMLレポートと並行して、私たちのカスタムレポーターも動作させることが可能だ。Playwrightはテストを実行する際に、この設定に基づいてカスタムレポーターを読み込み、インスタンスを作成する。そして、テストが一つ終わるごとにonTestEnd()を、全てのテストが終わった後にonEnd()を自動的に呼び出すことで、テストのライフサイクルに合わせて結果処理を行うのだ。

onTestEnd()メソッドでは、個々のテストが終了した直後にそのテストの結果を処理し、Application Insightsに送信する。Application Insightsは、アプリケーションのパフォーマンス監視やエラー検出を行うAzureのサービスだ。このメソッドでは、テストのタイトル、成功・失敗の状態、実行にかかった時間などの情報を収集し、「可用性テレメトリー」としてApplication Insightsに記録する。この可用性テレメトリーは、Webサイトの稼働状況や応答時間を監視するのに非常に適している。また、Playwrightのテストにはリトライ(再試行)の機能があるため、もしテストが複数回失敗しても、最後の試行の結果だけを報告するように調整することで、誤った重複データがApplication Insightsに送られるのを防いでいる。テストが成功したか、最終的なリトライで失敗したかを確認し、その結果だけを送信する仕組みだ。

一方、onEnd()メソッドは、全てのテストが完了した後に一度だけ呼び出される。このメソッドの主な役割は二つある。一つは、テスト中に生成された成果物、例えばHTMLレポートやスクリーンショットなどをAzure Blob Storageにアップロードすることだ。特に、テストが失敗した場合にのみこれらの成果物をアップロードするようにすることで、ストレージのコストを抑えつつ、問題発生時のデバッグに必要な情報を確実に残せるようにしている。もう一つは、Application Insightsへまだ送信されていない全てのテレメトリー(データ)を確実にフラッシュ(送信完了)させることだ。Azure Functionsのように実行時間が限られている環境では、関数が終了する前に全てのデータが送信されていることを保証するために、このフラッシュ処理が非常に重要となる。

Application Insightsとの連携は、専用のクライアントライブラリを使って行われる。このクライアントは、Azureポータルで発行される接続文字列を使って設定され、リアルタイムでのメトリクス送信、分散トレース、HTTPリクエスト、パフォーマンスカウンター、例外、依存関係、コンソールログなど、多岐にわたる情報の自動収集を有効にできる。これにより、合成監視のテストが実行されるたびに、そのテストの成否や実行時間、エラーメッセージといった詳細な情報がApplication Insightsに集約され、ダッシュボードでの可視化やアラート設定に利用される。特に、先述のフラッシュ処理は、Application Insightsクライアントが収集したデータをサーバーに送り出すための最終ステップであり、一定のタイムアウトを設定して、確実にデータが送信されるまで待機する仕組みになっている。これにより、短時間で実行されるAzure Functionsでもデータ損失のリスクを最小限に抑えることができる。

Azure Blob Storageは、画像や動画、ドキュメントなど、構造化されていない大量のデータをクラウド上に保存するためのサービスだ。今回の合成監視では、テストが失敗した際に生成されるHTMLレポートやスクリーンショットといった成果物をここに保存する。Blob Storageとの接続も、接続文字列を使って行われ、特定の「コンテナ」(フォルダのようなもの)に対してファイルをアップロードする。アップロードのプロセスでは、まずPlaywrightが生成したレポートフォルダ全体をZIP形式で圧縮する。これは、複数のファイルを一つにまとめ、ファイルサイズを大幅に削減することで、アップロード時間を短縮し、ストレージ容量を節約するためだ。圧縮されたZIPファイルは、タイムスタンプを含む一意の名前(例: report-2025-09-09T10-30-45-123Z.zip)を付けてBlob Storageにアップロードされる。この命名規則により、ファイルは作成日時順に並び、管理しやすくなる。アップロード時には、ファイルの種類を示すコンテンツタイプや、アップロード日時、送信元などのメタデータを付与することで、後からの検索や整理を容易にしている。アップロードが完了した後には、一時的に作成されたローカルのZIPファイルを削除し、ディスクスペースをクリーンに保つ。

このように、Playwrightカスタムレポーターは、テストの実行と監視インフラストラクチャをつなぐ重要な橋渡し役を果たす。個々のテスト結果をリアルタイムでApplication Insightsに送り、テスト失敗時にはデバッグに不可欠な成果物をAzure Blob Storageに保存する一連の仕組みは、単なるテスト結果の羅列を「行動につながる洞察」へと変える。これにより、システムの可用性やパフォーマンスを効果的に監視し、問題が発生した際には迅速に原因を特定して対応できるようになる。全体として、このレポート機能は、アプリケーションの信頼性を維持し、サービスの品質を向上させるための強力な基盤を提供するものとなる。

関連コンテンツ

関連IT用語