Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

急拡大する開発組織を支えるナレッジワークの E2E テスト基盤

急拡大する開発組織を支えるナレッジワークの E2E テスト基盤

torii / 株式会社ナレッジワーク(https://x.com/jinjor

2024/9/20開催「Frontendのテスト全部知る 〜Unit TestからE2Eまで〜 - Encraft #18」での登壇資料です。
https://knowledgework.connpass.com/event/327800/

More Decks by KNOWLEDGE WORK / 株式会社ナレッジワーク

Other Decks in Technology

Transcript

  1. © Knowledge Work Inc. 登壇者について 2 2 鳥居陽介 @jinjor フロントエンドエンジニア

    2023年7月入社 著書:基礎からわかる Elm ※本日 Elm の話はありません
  2. © Knowledge Work Inc. 本セッションについて 3 3 ゴール • E2E

    テストの事例の中で参考にできる部分を持ち帰ってもらう • ナレッジワークの開発に興味を持ってもらう(採用につなげたい) 話すこと • ナレッジワークの E2E テストに対する取り組み • その中で直面した課題と解決方法 話さないこと • E2E テストのテクニック
  3. © Knowledge Work Inc. 開発組織 9 9 󰳕󰳕 Frontend 󰳕󰳕󰳕

    Backend 🕵 QA 󰳒 Design 󰳖 PdM Product 1 󰳕󰳕 󰳕󰳕󰳕 🕵 󰳒 󰳖 Product 2 󰳕 󰳕󰳕 🕵 󰳒 󰳖 Product 3 Middleware Platform ・・・
  4. © Knowledge Work Inc. 開発組織 10 10 󰳕󰳕 Frontend 󰳕󰳕󰳕

    Backend 🕵 QA 󰳒 Design 󰳖 PdM Product 1 󰳕󰳕 󰳕󰳕󰳕 🕵 󰳒 󰳖 Product 2 󰳕 󰳕󰳕 🕵 󰳒 󰳖 Product 3 Middleware Platform ・・・ 急激に大規模化・複雑化するプロダクト! そんな中どんどん増える開発者! E2E テストが通っているとちょっと安心できる 😊
  5. © Knowledge Work Inc. ナレッジワークの E2E テスト事情 • Playwright を使用

    • 毎朝 CI で開発環境に対してテストを実行 + Slack 通知 • Pull Request にコメントすることでマージ前にも実行可能 • 開発環境だけでなく手元で開発中のビルドに対しても実行可能 12 12
  6. © Knowledge Work Inc. E2E テスト用のテナント 13 13 feature flag

    が OFF のテナント feature flag が ON のテナント https://e2e-test.dev.xxxxxxxx https://e2e-test-flag-on.dev.xxxxxxxx マルチテナントのサービスであることを利用して E2E テスト用に作成したテナントでテスト実行
  7. © Knowledge Work Inc. QA エンジニアとの共同作業 • QA エンジニアがテストケースの管理と健康状態の監視を担当 •

    主に Frontend エンジニアと QA エンジニアがテストを実装 ◦ QA エンジニアの実装への参加は任意 ◦ ペアプロなどを通じてスキル継承 14 14
  8. © Knowledge Work Inc. E2E テストの役割 • 基本的な機能のデグレードがないことを常に保証する • モジュール単位のテストでは不安なシステム全体のテストをする

    • QA 確認作業の自動化による時短 • 自動チェックによる高頻度なデプロイ 16 16 手動 確認 2週間 🚀 手動 確認 1日 🚀 手動確認があるとデプロイ頻度を上げられない タスケテ
  9. © Knowledge Work Inc. 19 19 󰳕󰳕 Frontend 󰳕󰳕󰳕 Backend

    🕵 QA 󰳒 Design 󰳖 PdM Product 1 󰳕󰳕 󰳕󰳕󰳕 🕵 󰳒 󰳖 Product 2 󰳕 󰳕󰳕 🕵 󰳒 󰳖 Product 3 複数人で同時にテストしたい テストを書く人:たくさん テスト用テナント:2つ 課題:同じテナントで同時にテストを実行すると落ちる
  10. © Knowledge Work Inc. 20 20 󰳕󰳕 Frontend 󰳕󰳕󰳕 Backend

    🕵 QA 󰳒 Design 󰳖 PdM Product 1 󰳕󰳕 󰳕󰳕󰳕 🕵 󰳒 󰳖 Product 2 󰳕 󰳕󰳕 🕵 󰳒 󰳖 Product 3 複数人で同時にテストしたい テストを書く人:たくさん テスト用テナント:2つ 課題:同じテナントで同時にテストを実行すると落ちる 誰か今 E2E テスト流してますか? すみません、実行中でした!
  11. © Knowledge Work Inc. 21 21 複数人で同時にテストしたい 解決策:テナントプール( WIP) 󰠁

    󰳕 実行中 空きテナントを 自動選択 • 排他制御によって、空いているテナントを自動選択する • テスト対象によって、実行可能なテナントを自動選択する
  12. © Knowledge Work Inc. 22 22 複数人で同時にテストしたい 解決策:テナントプール( WIP) 󰠁

    󰳕 実行中 空きテナントを 自動選択 • 排他制御によって、空いているテナントを自動選択する • テスト対象によって、実行可能なテナントを自動選択する プロダクト A のテスト プロダクト A 用の 手動セットアップが 完了しているテナント
  13. © Knowledge Work Inc. 本番環境でテストしたい 24 24 背景:Vercel から Cloud

    Run への移行 複数プロダクトが独立してデプロイできるようにモノリスを分割(通称 : シンデプロイ)
  14. © Knowledge Work Inc. 本番環境でテストしたい 26 26 解決策:Testing Gateway •

    IAM 認証により実行者を社内の限 られた principal に制限 • 実行対象をテスト用のテナントに制 限 • 本番環境は internal アクセスのみ 許可 テスト実行専用のゲートウェイ
  15. © Knowledge Work Inc. 本番環境でテストしたい 27 27 解決策:Testing Gateway •

    IAM 認証により実行者を社内の限 られた principal に制限 • 実行対象をテスト用のテナントに制 限 • 本番環境は internal アクセスのみ 許可 Platform グループの スーパーエンジニア shogo が 提案・設計・実装してくれました! テスト実行専用のゲートウェイ \イヌゥゥ/
  16. © Knowledge Work Inc. 28 28 認証以外にもテストに必要な機能を搭載、 テナント管理がシンプルに! 今までテナント管理機能はセキュリティ懸念のため 自動化できなかったが、Testing

    Gateway 越しに API を叩くことで自動化可能になった → ユーザーとしてテナントにログインしなくても 色々出来るようになった 本番環境でテストしたい
  17. © Knowledge Work Inc. 何も分からない...何も... 本番環境でテストしたい 29 29 課題:テナントのセットアップ方法が分からない •

    本番環境にはテスト用テナントがないため新規作成する必要があった • が、どうすればテスト可能な状態を作れるのか誰も知らなかった 初期データが足りないっぽい... 外部サービスとの連携に失敗する ... 全然テスト通らない... ユーザーがいない... 開発環境のデータに依存している ...
  18. © Knowledge Work Inc. 本番環境でテストしたい 30 30 解決策:みんなで地道に調査して手順をドキュメント化 事前に外部サービス連携 しておく必要がありそう

    わ い わ い
 この名前のリソースを 作っておかないと落ちます データに依存しないように テスト書き直そ? 各プロダクトのテスト担当 いぬ〜〜〜

  19. © Knowledge Work Inc. 33 33 まだまだやること盛りだくさん ...! Testing Gateway

    テナント プール デプロイ フローへの 組み込み テナント 作成手順 の文書化 プロダクト 毎の テスト管理 テナント 作成の 自動化 手動テスト の自動化 メール認証 OAuth SCIM
  20. © Knowledge Work Inc. まとめ 35 35 Before • フロントエンドエンジニアができる範囲の改善を片手間にやっていた

    • イケてない部分に目を瞑り、騙し騙しなんとかしていた After • 品質・開発効率を左右する重要プロジェクトとして E2E テストを位置付けた • 部署の垣根を超えてみんなを巻き込んで改善していく動きが増えた • テスト基盤の構築により、根本的な改善やプロセスの最適化ができるようになった