この記事はNSEGアドベントカレンダーの10日目の記事と、
Selenium/Appium Advent Calendar 2015の22日目の記事です。
概要
Selenium IDEというWeb UIの自動テストを行うツールで作ったテストケースを、Jenkinsというビルドやテストの自動化を行うCI(継続的インテグレーションツール)から呼び出して、定期的にWeb UIのテストを行う環境を構築します。
以前、Web UIのテスト自動化をしたいと考えていた時、
JenkinsとSeleniumでJavaScriptのテスト自動化、最初の一歩。第1回 日本Seleniumユーザーコミュニティ勉強会 − Publickey
のエントリーを読んで、JenkinsからSelenium IDEを使ったWeb UIのテストの定期実行できるということを知りました。
普通JenkinsからはSelenium Web Driverを利用すると思いますが、テストプログラムを書けなくてもSelenium IDEなら使えるという層がいる場合、Selenium IDEでのテストを使えるのは大きいです。
なのでこれはぜひ導入したいと思いました。
しかし、このエントリーではSeleniumhq Pluginを入れれば簡単に出来そうな感じに見えたのですが、実際に導入しようとすると結構色々とノウハウが必要でした。
環境構築
Jenkinsのインストール
- yum install jenkins
- /var/lib/jenkins 以下にjenkinsのシステムが存在している。
- オーナー、グループは「jenkins.jenkins」
- jenkinsアカウントのシェル変更
- 「jenkins」ユーザのシェルはデフォルトだと「/bin/false」になっているが、「jenkins」ユーザで入って確認や設定をしたいことが多いため、/bin/bash等にしてパスワードも設定しておく。
- jenkinsアカウントのパスワード設定
- jenkinsの環境から問題なくテストが動くか確認したりするため、jenkinsアカウントのパスワードの設定を行い、ログイン可能なようにしておく。
selenium serverの準備
- Seleniumのダウンロードサイト http://www.seleniumhq.org/download/ から「Selenium Server」をダウンロードする。
- 「selenium-server-standalone-2.42.2.jar」のようなファイルを取得
- sftp等で「/var/lib/jenkins/」以下に「selenium-server-standalone-2.42.2.jar」配置
- バージョン名なしのシンボリックリンクを作成
% cd /var/lib/jenkins % ln -s selenium-server-standalone-2.42.2.jar selenium-server.jar
Jenkinsの設定
プラグインインストール
- ジェンキンスのダッシュボードから「Jenkinsの管理」→「プラグインの管理」→「利用可能」選択
- 下記プラグインをチェック
- Hudson Seleniumhq plugin
- Selenium HTML report
- Xvfb plugin
- 「再起動せずにインストール」
システム設定
クライアント側(Windows)でXの表示可能にする
- MobaXTerm (http://mobaxterm.mobatek.net/)を導入
動作テスト
サーバのFirefoxを起動してプロファイル生成と表示の確認
- Windows上でMobaXTermを起動
- サーバに「jenkins」アカウントでsshで接続
- 「firefox」でWindows上にサーバ上で起動されたFirefoxの画面が表示されるか確認
- 外部サイトが見えるか確認
サーバのFirefoxにSelenium IDEプラグインを導入
- サーバ上のFirefoxからSeleniumのダウンロードサイト http://www.seleniumhq.org/download/ を開く
- Selenium IDEのlatestを選択してプラグインのインストール
サーバのFirefoxからテストケースが実行可能か確認
テストケース内のパスの違いやFirewallの問題のため、Windows上では問題なかったテストケースがサーバ上では動作しない場合がある。
そのため、サーバ上のFirefoxでもテストケースがきちんと動くか確認する。
- /var/lib/jenkins などにテスト的に作成したテストスイート「example_suite_1.html」とテストケース「example_test_1.html」のようなファイルをアップロード
- サーバ上のfirefoxを起動してSelenium IDEを開く(検索バー横に「Se」と書いてあるアイコンか「Tools」→「Selenium IDE」)
- テストスイート「example_suite_1.html」を読み込み(Selenium IDEの「File」→「テストスイートを開く」)
- テストスイート実行(「アクション」→「テストスイート全体を実行」)
selenium-server経由で自動テスト可能か確認
$ export XMODIFIERS="@im=scim"
$ java -jar selenium-server-standalone.jar -htmlSuite *firefox http://www.example.com example_suite_1.html example_result_1.html
- サーバ上のfirefoxの画面でテストが正常に動作し、終了後自動的にfirefoxが閉じられることを確認
- テストが終了してもfirefoxが閉じられない場合、テストスイートではなくテストケースを実行していないか確認する。
画面出力をXvfbにして自動テスト可能か確認
- Windows上でMobaXTermを起動
- Xvfbを起動する
$ Xvfb :99 -ac -screen 0 1024x768x24 &
- 環境変数を設定
$ export DISPLAY=:99 $ export XMODIFIERS="@im=scim"
- selenium-server経由でテストケースを実行
$ java -jar selenium-server-standalone.jar -htmlSuite *firefox http://www.example.com example_suite_1.html example_result_1.html
- コンソールに何行かINFOが表示され最後に「15:09:34.372 INFO - Killing Firefox...」と出て終了し、「example_result_1.html」にテスト結果が書かれていることを確認
自動テスト項目の作成
大まかな流れ
新規ジョブ作成
- Jenkinsのダッシュボードから「新規ジョブ作成」
- ジョブ名:
- 半角英数の他のジョブ名と重ならない適当な名前
- サーバ上のworkspaceディレクトリ名がそのままその名前で付けられるため、日本語ではなく半角英数で付けることを推奨。
- この例では「example_test」とする。
- 「フリースタイル・プロジェクトのビルド」を選択。
- 「OK」を押すと詳細設定ページヘ遷移。
- ソースコード管理
- 「なし」を選択。
- ビルド・トリガ
- 一旦、なしで設定。
- テストして問題なく動いたら「定期的に実行」で定時テストにする。
- ビルド環境
- 「Start Xvfb before the build, and shut it down after.」をチェック。
- 「高度な設定」を選択
- Xvfb screen:「1024x768x24」
- スクリーンショット撮ることを考えて画面サイズと色数の指定をする。
- 「ビルド手順の追加」→「SeleniumHQ htmlSuite Run」を選択
- 「ビルド後の処理の追加」→「Publish Selenium Report」
- 「SeleniumHQ htmlSuite Run」の「resultFile」と同じものを指定。
- この例では「result/example_result_1.html」とする。
- 「ビルド後の処理の追加」→「Publish Selenium Html Report」
- 「保存」を押すとプロジェクトのページヘ遷移。
テストスイート・テストケースファイルの登録
テストの動作確認と定期実行設定
- テストの動作確認
- 定期実行の設定
- プロジェクトの「設定」を選択
- 「ビルドトリガ」→「定期的に実行」をチェック
- スケジューリング:毎日早朝4時にテストする例「H 4 * * *」