Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ハイパフォーマンスSeleniumテスト@サイボウズ

25,143 views

Published on

第2回日本Seleniumユーザーコミュニティ勉強会(http://seleniumjp.connpass.com/event/9222/)の発表資料です。
サイボウズのエンジニアブログで補足記事を書いています。
http://developer.cybozu.co.jp/tech/?p=7934

Published in: Software
  • Be the first to comment

ハイパフォーマンスSeleniumテスト@サイボウズ

  1. 1. ハイパフォーマンス Seleniumテスト@サイボウズ サイボウズ株式会社 宮田 淳平 2014/10/18
  2. 2. 自己紹介 • サイボウズ株式会社 • 入社6年目 • kintoneというB2Bサービスを開発しています • フロントからバックエンドまでなんでも • 趣味:ランニング
  3. 3. 今回のお話 • Seleniumのパフォーマンスのお話 • ベストプラクティスというよりは試行錯誤の 運用事例 • Selenium WebDriverを実際に運用している人 &これから運用したい人向け
  4. 4. パフォーマンス • 実行時間 • Seleniumテストの実行時間は長くなりがち • 安定性 • Seleniumテストは不安定になりがち • メンテナンス性 • Seleniumテストはメンテナンスに時間をと られがち
  5. 5. kintoneチームの場合
  6. 6. テスト対象 • kintone • 現在プログラマー17人で開発 • サーバーサイド: Java 23万行 • クライアントサイド: JavaScript 33万行 • だいたい1,2ヶ月に1回のペースでアップ デート
  7. 7. Jenkins + Pipeline Plugin • メインブランチにマージされるたびにすべて のテストが実行される
  8. 8. Seleniumテストを流すのに1時間 とかかかると混雑します><
  9. 9. kintoneチームのSeleniumテスト • 800以上のテストケース • 受け入れ試験中心に自動化 • Selenium WebDriver + Selenium Grid • 36並列 • 本番のコピー環境で試験を流す • 全部流すのに30分ほどかかる • 体感的に20分切るとストレスなさそう
  10. 10. 実行時間の話
  11. 11. 実行時間が長くなると・・・? • テスト自動化の利点は素早く繰り返し実行でき ること • 1日かかると1日に1回しか実行できない • もし失敗すると修正後の確認にまた1日・・・ • 開発速度を上げるための自動テストが開発のボ トルネックになってしまう
  12. 12. 実行時間短縮の基本戦略 • 余計なテストを作らない • メインシナリオのテストぐらいが無難 • 単体テスト、APIテストなどでカバーする • 並列化 • Selenium Grid
  13. 13. 並列実行環境の構築 • クラウドサービス • Sauce Labs,TestingBot,BrowserStack • あらゆる環境+録画機能など • 予算があるなら一番おすすめ • 各サービス比較誰か書いてくださいw • VM • VMテンプレートを作って量産 • そこそこリソース必要&なかなかメンテナンス大変 • docker • 高速デプロイ&軽量 • ただし環境は限られる • 次期Windows Serverはdocker対応するらしいので期待
  14. 14. 並列の理想 • (全テストの実行時間の合計) / (並列実行時間) = (並列数) • となっていれば理想 • 実際の並列数より極端に小さい値のとき改善 の余地あり
  15. 15. テストの実行順序 • 並列実行しても最後に長いテストが実行される と並列数を活かしきれない
  16. 16. テストの実行順序 • 長い順に実行できれば理想値に近づく • テストランナーに手を加える必要があるかも
  17. 17. 個々のテストの高速化 • 基本的に並列化に力を入れる方が効果が大きい • 極端に長いテストは改善した方がいい • 実行時間の長いテストは普段から分かるよう にするといい • 共通処理で時間がかかっているところは改善 の価値あり • 初期データの作成、ブラウザの起動、認証処 理など
  18. 18. 初期データの作成 • ブラウザ操作 • 時間がかかる&不安定 • DBのdump • 速い • スキーマ更新時が大変 • API • そこそこ速い • 副作用としてAPIテストに使い回せる • APIが整っているなら一番おすすめ
  19. 19. 安定性の話
  20. 20. 安定しないと・・・? • バグじゃないのにテストが落ちることがある • バグの可能性もあるので原因調査に時間をとら れる • 変に慣れてしまうとテストが落ちても誰も気に しなくなってしまう
  21. 21. 安定性 • リトライ • 不安定なテストが救われる • リトライしたテストは分かるようにして後で 直す • 明示的なWait • findElementなどは不安定に失敗することが あるので条件付きのWaitを使う • Selenium本に書いてあったはず
  22. 22. メンテナンス性の話
  23. 23. メンテナンス性が低いと・・・? • メンテナンスに時間をとられる • 手動の方がいいんじゃないかとテスト自動化に ネガティブな意見が出てくる • メンテ不能になると続行できなくなる
  24. 24. メンテナンス性 • PageObjectパターン • UI変更がありえるなら必須 • 失敗時のスクリーンショット、録画 • 原因調査が楽になる • テストコードの品質は製品と同じくらい大事 • コード規約作ったりレビューしたり • DRY原則とかKISS原則とかYAGNIとか
  25. 25. まとめ • Seleniumテストの運用はパフォーマンスとの戦い • 自動化するテストは重要なものに絞る • 実行時間短縮は並列化してその効果を最大限まで 活かしきるのが一番効果的 • 安定性やメンテナンス性も大事 • 事例少ないのでもっと共有されると嬉しいな
  26. 26. FYI • 関西でも自動テストで活動予定です! • 関西オープンフォーラム2014にブース出し ます! • グランフロント大阪でWebアプリ自動テス ト勉強会を開催予定です! • エンジニアブログでもいろいろ書いてます! • 『失敗からはじめるSelenium』とか
  27. 27. ありがとうございました!

×