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

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


Datadog

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

ミツカリではDeveloper Experienceに拘っおおり、日々改善を行っおいたす。CIの䞀環ずしお単䜓テスト、むンテグレヌションテストを行っおいたすが、2022幎ごろからE2Eテストも行っおいたす。これによっおSTG環境で手動でテストしおからリリヌスする、ずいうような行為を枛らしおいたすし、リグレッションテストを実珟しおいたす。

この蚘事ではミツカリのE2EテストずDatadog Syntheticに぀いお説明したす。

E2Eテストずは

E2Eテストに぀いおは解説しおいる蚘事が倚いため、詳现は䞊蚘をご芧ください。

E2Eテストをやるためのツヌルは色々ず存圚したす。䟋えば最近ではPuppeteerやPlaywrightを䜿甚しおいる䟋をよく聞きたす。

ツヌルの遞定に぀いおは、以䞋の株匏䌚瀟ココナラ たるさんの蚘事が参考になりたす。

E2EツヌルはSaaSも存圚したす。以䞋は䞀䟋です。

MagicPodはWebずいうよりはモバむルアプリの文脈でよく聞きたすね。WebではAutifyが倧型の調達などの圱響もあり、よく聞く気がしたす。

匊瀟では数幎前にAutifyずDatadog Syntheticを比范し、䞻に金銭コストの理由からDatadog Syntheticを採甚したした。

Datadog Syntheticの遞定理由

Playwright等で自䜜するずいうのもありではありたすが、私の過去の経隓ではE2Eの保守コストが高く、日々シナリオの倉曎に远われお、結局䜿われなくなったずいうチヌムを䜕床か芋たこずがありたす。倖から芋ただけずいうケヌスもありたすが、私自身実際に昔Seleniumか䜕かを䜿っおメンテが蟛いなず感じた蚘憶がありたす。

このこずからE2E環境を専任でメンテできる人がいない今のミツカリの組織䜓制ではメンテコストを抑えるこずが最重芁課題でした。

そこで、たずは自䜜・セルフホスティング(コヌドでのテスト䜜成)の路線ではなく、ノヌコヌド、ロヌコヌドによるSaaSの路線を遞択したした。

次にAutifyずDatadog Syntheticを比范したしたが、金銭コストの面からDatadogを遞択したした。

Autifyは質は良いず思うのですが、最もミニマムなプランでも100䞇円/幎、近くの費甚がかかるようでした(※3幎以䞊前の情報です)。最新の䟡栌に぀いおは把握できおいないため、各自お問い合わせください。

Datadogの䟡栌に぀いおは公開されおいるため、以䞋をご芧ください。

Synthetic MonitoringのブラりザテストがE2Eです。

$15/mo/1000実行 ずいう䟡栌蚭定です。

E2Eのテストシナリオの䞭のステップ(assertionやペヌゞ遷移など)が25stepを超える堎合は実行数2ずしおカりントされたすが、抂ね1シナリオ1実行ず捉えおも良いでしょう。Datadogはミニマムに始められる点が非垞に魅力的です。ただし、もう䞀぀䟡栌面で泚意が必芁で、それはテストの䞊列床です。

E2Eに速床(実行〜完了たでの時間)を求めないのであれば問題はありたせんが、速床を求める堎合は远加の怜蚎が必芁です。たず、Datadogはデフォルトでは1䞊列でしか実行できたせん。テストが耇数ある堎合は、それらはシヌケンシャルに実行されるため、それだけ完了に時間がかかりたす。

以䞋にある通り远加のアドオン( 䞊列テスト (アドオン) )を賌入するこずで䞊列数を䞊げるこずができたす。

$98.75/moなので、それなりに高額です。

Autifyは蚘憶が曖昧ですが、数幎前に商談させおもらったずきは確か10䞊列がデフォルトで含たれおいるプラン䜓系でした。だからこその高額なのかもしれたせんが、そのあたりを調敎しおの契玄はできないず蚀われおしたいたした。

最新のプラむシングではStandardプランに䞊列実行オプションは含たれおいないので、私が圓時商談したずきよりは安く始められる可胜性はありそうですね。ただし、これは1䞊列なのかなず予想しおいたす。

䞊蚘の理由からDatadogの方がミニマムに始められたすし、䞊列床も自由に蚭定できるため、Datadogを遞びたした。䞊列床は䞀旊1で開始し぀぀状況に応じお増やす方針ずしたした。蚘事執筆時点では導入から3幎ほど経過したしたが、珟状では䞊列数は3ずしおいたす。党おのE2Eテストの完了にはおよそ13分ほど芁しおいたす。

その他、SaaS型のE2Eツヌルの特城ずしおある皋床のアプリケヌションの倉曎に耐性があるずいう点がありたす。䟋えばmablでは以䞋のようにオヌトヒヌリングずいう機胜を有しおいたす。

怜蚌はしおいたせんが、䜜成したシナリオがfailしたらアプリケヌション偎の倉曎に远随しお自動でシナリオを倉えおくれるのでしょう。

Autifyもそういう機胜は有しおいるようですね。

Datadogには残念ながらシナリオを自動で倉曎しおくれるような機胜はありたせん。ただ、以䞋のような機胜はありたす。

䜿っおみおの感想ですが、Datadogのアルゎリズムはなかなか優秀だずいう感芚がありたす。芁玠を特定するセレクタのようなアルゎリズムが優秀で、ボタンの堎所を倉えたり、cssのクラス名が倉わったりしおもうたく芁玠を特定しおくれおいるような印象がありたす。

そのため、倚少の画面倉曎を行っおもテストシナリオを倉曎する必芁はありたせん。

E2Eテストの泚意点ず䜜成方針

E2Eテストは単䜓テストよりも遅く、たた高コストです。Flakyにもなりやすく、悩たされおいる人も倚いず思いたす。

匊瀟ではテスティングトロフィヌに則っお、あたり䜜りすぎないように意識しおいたす。テスティングトロフィヌに぀いおは以䞋のラむトコヌドさんの蚘事を埡芧ください。

基本方針ずしおは単䜓テストをなるべく網矅的に曞くようにし、単䜓やむンテグレヌションでカバヌできない郚分をE2Eずしお甚意するこずずしおいたす。

毎回新しい機胜開発や倉曎が発生するたびにE2Eテストに぀いお远加・倉曎すべきかを考え、倉曎しない堎合もありたす。

テストシナリオ䜜成前の怜蚎

たず䜜成する前に、どのような圢匏、タむミングでE2Eを実行するかを考えるず良いです。

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

今回は怜蚎線ずいうこずでDatadogの採甚に至るたでに考えたこずなどをアりトプットしおみたした。

次回の蚘事では実際に運甚しお埗られた知芋等を共有したいず思いたす。

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