「Selenium AES」で回帰テストの定時実行化を

SATOOFirefox, selenium, Xvfb, テスト, 仮想フレームバッファ, 回帰テスト, 自動化

こんにちは、SATOOです。

最近、弁当を作り始めました。
毎朝少しだけ早起きして、おかず仕込みに勤しむ毎日です。
職場で弁当を“作って”持ってきている男性はまだ私だけで、「弁当男子」の称号をほしいままにしています(本当か?)。

さて、Webアプリケーションテストの自動実行ツールとして有名な「Selenium」というツールがあります。
本体である「Selenium Core」はJavaScriptで書かれていて、JavaScriptによってWebブラウザを操作してテストを実行します。
「Selenium RC」を使えば、リモートでテストを実行できます。
さらにテストケースの作成には、「Selenium IDE」というFirefoxのアドオンを使うと便利で、Firefox上で行った操作を記録してテストケースが作れたりします。
非常に有用なツールと言えます。

「Selenium」に関しての情報は、次のサイトがわかりやすいです。
第1回:Webブラウザを使ったテストツールSeleniumとは(ThinkIT)
Selenium 0.7利用手順書(CodeZine)

さて、便利なテスト自動化ツール「Selenium」で、テスト自体を定期実行したい場合があります。
テストケースを溜めておいて、毎日自動実行させる。
できれば、その結果をメールで受け取りたい。

今回は、そんな要求を一気に解決してくれるツール「Selenium AES(Selenium Auto Exec Server)」の紹介です。
「Selenium AES」は、「Selenium」を使って継続的な回帰テストを実行するためのツールです。
テストの定時実行機能、結果のメール送信機能に加え、Subversionとの連携(テストケースをリビジョン管理し、最新に保つ)、API連携(API経由によるテストの実行指示機能)、複数ブラウザ実行機能などが実装されています。
Javaで書かれているので、プラットフォームを選ばないのも魅力的です。
詳しい機能の説明などは、本家サイト「Selenium Auto Exec Server(AES) – by Enjoy*Study」をご覧ください。

以下に、Linux上で「Selenium AES」を利用するときのステップを備忘録として残してみます。

まず「Selenium AES」のパッケージをダウンロードし、サーバ上に置きます(2009/6/9現在、バージョンはVer.0.5が最新)。
zip圧縮されているので解凍します。
できたディレクトリに入り、設定ファイル(setting.properties)を編集します。
今回は、以下のようにしました(一部、データを書き換えています)。

# テスト実行するブラウザ
browser=*firefoxproxy

# テストを行うサイトのURL
startURL=https://hogehoge.com/

# テストケースのありか
suiteDir=/home/selenium-test/testcases
# テストの実行結果の保存場所
resultDir=/home/selenium-test/results

# 定時実行する時刻(午前3時)
autoExecTime=3:00

# テスト実行時に、1つのウィンドウで実行する
singleWindow=true

# Firefoxのプロファイルのありか
firefoxProfileTemplate=/home/selenium-test/.mozilla/firefox/

# テスト時のSSL証明書をすべて信頼する
trustAllSSLCertificates=true

# デバッグするときはコメントをはずす
#debug=true

# テスト結果を送信するメールサーバのホスト
mail.host=localhost

# SMTPのPort
mail.port=25

# 受け取り先メールアドレス
mail.to=satoo@xxxxxx

# 送信者メールアドレス
mail.from=selenium-report@xxxxxx

テストケースの置場(設定では「/home/selenium-test/testcases」)をSambaなどを使って共有ディレクトリにすれば、Windows上で作ったテストケースの設置も楽になりますね。

さて、テスト実行サーバはサーバ用途なので、そもそもGUIがありませんでした。
そこで今回は「Xvfb(仮想フレームバッファ)」を利用することにしました。
「Xvfb」を起動しておけば、Xを起動しなくてもFirefoxが起動できるようになります。
Firefox上でSeleniumがテストする様は見ることができませんが、どうせ夜中にテストするんだから変わりません。笑
テスト実行サーバはCentOS。この辺は「yum」で一発です。
テスト実行サーバにはFirefoxもインストールされていなかったので、併せてインストールしました。
# yum install xorg-x11-Xvfb firefox

次にDISPLAYの設定と、「Xvfb」の起動。
$ export DISPLAY="localhost:1.0"
$ /usr/bin/Xvfb :1 -screen 0 1024x768x8

これを「Selenium AES」の起動用スクリプト(startup.sh)に追記して、起動準備完了です。

#!/bin/sh
# —————————————————
# Selenium Auto Exec Server(AES) Startup.
# —————————————————
export DISPLAY=”localhost:1.0″
/usr/bin/Xvfb :1 -screen 0 1024x768x8 &

. ./set_classpath

java -classpath $SELENIUM_AES_CLASSPATH \
com.enjoyxstudy.selenium.autoexec.AutoExecServer &

ついでに、「Selenium AES」シャットダウン用スクリプト(shutdown.sh)にも追記して、「Xvfb」が同時に終了するようにすればOKです。

#!/bin/sh
# —————————————————
# Selenium Auto Exec Server(AES) Shutdown
# —————————————————

. ./set_classpath

java -classpath $SELENIUM_AES_CLASSPATH \
com.enjoyxstudy.selenium.autoexec.AutoExecServer shutdown

killall Xvfb

「Selenium AES」を起動するときは
$ ./startup.sh
終了するときは
$ ./shutdown.sh

常駐アプリケーションになるので、rcスクリプトにするという手もありましたが、今回は単純な方法で。