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