selenium antipatterns

72
Selenium Antipatterns Miyata Jumpei (@miyajan) Feb. 6, 2016 #seleniumjp

Upload: jumpei-miyata

Post on 16-Apr-2017

31.724 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Selenium Antipatterns

Selenium AntipatternsMiyata Jumpei (@miyajan)

Feb. 6, 2016 #seleniumjp

Page 2: Selenium Antipatterns

自己紹介

• 宮田 淳平 (@miyajan)

• サイボウズ株式会社

• 開発基盤部生産性向上チーム

• 品質保証部テストエンジニアリングチーム

• 最近の趣味:筋トレ

• 3ヶ月で50kg→58kg

Page 3: Selenium Antipatterns

寄稿しました!

Page 4: Selenium Antipatterns

日本語のSelenium本

• Selenium実践入門

• 実践 Selenium WebDriver

• Selenium デザインパターン & ベストプラクティス

Page 5: Selenium Antipatterns

cybozu × Selenium

Page 6: Selenium Antipatterns
Page 7: Selenium Antipatterns

kintoneチームのSeleniumテスト

• 1,000以上のテストケース

• すべてのテストが年間で1,000回以上実行

• 年間数十件単位の不具合を防止

• フレームワークレベルの変更を安心して行える

Page 8: Selenium Antipatterns

一方、社内では導入失敗事例も数多く存在します…

Page 9: Selenium Antipatterns

世の中的にもうまく運用できている話をあまり聞かないような…?

Page 10: Selenium Antipatterns

Seleniumのよくある課題

• 運用してみたけど続かない

• コストの割にはメリットを感じない

• 改善したいけどよくわからない

Page 11: Selenium Antipatterns

よくある落とし穴と対策が もっと広まるとよさそう?

Page 12: Selenium Antipatterns

今回のお話

Page 13: Selenium Antipatterns

アンチパターン

• 最初は有益だと思えるが、最終的に悪い結果をもたらすもの

• リファクタリングするための方法が存在する

Page 14: Selenium Antipatterns

まえがき• 発表者が体験したもの

• 運用寄りの話中心なのでコードとかは出てこない

• 「Seleniumデザインパターン & ベストプラクティス」読もう

• デモなし、文章だらけ

• そこそこの規模で運用しようと思ってる人向け

• テストケースが少ないときはなんとかなってしまう

• 異論は認める

• 時と場合による

• 実際の運用寄りの議論が活発になってほしい

Page 15: Selenium Antipatterns

アンチパターン1 なんでもSelenium

Page 16: Selenium Antipatterns

背景

• 不具合の再発防止をしたい

• 手動で試験したくない

• 常に保証したいなにかがある

Page 17: Selenium Antipatterns

すべてSeleniumで解決!

• 結合テストが一番安心できる

• 自動化すれば後はなにもしなくてよさそう

• ブラウザを経由すればなんでも確認できそう

Page 18: Selenium Antipatterns

なにが問題?

Page 19: Selenium Antipatterns

実際にあった事例

• 開発者が気が向いたときにSeleniumテストを追加

• どのテストが自動化されているかわからない

• 数が増えてメンテコスト増大

• 最終的にメンテナンス不能

Page 20: Selenium Antipatterns

Seleniumテストは大きい

Page 21: Selenium Antipatterns

メンテナンスコストが大きい• 実行時間が長い

• 単体テストは数ms、Seleniumテストは数十秒~数分

• 不安定になりやすい

• ネットワーク

• Selenium Server

• ブラウザ

• テスト対象(アプリ、DB、KVS、etc.)

Page 22: Selenium Antipatterns

粒度が大きい

• 1メソッド、1リクエストで確認できる挙動のためにブラウザまで動かすのはやりすぎ

Page 23: Selenium Antipatterns

どう改善すればいいの?

Page 24: Selenium Antipatterns

例えば、Seleniumを避ける

Page 25: Selenium Antipatterns

適切な選択肢を選ぶ

• 静的解析

• 単体テスト

• APIテスト

• 手動テスト

Page 26: Selenium Antipatterns

適切な選択をするために Seleniumテストの 長所と短所を理解する

Page 27: Selenium Antipatterns

長所

• E2Eレベルでの保証ができる

• 人間ではほぼ不可能な速度とタイミングで実行できる

Page 28: Selenium Antipatterns

短所

• メンテナンスコストが高い(=不安定)

• 柔軟性がない

Page 29: Selenium Antipatterns

まとめると

• 頻繁に確認したい

• E2Eレベルの

• シンプルなテストを

• メンテできる範囲の数で

• Seleniumを活用しよう

• それ以外は別の選択肢を検討しよう

Page 30: Selenium Antipatterns

実際に行った改善

• Seleniumは受入試験の自動化のみに絞る

• 単体テスト、APIテストで可能な限り保証する

• 自動化されてるテストが把握できる

• メンテできる範囲の数になる

Page 31: Selenium Antipatterns

アンチパターン2 手動テストの代わり

Page 32: Selenium Antipatterns

背景

• 既存の開発プロセスにSeleniumテストを取り入れたい

Page 33: Selenium Antipatterns

既存のプロセスにそのまま追加しよう!

• 既存の開発プロセス

実装 手動テスト

• 新しい開発プロセス

実装 手動テストSeleniumテスト

Page 34: Selenium Antipatterns

なにが問題?

Page 35: Selenium Antipatterns

実際にあった事例

• 回帰試験をSeleniumテストで自動化

• 実装がFIXしたら流す

• 実装期間のUI変更でSeleniumテストが通らなくなる

• 乖離が大きすぎるのでいったん放置して手動でテスト

• 最終的にメンテナンス不能

Page 36: Selenium Antipatterns

手動テストの代わりだけだと Seleniumテストのメリットを

最大化できない

Page 37: Selenium Antipatterns

そもそもSeleniumテストで 得られるメリットってなんだろう?

Page 38: Selenium Antipatterns

工数削減?

• 間違いではない

• けど、これだけを目的にすると辛い

• 導入コストやメンテコストを考えると

• 投資対効果が吊り合うまでに時間がかかる

Page 39: Selenium Antipatterns

速度とタイミング

• 繰り返しになるけど

• 人間には不可能な速度とタイミングでテストを実行できる

• より早い段階から繰り返しテストできる

• 問題の発見が早くなると対応コストとリスクが減る

Page 40: Selenium Antipatterns

もう一つ問題がある

Page 41: Selenium Antipatterns

Seleniumテストを放置すると

• ソフトウェア本体との乖離が大きくなる

• するとメンテコストが高くなってさらに放置

• 負のスパイラル

Page 42: Selenium Antipatterns

どう改善すればいいの?

Page 43: Selenium Antipatterns

”組織にテスティングツールを取り入れると、人々の働き方を変えることになるということを肝に銘じておくことが重要である。”

「システムテスト自動化標準ガイド」より引用

Page 44: Selenium Antipatterns

常に繰り返し実行する

• 自動テストのメリットを最大化するために

• 理想的には本体が変更されるたびにテストを実行したい

• 乖離が最小になる

• 厳しいなら一日一回とか、可能な範囲で頻度を上げる

実装 手動テスト

Seleniumテスト

Page 45: Selenium Antipatterns

開発プロセスを変えるのは大変

• 推進役が必要

• 難しい場合は

• まずは単体テストとかからCI/CD文化を広める

• メリットを実感できれば協力者も増える

• 繰り返しになるけどSeleniumテストは大きい

Page 46: Selenium Antipatterns

まとめると

• Seleniumテストを手動テストの置き換えに留めずに

• 常に繰り返し実行される開発プロセスを目指そう

• 推進役を立てよう

• 小さいことからでもメリットを実感しよう

Page 47: Selenium Antipatterns

実際に行った改善• デプロイパイプラインを構築してコードが変更されるたびに

Seleniumテストをすべて実行

• 誰が落としたかすぐ分かる

• 落とした人は即修正を義務化

• 常に製品とテストの乖離がない状態

• 問題の早期発見にもつながり安心感が出てくる

• 意識が高いわけではないです:)

Page 48: Selenium Antipatterns

アンチパターン3 クロスブラウザがんばりすぎ

Page 49: Selenium Antipatterns

背景

• 動作環境のすべてのブラウザで品質保証したい

Page 50: Selenium Antipatterns

Seleniumテストをすべてのブラウザで実行しよう!

• Seleniumはクロスブラウザ対応してる

• すべての動作環境で確認したい

Page 51: Selenium Antipatterns

なにが問題?

Page 52: Selenium Antipatterns

実際にあった事例

• IE8~IE11、Firefox、Chromeで毎日すべてのSeleniumテストを実行

• すべてのテストが通ることはない

• 毎日環境のメンテナンスに時間がとられる

• 最終的にメンテナンス不能

Page 53: Selenium Antipatterns

”デフォルト設定で、他のブラウザよりもたくさんの問題を引き起こすブラウザがあります。 私が言っているのはInternet Explorerのことです。”

「Selenium デザインパターン & ベストプラクティス」より引用

Page 54: Selenium Antipatterns

Seleniumテストをクロスブラウザで運用するのは思ったより大変

Page 55: Selenium Antipatterns

ブラウザ × WebDriver

• ブラウザのバージョンとWebDriverのバージョンがある

• 組み合わせ数が増えるにつれてトラブルを踏む可能性が高くなる

Page 56: Selenium Antipatterns

IE

• 不安定

• クラッシュしてiedriver.exeのプロセスが残ったままになる

• マウスカーソルがブラウザに重なってるとhoverの挙動がおかしくなる

• 保護モードの設定

• 突然のブルースクリーン

Page 57: Selenium Antipatterns

どう改善すればいいの?

Page 58: Selenium Antipatterns

ブラウザを絞る

• ブラウザ依存の重大な不具合が過去にほとんどなければ

• ChromeかFirefoxが比較的安定

Page 59: Selenium Antipatterns

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

Microsoft Edge

• WebDriver対応状況が公開されている

• https://dev.windows.com/en-us/microsoft-edge/platform/status/webdriver/details/

• 正直まだ早い

Page 61: Selenium Antipatterns

ヘッドレスブラウザ

• GUIがないブラウザ

• 速度やリソース消費量でメリットはありそう

• 前にPhantomJSを試したときはファイルアップロードが動かなくて諦めた

• 2.1で改善されてるかも?

• Seleniumでの運用事例をあまり見かけないのが辛い

• と思ったら本日素晴らしい事例が!

• PhantomJSはやっぱり辛そうという結論\(^o^)/

Page 62: Selenium Antipatterns

どうしてもクロスブラウザでSeleniumテスト実行したい

Page 63: Selenium Antipatterns

TaaS Platform

• Sauce Labsとか

• お金で環境メンテコストを解決

• 微妙な挙動の差異とかはさておき

Page 64: Selenium Antipatterns

まとめると

• ブラウザは可能な限り絞る

• 絞れないならTaaS

Page 65: Selenium Antipatterns

実際に行った改善• 過去のブラウザ依存の不具合を集計

• 重要不具合でSeleniumで発見できる種類のものはほぼなかった

• Chromeのみに絞った

• OSもLinuxにしてDockerで管理

• 安定

• メンテも楽

Page 66: Selenium Antipatterns

そのほかアンチパターン• 依存関係のあるテスト

• setup, tearDown

• GUI変更に弱い

• ページオブジェクト

• 実行時間長すぎ

• Selenium Gridで並列化

• 冗長なコード

• Gebとかラッパーライブラリ

Page 67: Selenium Antipatterns
Page 68: Selenium Antipatterns

アンチパターンの兆候

• メリットが感じられていない

• 必要以上に苦労していると感じる

Page 69: Selenium Antipatterns

まとめ

• Seleniumは便利だけど落とし穴もある

• 本格的に運用する前にアンチパターンを知って回避

• もちろんベストプラクティスも重要なので、

Page 70: Selenium Antipatterns

MUST BUY!

Page 71: Selenium Antipatterns

Thanks!

Page 72: Selenium Antipatterns

Questions?