レポート

進化するSeleniumとテスト自動化 ―「第3回日本Seleniumユーザーコミュニティ勉強会」レポート

この記事を読むのに必要な時間:およそ 10 分

エビデンス取るのも自動化したい!(桑原雄一氏)

Webアプリのエビデンスとして代表的なものにスクリーンショットがあります。Seleniumの機能を使っても取得できますが,取得したい個所にコードを書く必要があり,ソースの可読性が落ちる ―― 桑原雄一氏のセッションでは,そんなSeleniumerの悩みを解消するオープンソースのツールSI-Toolkitが紹介されました。

桑原雄一氏

桑原雄一氏

エビデンスを手動で取るのが嫌だと感じる理由

エビデンスを手動で取ることをエンジニアが嫌がる理由として,以下が挙げられます。

  • スキルが身につかない
  • テストを疑われている感じがする
  • その時間で打鍵したほうが品質が上がるんじゃないか

今回はそんなエンジニアを助けるためのツールをご紹介します。

SI-Toolkitで自動取得できるエビデンス

SI-Toolkitを使うと,以下ののエビデンスが自動取得できます。

  • 操作ログ
  • 操作要素の位置とサイズ
  • スクリーンショット

これらのエビデンスをSI-Toolkitがどのように取得しているかをご説明します。

動作の仕組み

まず,スクリーンショットにエビデンスとして見せるために必要な情報を紐付けてあげます。それから,プログラムで画面操作しているときにスクリーンショットに紐付けたい情報をまとめておきます。あとはスクリーンショットに枠線などを書き出してあげます。こういう処理をすることで,エビデンスが見やすい状態になっています。

最後に

SI-Toolkitに関しまして勉強会を開いたりもしていますので,興味のある方はふるってご参加ください。

Q&A

Q:スクリーンショットを取得する機能は複数のブラウザで対応していますか
A:対応しています。
Q:Appiumを経由すればモバイルでも対応できますか
A:Appiumにも対応していますので,モバイルのネイティブアプリもハイブリッドアプリもエビデンスが取れます。

Seleniumアンチパターン(宮田淳平氏)

Seleniumを使って自動化すれば万事解決 ー⁠ー そんなよくある考え方に待ったをかけるのが,⁠Selenium実践入門』著者のひとりである宮田淳平氏。Selenium導入後に問題が起こる事例について,豊富な経験から語っていただきました。

宮田淳平氏

宮田淳平氏

Seleniumのよくある課題

Seleniumの導入失敗事例の主なものとして,以下のような問題があります。

  • 運用してみたけど続かない
  • コストの割にはメリットを感じない
  • 改善したいけどよくわからない

こうしたよくある落とし穴と対策がもっと広まるとよさそうだと思い,発表します。今回はアンチパターンを扱います。

アンチパターンの定義

アンチパターンは以下のように定義されています。

  • 最初は有益だと思えるが,最終的に悪い結果をもたらすもの
  • リファクタリングするための方法が存在する

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

不具合の再発防止をしたい,手動で試験したくない,常に保証したい何かがあるといったときに,Seleniumですべて解決できるように思えます。

問題点 —⁠— Seleniumは大きい

Seleniumには「大きい」という問題があります。

メンテナンスコストが大きい
簡単なテストでも数十秒から数分と,実行時間が長くかかってしまいます。また,ネットワークやテスト対象が不安定になりやすいです。 粒度が大きい
1メソッド・1リクエストで確認できる挙動のためにブラウザまで動かすのはやりすぎなところがあります。
考え方

Selenium以外の選択肢も検討してみるのも重要ではないかと思います。

  • 静的解析
  • 単体テスト
  • APIテスト
  • 手動テスト

適切な選択をするためには,Seleniumの長所と短所を理解することが必要ではないでしょうか。

長所

長所は以下の通りです。

  • E2Eレベルでの保証ができる
  • 人間ではほぼ不可能な速度とタイミングで実行ができる
短所

短所は以下の通りです。

  • メンテナンスコストが高い
  • 柔軟性が高い
まとめると

頻繁に確認したいE2Eレベルのシンプルなテストを,メンテナンスできる範囲の数であればSeleniumでの自動テストを活用しましょう。

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

既存の開発プロセスにSeleniumテストを取り入れたいというパターンで,これもよくあります。手動テストで行われているテストの一部をそのままSeleniumに肩代わりさせようとする考え方です。

問題点 —⁠— 自動化したテストが通らなくなり,手が付けられなくなる

回帰試験をSeleniumテストで自動化したところ,実装期間のUI変更でSeleniumテストが通らなくなりました。乖離が大きすぎるのでいったん放置して手動でテストを行っていましたが,最終的にはメンテナンス不能になりました。

手動テストの代わりだけだとSeleniumテストのメリットを最大化できないのではないかと思います。工数削減だけではなく,自動テストならではの速度とタイミングでテストができることに注目するべきでしょう。

また,もう一つの問題として,Seleniumテストを放置するとソフトウェア本体との乖離が大きくなり,メンテナンスコストが膨らむ一方になります。

改善の方向性

自動テストのメリットを最大化するために,開発プロセス自体を考え直す必要があると思います。理想的には本体が変更されるたびにテストが実行されることです。そうすることで乖離が最小になります。少なくとも可能な範囲でテストの頻度を上げていくことが大切だと思います。

ただ,開発プロセスを考え直すのは大変です。推進役を立てて進める必要がありますが,どうしても難しい場合は,まずは単体テストとかから導入していって,メリットが実感できれば社内の協力者を増やしていけるのではないでしょうか。

まとめると

Seleniumテストを手動テストの置き換えに留めずに,常に繰り返し実行される開発プロセスを目指しましょう。開発プロセスを変えていくための推進役を立て,少しずつメリットを実感していきましょう。

弊社では,デプロイパイプラインを構築して,コード変更のたびにSeleniumテストをすべて実行するようにしました。誰が落としたかもわかるので,落とした人が即修正するよう義務化しました。こうすることで常に製品とテストとの乖離が無い状態を保て,問題の早期発見にもつながり,安心感も出てきます。

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

動作環境のすべてのブラウザで品質保証したいがために,Seleniumテストをすべてのブラウザで実行しようとするアンチパターンです。

問題点 —⁠— すべてのテストが通ることはなく,メンテナンス不能に陥る

IE8〜IE11,Firefox,Chromeで毎日すべてのSeleniumテストを実行していたところ,必ず失敗するテストがありました。原因調査と環境のメンテナンスに多大な時間がかかり,最終的にメンテナンス不能になりました。

考え方

Seleniumテストをクロスブラウザで運用するのは思ったより大変です。ブラウザのバージョンとWebDriverのバージョンがあり,それらの組み合わせ数が増えるにつれてトラブルに直面する可能性が高くなります。特にIEは不安定なブラウザです。

改善の方向性

ブラウザを絞るしかないと思います。ブラウザ依存の重大な不具合が過去にほとんど無いならば,FirefoxやChromeが安定していると思います。IEのサポートも,古いバージョンは終了し始めています。

Microsoft Edgeは,WebDriver対応状況が公開されていますが,重要な機能がサポートされていないということで,まだ早いかなと思います。

ヘッドレスブラウザは,以前PhantomJSではファイルアップロードが動かなくて諦めたのと,Seleniumでの運用事例をあまり見かけないという辛さがあります。

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

Taas(Tool as a Service)⁠ Platformの活用を検討するのがいいと思います。Sauce Labsのようなブラウザ環境を貸してくれるようなところを使えば,メンテナンスコストは解決できるのかなと思います。

まとめると

ブラウザは可能な限り絞りましょう。絞れないならばTaaSを検討しましょう。社内では過去のブラウザ依存の不具合を集計したところ,重要な不具合でSeleniumで発見できる種類のものはほぼありませんでしたので,Chromeのみに絞りました。動作も安定し,メンテナンスも楽になりました。

最後に

アンチパターンの兆候としては,テスト自動化のメリットが感じられず,必要以上に苦労していると感じられることが挙げられます。Seleniumは便利ですが落とし穴もありますので,あらかじめアンチパターンを知って回避しましょう。

Selenium Antipatterns

著者プロフィール

河原田政典(かわらだまさのり)

株式会社ベリサーブ所属。ソフトウェア開発に携わってきた経験を活かしてテスト自動化を担当。現在まさにSeleniumを扱っている。書店の技術書コーナーが大好きで,「読んだ=役立てられる」とは限らないと自戒しつつも蔵書は増える一方。本棚がいつ満杯になるか心配する日々を過ごしている。

コメント

コメントの記入