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

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