E2E自動テストの長期運用に耐えるための5つの手法 #Seleniumjp

スライド

www.slideshare.net

モバゲーのプラットフォームについて

  • 数千万人の会員がいる
  • 3rdパーティーの開発のためのサービスを提供している

モバゲーのプラットフォームの経緯

  • ブラウザのゲームからスマホゲームに移行している
  • まだまだ沢山のユーザーがモバゲーのプラットフォーム上で遊んでいる
  • 課題として、高いアベイラビリティ後方互換性を少ないメンテナンスコストで行っている

規模感

  • 5年経過
  • 22個のテストスイートが分かれている
    • 機能毎に分かれている。
      • 会員登録とか
  • 700個のテストケース
    • 決済とかログインとかはしかkりテストしている
  • 60000個のAPIのテストケース
  • 開発者はサーバーサイドのリリースはQA無しでリリースできる

運用について

  • テストスイートがどういう経過を辿るか分かってきた
  • QAの一部として作り始める。
  • リグレッションテストとして回り続ける
  • 1年ぐらい経つとテストが壊れ始める
  • 自動テストが完全に壊れるテストスイートが出てくる
  • 出来る限りちゃんと動く期間を長くするようにする

どうすれば長期運用に耐えられるようになるのか

  • とにかくテストを流し続けましょう
  • 1日1回は最低限回すようにしている
    • 定期的に実行しているぐらい安定していないといけない
    • なかなか通らないテストは安定化しましょう
    • 開発環境が変わったなどをいち早く検知するため
      • 壊れた瞬間が一番直しやすい
  • どうしようも無いテストは諦める
  • 既存のリグレッションテストの100%グリーンを拘らない
  • 環境に依存するようなFlakyなテストとか
  • 直す工数が大きいが得られるメリットが小さいものとか

できるだけ早くテストをデバッグしたい

  • 出来る限りテストのデバッグが出来る人を増やす
    • 一番長く使われるテストは、開発のプログラミングテストと同じ言語にすることだった
  • テストのインフラはしっkり確保しよう
    • 1回回すのに1時間かかるものとかは無しで
    • 失敗したテストケースのみ流せるようにする
    • 失敗時のログを出す
  • Selenium Gridが活躍している

Debuggability

  • Zalenium
  • 実行のデバッグが見やすいようになっている

テストの実装とテスト対象システムの実装を疎結合にしたい(これからやりたいこと)

  • WebAPIはメンテしやすい
    • APIサーバーに依存しにくいから
  • Seleniumでテストを書こうとすると、テストコードの中で表現しないといけない
  • 取り組み
    • イトクローラを用いて、本番プロダクションのデータを持ってきて、それを正解データとする
      • 正解データはGithubに入れる
      • 別のブランチでプルリクする
        • GitHubが勝手に差分をしてくれる
    • 自然言語処理を使ってフォームを解析する
      • ICST2017で得たネタを使っている