Upgrade to Pro — share decks privately, control downloads, hide ads and more …

E2Eテスト駆動開発実践記_-_Web用.pdf

takayuki-hayashi
December 08, 2018
3.3k

 E2Eテスト駆動開発実践記_-_Web用.pdf

システムテスト自動化カンファレンス2018の発表資料です。

takayuki-hayashi

December 08, 2018
Tweet

Transcript

  1. Java + JUnit + Selenium 2009年〜 Scala + Specs2 +

    Selenium 2012年〜 Scala + Specs2 + Selenium + Docker 2013年〜 Kotlin + Gauge + Selenide + Docker + kubernetes 2017年〜 個人的10年間の変遷
  2. 教訓・感想 • リリースが終わったらチームは解散し、その後は保守・運用チームがメンテナンス。ただ、その 後E2Eはメンテも実行もされなくなったらしい・・・。「文化」って大事。 • その一方であれだけの実行時間が掛かってしまっていたり、不安定なテストケースも少なくな かったテストをいきなりメンテしろとか言われても難しい。 • なのでテスト実行に対する心理的障壁(実行時間、安定性)の大事さを改めて実感しました。 •

    テストケースが不安定になってしまう大きな要因として「テストの独立性」が担保できていなかっ た。DBのデータの「独立性」が高くなかったため、タイミングによって落ちたり落ちなかったりと いう問題が出てしまっていた。 • JUnitオンリーで書いていたので仕様の表現力を上げるのが難しかった。 Java + JUnit + Seleniumの時代 (2009年〜)
  3. 概要 • 現在所属しているユーザベースでの SPEEDAというサービスにおける1プロ ジェクト • 再現性を求めてDockerを使いはじめる ◦ DB、APサーバー、ElasticSearch等 •

    既存の機能にはE2Eは存在しなかったため、そこに対する E2Eの追加をオフ ショアに出す Scala + Specs2 + Selenium + Dockerの時代 (2013年〜)
  4. 教訓・感想 • Dockerによって再現性が格段にアップ • 画面側はほとんどが参照系なので「テストの独立性」を担保する上でのデー タ作成はそんなに難しくなかった。 • こちら側の準備不足もあり、オフショアに出した結果は「動かない」 or 「通らな

    い」テストが大量に納品されて大変でした・・・。既存機能の E2Eをオフショアに 出して失敗した事で、E2Eの難しさ、最初にE2Eを書くことの重要性などを再 認識 Scala + Specs2 + Selenium + Dockerの時代 (2013年〜)
  5. 概要 • 現在所属しているユーザベースでの SPEEDAというサービスにおける1プロ ジェクト • Microservices / Micro frontendsの部分で適用

    • Gaugeを導入する事で「テストとして実行可能な仕様書」を実現が可能に • kubernetesの導入により開発から運用まで全ての環境を揃える事が可能に Kotlin + Gauge + Selenide + Docker + k8s の時代(2017年〜)
  6. 教訓・感想 • 「テストとして実行可能な仕様書」という意味で Gaugeはとても良い • フルk8s化した事で開発から本番までの環境の差がなくなったのでテストが 落ちた時の問題解決までの時間が大幅に短縮 • k8sのおかげでMicroservices /

    Micro frontendsの部分もきちんとテストが 出来ている • SelenideでSelniumの煩雑さが簡略化された(特にWaitが必要な部分) Kotlin + Gauge + Selenide + Docker + k8s の時代(2017年〜)
  7. Microservices Kotlin + Gauge + Selenide + Docker + k8s

    の時代(2017年〜) 〜教訓・感想とか〜
  8. Kotlin + Gauge + Selenide + Docker + k8s の時代(2017年〜) 〜教訓・感想とか〜

    Service A Service B Service C BFF Front End サービス毎にE2E作成 他サービスとの連携部分はMock化 サービス単体のE2Eは GETであればJSONを アサーション、POSTの 場合はDB、KVSのア サーション Front EndのE2Eがシステムとして の振る舞い(仕様) ユーザーが直接操作する Front Endの E2Eで関連する全てのサービスを連携さ せる サービス毎にE2E作成 他サービスとの連携部分はMock化