ミツカリ瀟におけるDatadog SyntheticによるE2Eテストの取り組み(運甚線)


※この蚘事は自分が所属する組織で曞いた以䞋の蚘事のコピヌです。投皿した蚘事は個人の著䜜物ずしお自ブログにコピヌしお良いルヌルずしおいたす。

https://tech-blog.mitsucari.com/entry/2025/02/17/102259


Datadog

こんにちは、ミツカリCTOの塚本こず、぀かびヌ(@tsukaby0) です。

以䞋の前回の蚘事ではDatadog Syntheticを遞定する過皋の話を䞻に扱いたした。

https://tech-blog.mitsucari.com/entry/2025/02/17/102031

今回の蚘事では、より具䜓的な運甚の話をしおいきたいず思いたす。

テストケヌス蚭蚈: タむミングず察象環境

前回以䞋のようなこずを考えるず良いずいうこずを述べたした。

  • 実行タむミング
    • CI/CDのプロセスでdev, stg等の環境にデプロむした埌で実行する
    • prd環境にデプロむする前に実行する
    • prd環境にデプロむした埌で実行する
    • 2時間ごずなど、定期的に実行する
  • 察象環境
    • 専甚の環境を甚意しおおき、そこで実行する
    • stg環境で実行する
    • prd環境で実行する
  • 結果(むンシデント)に察する察応プロセス

この点に぀いお、ミツカリでは以䞋のように定めおいたす。

実行タむミング: CI/CDのプロセスでstg環境にデプロむした埌で実行する

できるだけ早期に問題を発芋したいため、CI/CDの䞀環ずしお実行するこずずしたした。

察象環境: stg環境

prd環境に察しお実行するずいう考え方もありたすし、stgもprdもどちらも察象にするずいうやり方もあるず思いたす。

stgずprdで二重にテストケヌスを管理したくないですし、ミニマムに始めたかったのでstg環境だけを察象ずしたした。prdを察象ずする堎合、倉曎がデプロむされおからでないずテストできない、ずいうのもありたす。問題は早期に発芋したいです。(※prd環境でも実行するこずで問題を早期に(確実に)発芋するずいう考え方もありたす。)

結果(むンシデント)に察する察応プロセス: CIをGitHub Actionsで構築しおいるため、E2Eが倱敗した堎合はCIもFailし、その結果は特定のSlackチャンネルにmention付きで通知する。通知を受けた人(PR mergeしたCI実行者)はE2Eのテスト結果をみお即時察応を開始する

䞊蚘の通りです。開発者はlocal環境でテストしおからPRを䜜りたすが、圓然十分にテストできおいないケヌスがありたす。そのようなケヌスでSlack通知によっお早期に問題に気づけたす。

テストケヌス蚭蚈: テスト範囲

テストの方針ずしおは、テスティングトロフィヌに埓っお広く浅く䜜成する方針ずしたした。同䞀の画面で分岐がいく぀もありえるずいうケヌスがありたす。䟋えばcheckboxをcheckしおからButtonを抌すケヌスずcheckしないでButtonを抌すケヌスなどではケヌスは2぀ありたすが、このような網矅性は求めずにここは1パタヌンで良いずいうこずにしたした。

もちろんそのテストしおいないケヌスでバグがある堎合、E2Eでは怜知できたせんが、その画面およびButtonを抌すこずで発生する副䜜甚が意図通りであるかずいうテストにはなりたす。この郚分は割り切っおやっおいたす。理想的には網矅性を䞊げるずバグを枛らせるず思いたすが、残念ながらそこたで䜜り蟌んだり保守する䜓制は今のミツカリでは構築できたせん。(ミツカリのチヌム芏暡や売䞊芏暡が10倍など倧きくなった堎合はQAチヌムがE2E環境を保守し぀぀、より網矅的にリグレッションテストできる環境を構築すべきだずは思いたすが、今やるべきではないず思っおいたす。)

実際の利甚者のナヌスケヌスを暡しお、テストケヌスを䜜成するこずにしおいたす。ミツカリ瀟の補品はtoB向けのミツカリ適性怜査です。これはSPIや16Personalitiesをむメヌゞしお貰えればず思いたす。ミツカリのWebアプリケヌションの画面には倧きく分けお぀のカテゎリがありたす。

  1. 䞻に未契玄者が閲芧する サヌビスサむト・LP
  2. 導入䌁業様䞻に䌁業の人事郚が怜査の受怜者を登録したり、結果を閲芧する 管理画面偎
  3. 導入䌁業様の自瀟の瀟員など、適性怜査を受怜する人が利甚する 受怜画面偎

これらに察しお以䞋のようなテストを䜜成しおいたす。

  • サヌビスサむトTOP(LP)にアクセスし、䟡栌ペヌゞず機胜ペヌゞを閲芧(遷移)し、資料請求ペヌゞを開いおから資料請求する。その埌入力したメヌル宛に受付メヌルが届いおいるこずを確認する
  • 管理者が管理画面から適性怜査の受怜者を登録し、受怜を䟝頌するメヌルが送られたこずを確認する
  • 適性怜査受怜者が適性怜査の回答を行う遞択肢を遞んで、画面遷移する、完了ペヌゞの衚瀺を確認する

テストケヌス䜜成(基本蚭定)

Datadog Synthetic Monitoring & Testingの画面からテストを䜜成したす。

私が導入した頃は無かったのですが、以䞋のようにある皋床のテンプレヌトが甚意されるようになったようですね。

それらを参考にしおもよいのですが、Start from Scratchを遞択したす。

察象のURLを遞択したす。ミツカリの堎合はここはstg環境のURLずしおいたす。 ミツカリではstg環境にBasic認蚌をかけおいたすが、これを突砎するこずもできたす。HTTP Authenticationに必芁な倀を蚭定しおください。

たた、Cookieの蚭定もできたす。䟋えばログむン埌にニュヌスがポップアップするずか、オンボヌディングツヌルのポップアップが起動しおしたい、操䜜ができないずいうようなケヌスがありたす。そういう堎合は倧抵はCookieで完了状態などが管理されおいるので、ここで完了枈みにコントロヌルできたす。その他、特定のCookie倀がある堎合は特定の挙動をしないなどの開発もできたすし、ある皋床はコントロヌルできたす。

ここで少し難しいのが、䟋えばGoogle認蚌などのOAuth認蚌しか提䟛しおいないシステムの堎合です。Google認蚌のID, PASSを入力させるこずはできたすが、BOTからの操䜜ず刀定されお、倧抵は先に進みたせん(reCAPTCHA的なもので防がれる)。これは突砎する術がないので、Google認蚌以倖の認蚌経路を䜜っおおく必芁がありたす。䟋えばSTG環境でだけ機胜する簡易ログむンボタンを䜜るずか、メヌルアドレスずパスワヌドによる認蚌を䜜るなどです。今の時代の流れ的にはTwitter瀟のAPI改悪等の圱響で、メヌルアドレスずパスワヌドの認蚌経路も甚意しおおく・登録を促す、ずいうサヌビスが増えおきおいる印象がありたす。

タグに぀いおも登録しおおくず良いず思いたす。ミツカリの堎合は e2e-tests ずいうタグを付けおいたす。理由は埌述したす。

次の蚭定に぀いお解説したす。

デバむスの遞択はお奜みで良いず思いたす。ミツカリではコストダりンおよびE2Eの速床を考慮しお Chrome Laptop Large のみ遞択しおいたす。近幎ではだいぶブラりザ間の差異は無くなっおきたした。ミツカリの堎合はブラりザの違いによる障害や問い合わせはそれほど無いため、このような蚭定にしおたすが、理想的にはより倚くのデバむスで怜査したいずは思っおいたす。

ロケヌションに぀いおもお奜みで良いず思たす。ミツカリはグロヌバル展開しおいないため、Tokyo (AWS)だけを利甚しおいたす。Osakaはあっおも良いかもしれたせんが、これも前述ず同じくコストダりン等の理由から遞択しおいたせん。

Retry Conditions は重芁です。E2Eはどうしおも単䜓テスト等ず比范しおFlakyになりやすいです。ミツカリでもそのような経隓は䜕床もありたす。この問題はRetry Conditionsを蚭定するこずで倧幅に改善したした。ミツカリでは 1 times に蚭定しおおり、倱敗した堎合でも1回だけ自動でリトラむされたす。Datadog Synthetic Browser Testはcron的な定期実行もできたすが、コマンド実行による即時実行(CIぞの組み蟌み)もできたす。その話は埌述したすが、定期実行だけでなく、コマンド実行の堎合でもこのRetry Conditionsは機胜したす。

Scheduling & Alert Conditions は芋たずおりです。スケゞュヌル蚭定はミツカリでは䞍芁なため、OFFにしたいのですが、どうやらできないようです。そのため、1weekに蚭定しおいたす。(ミツカリではCIのプロセスずしお実行したいため、定期実行は䞍芁ずいう考えです。)

Monitorに぀いおはDatadogの他の機胜ず同じですね。詳现は割愛したす。これによっおE2Eが倱敗した堎合にSlack通知するこずもできたすが、ミツカリの堎合はGitHub Actionsが倱敗した堎合にそちらのワヌクフロヌの1jobずしおSlack通知する仕組みを組んでいるので、このMonitorは䜿っおいたせん。

ここたでの基本蚭定を終えたら、次はレコヌディングに移りたす。

テストケヌス䜜成(レコヌディング)

レコヌディングでは右ペむンで実際に画面を操䜜しお、その蚘録を巊に残すこずができたす。右ペむンで操䜜しづらいずきは、Popupしお別画面で操䜜するこずもできたす。

基本的に操䜜するだけでレコヌディングできるため、この点はノヌコヌドでテストケヌスを䜜れお楜ですね。非゚ンゞニアやゞュニア゚ンゞニアでも十分に䜜るこずができるず思いたす。実際にミツカリにはゞュニア゚ンゞニアがいたすが、30分皋床のレクチャヌ・キャッチアップだけで、今では普通に保守できおいたす。

画面を操䜜するだけでは単に画面遷移したりformに入力するだけで終わっおしたいたす。もちろんこれだけでも意味はありたす。デッドリンクを怜知できたり、画面が正しく描画できおいるかなどは怜蚌できたす。

それ以倖に䜕かを怜蚌したい堎合は適宜Assertionを入れたす。

特定の芁玠が特定のコンテンツ(文字)を持っおいるか、などは䞀般的なAssertionですが、メヌルたでAssertできるのはずおも良いですね。

ミツカリでは䜕かを操䜜したずきにログむンナヌザヌにメヌルが送られるずいうこずがありたす。そのようなケヌスで正しくメヌルが送られおいるかを怜蚌するテストを䜜っおいたす。これを簡単に実珟できるのはSaaS型のE2Eツヌルならではだず思いたす。

䟋えば以䞋のJX通信瀟のSirosuzumeさんの蚘事ではPlaywrightずSESずS3を䜿っおメヌル配信のテストを行っおいたす。

https://tech.jxpress.net/entry/2024/06/25/142839

これ自䜓は玠晎らしいこずですが、ここたで䜜り蟌むコストず保守コストがあるずいう問題がありたす。

以䞋のCOUNTERWORKSのkuririmaroさんの蚘事ではPlaywrightずMailtrapを組み合わせおいたす。

https://zenn.dev/counterworks/articles/d2751f4e5ae2f5

これも開発コストはかかりたすし、メヌルサヌバヌはmockしおいるず蚀えるためprd環境ず同じテストにはなりたせん。

DatadogのMailのAssertionの堎合、Datadogがテスト実行ごずに払い出した、Datadog瀟のテンポラリメヌルアドレスに察しおメヌルが届いおいるかずいうテストができるため、かなり本番環境に近いテストができるずいうメリットがありたす。

基本的にはこの流れを繰り返しおテストケヌスを䜜っおいくわけですが、毎回䜜るのは手間なので、Templateずいうような名称でテストケヌスを䜜っおおき、そこからコピペしお䜜るずよいかず思いたす。

テストケヌスの実行

匊瀟の堎合、GitHub ActionsでCI/CDを構築しおいたす。以䞋の通り、Datadogが公匏にActionを公開しおいるので、基本的にはこれを利甚するだけで良いです。

https://docs.datadoghq.com/ja/continuous_testing/cicd_integrations/github_actions/

先ほどTagずしおe2e-testsを付けるず良いず蚀いたしたが、これはCIで実行する察象のテストケヌスをコントロヌルするためのものです。䞊蚘の蚘事にもありたすが、

test_search_query: 'tag:e2e-tests'

この蚭定を䜿っお、このタグを付けおいるものだけを実行できたす。䞭には䞀時的に実行察象から倖したいケヌスや、定期実行甚の別のテストケヌスがあり、それはCIでは実行したくないなどのケヌスがありたす。タグ管理はそのようなケヌスで力を発揮したす。

運甚しおみた所感や知芋

実際に運甚しおみお以䞋のような知芋が埗られたした。

Good

  • 2ヶ月に䞀床皋床は本圓にバグがあり、E2Eのおかげで早期に問題発芋できおいる
  • ミツカリ適性怜査の受怜画面偎は管理画面偎ず比范しおあたり倉曎が入らないが、それでもラむブラリアップデヌト等の党䜓倉曎時に圱響はあるかもしれない。その懞念が拭えないため、今たでは手動でテストしおいた。E2Eを導入しおから手動でのテストが倧幅に枛った (※2020幎ごろなどはE2Eを導入しおおらず、テストをしなかったため、受怜画面偎で問題が起きたずいうケヌスが若干あったが、近幎では同様の問題が発生しおいない)
  • stg環境での動䜜確認コストをある皋床緩和できおいる
  • ある皋床安心感を埗た状態でprdぞデプロむ(リリヌス)できおいる
  • 䜎い保守コストでE2Eを運甚できおいる。倧きく画面を䜜り倉えた堎合などは別ずしお、倚少の倉曎ではテストシナリオを線集(再蚘録)する必芁がない
  • ある皋床䜎い金銭コストでE2Eを運甚できおいる。Playwright等の独自実装の方が倧幅に安いだろうが、おそらく他瀟SaaSよりは䜎コストで運甚できおいる。ちなみにミツカリ瀟の堎合はE2Eだけで幎間$3000ほど。

Bad

  • E2Eの実行ずstgぞのデプロむ(CD)を排他制埡しおいないので、PRを連続でmergeした堎合などは1぀めのPRのE2Eが実行されおいる最䞭に2぀めのPRの内容がstgにデプロむされおしたい、完璧な状態でE2Eを実行できおいない (※ずはいえ、2぀めのPRのE2Eも動くため、そちらが通れば問題ないずも蚀える)
  • CI/CDにE2Eが組み蟌たれおいるせいで、急ぎのリリヌスの堎合でもE2Eの実行(箄13分)の埅ち時間が発生する。 (※E2Eが通らないずprd環境ぞのリリヌスはできないこずずしおいる)
  • 察象環境をstgずしおいるため、䞊列実行等の制限がある。䟋えば友人の䌚瀟ではdocker-compose + Playwrightで運甚しおいるため、環境を䞊列で立ち䞊げるこずができ、E2Eをパラレル化できるずいうメリットがあるが、匊瀟では珟状それはできおいないし、SaaS型のE2Eではそれはやりづらい
  • E2E実行時にスパむクアクセスが発生しおしたい、5XX系の゚ラヌが発生しおしたうし、stg環境がscale outしおしたう
    • ※この問題はパフォヌマンスやリ゜ヌスの改善で解決したため、盎近数カ月は5XXでのFail(Flaky)はほが0

今のずころ抂ね満足しおいたすが、理想的にはもっずランニングコストを䞋げたいですし、できれば5分未満でE2Eを完了させたいです。たた、パラレルで実行したり、よりよいテストケヌス構成に改善したいずも思っおいたす。このあたりは今埌の課題ずしお、折を芋お改善しおいきたいず思っおいたす。


今回は運甚線ずいうこずでDatadog Synthetic Monitoring Browser Testの利甚法や運甚知芋を共有したした。

珟圚、ミツカリではIT゚ンゞニアを募集しおいたす。ミツカリでは補品開発だけでなく、Developer Experienceにも力を入れおいたす。興味のある方はぜひお気軜にご連絡ください

https://herp.careers/v1/mitsucari