レポート

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

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

E2Eテストフレームワークを使用したテスト自動化事例(太田邦昭氏)

今まさに取り組んでいるという,NightWatchJSでテスト自動化を行う事例が紹介されました。リアルブラウザのヘッドレス化という手法も話題となり,聞き応えのあるセッションとなりました。

太田邦昭氏

太田邦昭氏

テスト対象サイト

今回,テスト自動化を実行した対象サイトは以下のようなものでした。

  • JavaフレームワークとしてAngularJSを使用
  • 外部とのデータのやりとりはスタブで代用
  • テスト実行時に専用環境が自動構築される仕掛け

テストフレームワークを決める

まず,以下に挙げる各チームの開発言語や要望を考慮して,テストフレームワークを検討していきました。

  • JavaScriptのテストが行えること
  • 簡単にスクリプトの作成と実行ができること
  • JavaScriptベースでスクリプトが書けること
  • Jenkinsとの連携ができること
  • ヘッドレスブラウザとの連携ができること

検討の結果,これらの要件に対応できそうなテストフレームワークとして以下の2つが候補となりました。

NightWatchJS

NightWatchJSは以下のような特徴があります。

  • JavaScriptベース
  • シンプルにスクリプトが書ける
  • Selenium Serverの制御ができる
  • CIをサポート
  • 拡張が容易
Protractor

Protractorは以下のような特徴があります。

  • AngularJSに特化
  • JavaScriptベース
  • WaitForAngular()
    →待機処理を明示的に指定しなくてもレンダリングを待機する
  • ダイレクトブラウザドライバ接続
ヘッドレスブラウザ

テストフレームワークよりも先にヘッドレスブラウザに何を使うか決めておかなければなりませんが,今回は以下の理由からPhantomJSを選択しました。

  • ヘッドレスブラウザとしてメジャー
  • JavaScriptのテストを走らせるためによく採用されている
  • NightWatchJSとProtractorでサポートされている
  • 技術情報が豊富
  • WebKitベース
  • スクリーンショットが取れる
  • jQueryでページを操作できる
  • 自動パフォーマンス解析ができる

NightWatchJSとProtractorで検討しましたが,利用するフレームワークを変更するなどの理由があり,今後のシステムとの親和性がより高いNightWatchJSを選択しました。

テストを書く

今回自動化したかったのは,アカウントに関するテスト,表示に関するテストと,CSVのダウンロードに関するテストです。実際にテストを書くうえでのポイントは以下の通りです。

  • CSS Selectorで柔軟に要素を特定
  • ページオブジェクトパターンの適用で保守性を向上
    →UI操作系のコードと検証系のコードを分離
  • ダウンロードのテストはカスタムコマンド・カスタムアサーションで対応

リアルブラウザのヘッドレス化

テストを実行してみると,PhantomJSでは挙動が不安定だったり固有の問題があり,ダウンロードも失敗しました。本質的でないところで工数がかかるため,別の手法を探すことにしました。結果としまして,リアルブラウザではテストが成功していますので,Xvfb(X virtual framebuffer:UNIX/Linuxで,仮想ディスプレイによる画面の入出力をエミュレートできるツール)を使ってヘッドレス化し,テストも正常に実施できました。

また,マルチブラウザでテストをしたいということだったので,Selenium Gridを使って,IEやSafariのテストは実行しています。

Jenkinsとの連携

Jenkinsとの連携では,以下のような流れでテストが実行されるようにしました。

  1. Jenkinsからテスト対象のWebサイトを自動構築
  2. Jenkinsがテスト実行するコマンドを投げる
  3. 上記で作った各ブラウザが並列でテスト実行
  4. テスト結果の可視化

環境ができたということで,本格的に動き出すのはこれからですが,取組中の案件の事例として紹介しました。

Q&A

Q:JavaとJavaScriptを使える要員の数に差がない場合は,どちらを選ぶべきか,優先度などあるでしょうか。
A:今回の事例では,社内的にはJavaを書くとなった場合拒絶反応が出てしまうので,仕方なくJavaScriptを使っています。そうした制限が無いのでしたら,Javaベースのテストフレームワークを選択されたほうが良いと思います。
Q:成熟したフレームワークがJavaの方が多いからでしょうか。
A:そうですね。やはり1から自分たちでテストフレームワークを作るのは大変なことです。今オープンソースで出ているフレームワークのほうが,機能も豊富ですし,事例も見つけやすいので良いと思います。
Q:運用で一番大変なことは何でしょうか。
A:今はほぼ自動で動いていますので,バージョンアップの影響などで何か起きたときに調べるくらいです。
Q:IEでのテストもしているということですが,Windows Serverを立てるのは大変ではないでしょうか。
A:実は,Windows Serverではなく,Windowsクライアントを使っています。以前Windows Serverを使っていたところ,権限の問題があって動かなかったことがあったからです。Windowsクライアントで十分動作します。

著者プロフィール

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

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

コメント

コメントの記入