SlideShare a Scribd company logo
Selenium Antipatterns
Miyata Jumpei (@miyajan)
Feb. 6, 2016 #seleniumjp
自己紹介
• 宮田 淳平 (@miyajan)
• サイボウズ株式会社
• 開発基盤部生産性向上チーム
• 品質保証部テストエンジニアリングチーム
• 最近の趣味:筋トレ
• 3ヶ月で50kg→58kg
寄稿しました!
日本語のSelenium本
• Selenium実践入門
• 実践 Selenium WebDriver
• Selenium デザインパターン & ベストプラク
ティス
cybozu × Selenium
Selenium Antipatterns
kintoneチームのSeleniumテスト
• 1,000以上のテストケース
• すべてのテストが年間で1,000回以上実行
• 年間数十件単位の不具合を防止
• フレームワークレベルの変更を安心して行える
一方、社内では導入失敗事例
も数多く存在します…
世の中的にもうまく運用できてい
る話をあまり聞かないような…?
Seleniumのよくある課題
• 運用してみたけど続かない
• コストの割にはメリットを感じない
• 改善したいけどよくわからない
よくある落とし穴と対策が
もっと広まるとよさそう?
今回のお話
アンチパターン
• 最初は有益だと思えるが、最終的に悪い結果
をもたらすもの
• リファクタリングするための方法が存在する
まえがき
• 発表者が体験したもの
• 運用寄りの話中心なのでコードとかは出てこない
• 「Seleniumデザインパターン & ベストプラクティス」読もう
• デモなし、文章だらけ
• そこそこの規模で運用しようと思ってる人向け
• テストケースが少ないときはなんとかなってしまう
• 異論は認める
• 時と場合による
• 実際の運用寄りの議論が活発になってほしい
アンチパターン1
なんでもSelenium
背景
• 不具合の再発防止をしたい
• 手動で試験したくない
• 常に保証したいなにかがある
すべてSeleniumで解決!
• 結合テストが一番安心できる
• 自動化すれば後はなにもしなくてよさそう
• ブラウザを経由すればなんでも確認できそう
なにが問題?
実際にあった事例
• 開発者が気が向いたときにSeleniumテストを
追加
• どのテストが自動化されているかわからない
• 数が増えてメンテコスト増大
• 最終的にメンテナンス不能
Seleniumテストは大きい
メンテナンスコストが大きい
• 実行時間が長い
• 単体テストは数ms、Seleniumテストは数十秒∼数分
• 不安定になりやすい
• ネットワーク
• Selenium Server
• ブラウザ
• テスト対象(アプリ、DB、KVS、etc.)
粒度が大きい
• 1メソッド、1リクエストで確認できる挙動の
ためにブラウザまで動かすのはやりすぎ
どう改善すればいいの?
例えば、Seleniumを避ける
適切な選択肢を選ぶ
• 静的解析
• 単体テスト
• APIテスト
• 手動テスト
適切な選択をするために
Seleniumテストの
長所と短所を理解する
長所
• E2Eレベルでの保証ができる
• 人間ではほぼ不可能な速度とタイミングで実
行できる
短所
• メンテナンスコストが高い(=不安定)
• 柔軟性がない
まとめると
• 頻繁に確認したい
• E2Eレベルの
• シンプルなテストを
• メンテできる範囲の数で
• Seleniumを活用しよう
• それ以外は別の選択肢を検討しよう
実際に行った改善
• Seleniumは受入試験の自動化のみに絞る
• 単体テスト、APIテストで可能な限り保証する
• 自動化されてるテストが把握できる
• メンテできる範囲の数になる
アンチパターン2
手動テストの代わり
背景
• 既存の開発プロセスにSeleniumテストを取り
入れたい
既存のプロセスにそのまま追加しよう!
• 既存の開発プロセス
実装 手動テスト
• 新しい開発プロセス
実装 手動テストSeleniumテスト
なにが問題?
実際にあった事例
• 回帰試験をSeleniumテストで自動化
• 実装がFIXしたら流す
• 実装期間のUI変更でSeleniumテストが通らなくなる
• 乖離が大きすぎるのでいったん放置して手動でテスト
• 最終的にメンテナンス不能
手動テストの代わりだけだと
Seleniumテストのメリットを
最大化できない
そもそもSeleniumテストで
得られるメリットってなんだろう?
工数削減?
• 間違いではない
• けど、これだけを目的にすると辛い
• 導入コストやメンテコストを考えると
• 投資対効果が吊り合うまでに時間がかかる
速度とタイミング
• 繰り返しになるけど
• 人間には不可能な速度とタイミングでテストを
実行できる
• より早い段階から繰り返しテストできる
• 問題の発見が早くなると対応コストとリスクが
減る
もう一つ問題がある
Seleniumテストを放置すると
• ソフトウェア本体との乖離が大きくなる
• するとメンテコストが高くなってさらに放置
• 負のスパイラル
どう改善すればいいの?
”組織にテスティングツールを取り入れると、
人々の働き方を変えることになるということ
を肝に銘じておくことが重要である。”
「システムテスト自動化標準ガイド」より引用
常に繰り返し実行する
• 自動テストのメリットを最大化するために
• 理想的には本体が変更されるたびにテストを実行したい
• 乖離が最小になる
• 厳しいなら一日一回とか、可能な範囲で頻度を上げる
実装 手動テスト
Seleniumテスト
開発プロセスを変えるのは大変
• 推進役が必要
• 難しい場合は
• まずは単体テストとかからCI/CD文化を広める
• メリットを実感できれば協力者も増える
• 繰り返しになるけどSeleniumテストは大きい
まとめると
• Seleniumテストを手動テストの置き換えに留めずに
• 常に繰り返し実行される開発プロセスを目指そう
• 推進役を立てよう
• 小さいことからでもメリットを実感しよう
実際に行った改善
• デプロイパイプラインを構築してコードが変更されるたびに
Seleniumテストをすべて実行
• 誰が落としたかすぐ分かる
• 落とした人は即修正を義務化
• 常に製品とテストの乖離がない状態
• 問題の早期発見にもつながり安心感が出てくる
• 意識が高いわけではないです:)
アンチパターン3
クロスブラウザがんばりすぎ
背景
• 動作環境のすべてのブラウザで品質保証したい
Seleniumテストをすべてのブラウザで
実行しよう!
• Seleniumはクロスブラウザ対応してる
• すべての動作環境で確認したい
なにが問題?
実際にあった事例
• IE8∼IE11、Firefox、Chromeで毎日すべての
Seleniumテストを実行
• すべてのテストが通ることはない
• 毎日環境のメンテナンスに時間がとられる
• 最終的にメンテナンス不能
”デフォルト設定で、他のブラウザよりもたくさんの
問題を引き起こすブラウザがあります。
私が言っているのはInternet Explorerのことです。”
「Selenium デザインパターン & ベストプラクティス」より引用
Seleniumテストをクロスブラウザ
で運用するのは思ったより大変
ブラウザ × WebDriver
• ブラウザのバージョンとWebDriverのバー
ジョンがある
• 組み合わせ数が増えるにつれてトラブルを踏
む可能性が高くなる
IE
• 不安定
• クラッシュしてiedriver.exeのプロセスが残ったままになる
• マウスカーソルがブラウザに重なってるとhoverの挙動がお
かしくなる
• 保護モードの設定
• 突然のブルースクリーン
どう改善すればいいの?
ブラウザを絞る
• ブラウザ依存の重大な不具合が過去にほとん
どなければ
• ChromeかFirefoxが比較的安定
IEサポート
IE8 IE9 IE10 IE11
Windows
Vista
2016/01/13 2017/04/11 None None
Windows 7 2016/01/13 2016/01/13 2016/01/13 2020/01/14
Windows 8.1 None None None 2023/01/10
Windows 10 None None None 2025/10/14
Microsoft Edge
• WebDriver対応状況が公開されている
• https://dev.windows.com/en-us/microsoft-edge/
platform/status/webdriver/details/
• 正直まだ早い
ヘッドレスブラウザ
• GUIがないブラウザ
• 速度やリソース消費量でメリットはありそう
• 前にPhantomJSを試したときはファイルアップロードが動かなくて諦めた
• 2.1で改善されてるかも?
• Seleniumでの運用事例をあまり見かけないのが辛い
• と思ったら本日素晴らしい事例が!
• PhantomJSはやっぱり辛そうという結論\(^o^)/
どうしてもクロスブラウザで
Seleniumテスト実行したい
TaaS Platform
• Sauce Labsとか
• お金で環境メンテコストを解決
• 微妙な挙動の差異とかはさておき
まとめると
• ブラウザは可能な限り絞る
• 絞れないならTaaS
実際に行った改善
• 過去のブラウザ依存の不具合を集計
• 重要不具合でSeleniumで発見できる種類のものはほぼなかった
• Chromeのみに絞った
• OSもLinuxにしてDockerで管理
• 安定
• メンテも楽
そのほかアンチパターン
• 依存関係のあるテスト
• setup, tearDown
• GUI変更に弱い
• ページオブジェクト
• 実行時間長すぎ
• Selenium Gridで並列化
• 冗長なコード
• Gebとかラッパーライブラリ
Selenium Antipatterns
アンチパターンの兆候
• メリットが感じられていない
• 必要以上に苦労していると感じる
まとめ
• Seleniumは便利だけど落とし穴もある
• 本格的に運用する前にアンチパターンを知って回避
• もちろんベストプラクティスも重要なので、
MUST BUY!
Thanks!
Questions?

More Related Content

PDF
「Selenium実践入門」で学ぶテスト自動化の世界
PDF
Azureを使って手軽にブラウザテストの自動化をはじめよう
PDF
第3回日本seleniumユーザーコミュニティ勉強会
PDF
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
PPTX
ノンプログラマのためのSelenium de DDTはじめの一歩
PDF
JavaScript Unit Test Why? What? How?
PDF
JenkinsとSeleniumの活用事例
PDF
ハイパフォーマンスSeleniumテスト@サイボウズ
「Selenium実践入門」で学ぶテスト自動化の世界
Azureを使って手軽にブラウザテストの自動化をはじめよう
第3回日本seleniumユーザーコミュニティ勉強会
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
ノンプログラマのためのSelenium de DDTはじめの一歩
JavaScript Unit Test Why? What? How?
JenkinsとSeleniumの活用事例
ハイパフォーマンスSeleniumテスト@サイボウズ

What's hot (20)

PDF
20161218 selenium study4
PDF
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
PPTX
kintoneチームを支えるSeleniumテスト
PDF
20161212 selenium adventcalender
PDF
海外のSeleniumカンファレンスではどんな発表がされているのか2014
PDF
OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
PDF
【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
PPTX
Selenium WebDriver + python で E2Eテスト自動化
PDF
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
PDF
エンタープライズ開発でのSelenium活用事例
PDF
20121019 jenkins勉強会lt資料
PPTX
テスト自動化の現場で困ること SI-Toolkitが解決すること
PDF
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
PDF
テスト自動化の様々な道具を使ってみた四方山話
PDF
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
PDF
Selenium boot campの紹介
PDF
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
PPTX
サイボウズLiveの開発を支えるSeleniumテスト
PPTX
手動テストからの移行大作戦
PDF
Awsで実現するseleniumテスト高速術
20161218 selenium study4
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
kintoneチームを支えるSeleniumテスト
20161212 selenium adventcalender
海外のSeleniumカンファレンスではどんな発表がされているのか2014
OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
Selenium WebDriver + python で E2Eテスト自動化
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
エンタープライズ開発でのSelenium活用事例
20121019 jenkins勉強会lt資料
テスト自動化の現場で困ること SI-Toolkitが解決すること
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
テスト自動化の様々な道具を使ってみた四方山話
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
Selenium boot campの紹介
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
サイボウズLiveの開発を支えるSeleniumテスト
手動テストからの移行大作戦
Awsで実現するseleniumテスト高速術
Ad

Similar to Selenium Antipatterns (20)

PPTX
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
PDF
20170710 hifive-test-meetup
PDF
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
PDF
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
PPTX
今さらアジャイル巡業In福岡LT「社内勉強会の運営をアジャイルにやってみた」
PPTX
5年しかもたない最高のシステムとの向き合い方
PDF
GCSアジャイル開発を使ったゲームの作り方
PPTX
第9回Jenkins勉強会 超簡単Pipeline講座
PDF
Springを何となく使ってる人が抑えるべきポイント
PDF
テストエンジニアの品格 #automatornight
PDF
地図を捨ててコンパスを頼りに進め
PDF
地図を捨ててコンパスを頼りに進め
PDF
アジャイルとスクラムとは 原則、価値、プラクティス
PDF
開発とテストが一体となったソフトウェア開発
PPTX
TDDはじめる前に
PPTX
【SQiP2016】楽天のアジャイル開発とメトリクス事例
PPT
ビジネス的に高価値なアジャイルテスト
KEY
テストコードのリファクタリング
PDF
Eric Ries at Startup Lessons Learned sllconf 2011 - Japanese Translation
PDF
はじめてのスクラム体験ワークショップ 〜 アジャイル時代のテスターを目指して
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20170710 hifive-test-meetup
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
今さらアジャイル巡業In福岡LT「社内勉強会の運営をアジャイルにやってみた」
5年しかもたない最高のシステムとの向き合い方
GCSアジャイル開発を使ったゲームの作り方
第9回Jenkins勉強会 超簡単Pipeline講座
Springを何となく使ってる人が抑えるべきポイント
テストエンジニアの品格 #automatornight
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
アジャイルとスクラムとは 原則、価値、プラクティス
開発とテストが一体となったソフトウェア開発
TDDはじめる前に
【SQiP2016】楽天のアジャイル開発とメトリクス事例
ビジネス的に高価値なアジャイルテスト
テストコードのリファクタリング
Eric Ries at Startup Lessons Learned sllconf 2011 - Japanese Translation
はじめてのスクラム体験ワークショップ 〜 アジャイル時代のテスターを目指して
Ad

More from Jumpei Miyata (17)

PDF
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
PDF
オートスケールする GitHub Actions セルフホストランナーを構築してる話
PDF
GitHub Actions のはじめかた
PDF
サイボウズの開発を支える GitHub × CircleCI
PDF
サイボウズを支えるCircleCI
PDF
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
PDF
組織横断でエンジニアを支援する生産性向上チームの役割
PDF
【PR】エンジニアがkintoneを試すべき3つの理由
PDF
Jenkinsfileのlintで救える命がある
PDF
すべてを自動化せよ! 〜生産性向上チームの挑戦〜
PDF
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
PDF
受入試験を自動化したらDevとQAのフィードバックループがまわりはじめた話
PDF
Effective Automation 〜変化に強い開発基盤〜
PDF
開発者を支える生産性向上チームの取り組み -CI, Browser Test, Tools and Infrastructure-
PDF
テストエンジニアと組織構造 @Cybozu
PDF
Jenkins 再入門
PPTX
Selenium Conference 2015 参加報告
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
オートスケールする GitHub Actions セルフホストランナーを構築してる話
GitHub Actions のはじめかた
サイボウズの開発を支える GitHub × CircleCI
サイボウズを支えるCircleCI
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
組織横断でエンジニアを支援する生産性向上チームの役割
【PR】エンジニアがkintoneを試すべき3つの理由
Jenkinsfileのlintで救える命がある
すべてを自動化せよ! 〜生産性向上チームの挑戦〜
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
受入試験を自動化したらDevとQAのフィードバックループがまわりはじめた話
Effective Automation 〜変化に強い開発基盤〜
開発者を支える生産性向上チームの取り組み -CI, Browser Test, Tools and Infrastructure-
テストエンジニアと組織構造 @Cybozu
Jenkins 再入門
Selenium Conference 2015 参加報告

Selenium Antipatterns