freeeの開発情報ポータルサイト

E2Eテスト分析基盤としてReportPortalを導入しました!

はじめに

こんにちは、SEQチーム (Software Engineering in Quality) の zaki です。
freee QA Advent Calendar 2024 - Adventar 7日目です。

SEQ では、自動テストの運用・改善や基盤開発などを行っています。 現在freeeではJenkinsやGithub ActionsでE2Eテストを実行しています。実行結果のデータをBigQueryに送って、Redashで可視化で不安定なE2Eテストの分析を行なっていました。 しかし、現在のE2Eのテスト分析には一部課題が存在し、その課題の解決のためにReportPortalというOSSのレポートツールを構築 + 導入しました。 本記事では、ReportPortalの導入経緯や構築方法および一部プロダクトで運用してみた所感をご紹介します。

現在のE2Eテスト分析基盤の課題

freeeでは、E2Eテスト結果の分析にはRedashとJenkinsを併用しています。まず、Redashのクエリで不安定なテストをリストアップします。次に、そのテストの実行ログをJenkinsで確認することで、なぜそのテストが不安定なのかを調査していました。この構成には以下のような課題がありました。

  • 分析にはRedashとJenkins両方を見に行く必要がある
    • Redashでは不安定なテスト名とfail率しか見ることができないので、なぜそのテストが不安定なのか原因まではわからない
  • fail時のスクリーンショットが直近の失敗のものしか残していない
    • 数回前の失敗のスクリーンショットを見ることができないため、Slackにわざわざスクリーンショットをアップロードするという面倒な運用になっている

以上の課題を解決する「ログ・スクリーンショットの閲覧と、失敗原因の調査を一元で完了できる分析ツール」として、ReportPortalを採用しました。

ReportPortalとは?

ReportPortal は自動テストの結果を記録して、様々な角度から分析できる TestOpsサービスです。テスト結果のログを閲覧することや、ダッシュボードを作成してE2Eテストの失敗原因を調査できます。OSSであるため、インフラコスト以外が不要となります。

reportportal.io

構築方法

ECS or EKS

ReportPortalの構築方法はいくつか方法があります。詳しくは公式ドキュメントを参照してください。

reportportal.io

freeeのインフラはAWS上に構築しているので、構築方法はEC2かECSかEKS等の選択肢がありました。そのうちECSかEKSのどちらで構築するか検討しました。

それぞれのサポート状況や、freeeのインフラは主にEKSで動いていてEKSの知見も豊富にあったため、EKSで構築することを選択しました。

構成図

大まかな構成図は以下のようになります。

ReportPortalのインフラ構成図

ReportPortalの構築には、EKS以外にもログ・スクリーンショットを保存するためにS3とDBを用意する必要があります。また、ReportPortalでは、テスト結果を効果的に収集して分析するためにバックグラウンドで OpenSearch と MQ というコンポーネントを使用します。OpenSearchはテスト実行で生成されるログデータを保存し、高速で検索・フィルタリングできるようにします。MQはテスト結果や関連データが生成された際に、非同期でReportPortalの各モジュールに渡します。今回はOpenSearchとMQはEKS上に構築せず、AWSのマネージドサービス であるOpenSearchとAmazon MQを使用しました。

これらのコンポーネントを活用することで、大量のテストデータを効率的に処理し、リアルタイムに結果を可視化することが可能になります。

インフラコストについて

以下のHardwareRequirementsのSmallに相当するインスタンスタイプで、ReportPortalを構築しました。EKS NodeをSpot Instanceにしたり、夜間にインスタンスを落とす設定を入れたりすることで、1ヶ月の費用は約$400ほどになりました。Small相当のインスタンスタイプでも、現状問題なく動作しています。

reportportal.io

E2Eプロジェクトへの導入方法

Playwrightへの導入

まずはPlaywrightを使用しているE2Eテストのログ・スクリーンショット、データをReportPortalに送るようにしました。 Playwright用のライブラリを使うことで、すぐにデータをReportPortalに送れるようになります。

github.com

Slack通知への導入

freeeではE2Eテストのテスト結果をSlackで通知しています。「View Logs」ボタンを押すとスタックトレースが表示されているReportPortalのリンクに、「View Screenshots & Video」ボタンを押すと失敗時のスクリーンショットと録画が表示されているReportPortalのリンクに遷移するように修正しました。

テスト結果のSlack通知例

分析ダッシュボードを作成

以下のようなダッシュボードを作成し、テスト分析を行なっています。

不安定なテスト一覧ダッシュボード

実行時間の長いテスト一覧

テスト結果サマリー

最後に

ReportPortalの導入が徐々に始まり、確実にE2Eテストの分析基盤が良くなった実感があります。インフラ構築には一定の労力が必要ですが、その分恩恵は大きいので、興味があればぜひ調べてみてください。

明日は、QAマネージャーの ymty-san が「ハッピーの重篤度でみんなで品質の目線合わせをするぞ!」という記事を書いてくれます。
それでは、よい品質を〜