Selenium Auto Exec Server(AES)

Selenium Auto Exec Server(以降 Selenium AES)は、Seleniumによる継続的なリグレッションテストを行うためのツールです。

プロジェクトにおけるテストの手助けとなることを目標としています。

Selenium AESを使えば、Seleniumによるテストを毎日決まった時間に実行し、その結果をメールで送信するといったことが簡単に行えます。


Selenium AESは、Selenium RCを拡張することにより、実現しています。

また、Selenium RCのHTMLSuiteに対する使い勝手を向上させたツールとして、Selenium HTMLSuite Extensionというものも公開しており、Selenium AESでも、このライブラリを使っています。
(Selenium HTMLSuite Extension自体、Selenium AESの開発過程でできた物です。)


Selenium AESは、下記のような機能を持っています。

テストの定期実行

毎日決められた時刻にテストを自動実行できます。

Subversion連携

テスト開始時に、テストケースをSubversionのリポジトリから取得したうえで、テストを実行することができます。

これにより、いちいちテスト用のマシンにテストケースを配置する手間がなくなります。

結果メール送信

テスト結果をメールとして送信(SMTP)することができます。

テスト結果のHTMLをZIPファイルとして添付するので、テスト用のマシンにログインする必要もなく、テスト結果の詳細が確認できます。

ブラウザ上からのテスト状況確認

テストを実行しているサーバに対して、他のマシンからブラウザでテスト状況を参照可能です。

また、ブラウザ上からテストの実行を指示することもできます。

テスト実行API

HTTPでテストの実行を指示するためのAPIがあるので、他のCIサーバと連携して動作することも可能です。

CIサーバ側からSelenium AESに接続するためのクライアントとなるようなものも、今後準備したいと思ってます。

テストスイートの複数指定

指定ディレクトリ内の特定のファイルパターン(ファイル名に"suite"または"Suite"が含まれる)に一致するテストスイートをまとめて実行することができます。

テストスイートの自動作成

いちいちテストスイートを作成しておく必要はありません。

テストケースを特定のファイルパターン(ファイル名に"case"または "Case"が含まれる)で作成しておくことにより、それらテストケースを実行するためのテストスイートを自動生成し、実行できます。

複数ブラウザ実行

同じテストケースを複数のブラウザで実行するよう指定できます。


動作環境

Javaの実行環境(JRE1.5以上)が必要です。

OSはSelenium RCと同様に、Windows、Unix/Linux、Mac OS Xで動作すると思います。
(Windows XP、Mac OS Xでは動作確認済み)

ダウンロード

selenium-autoexec-server-0.2.zip ver 0.2 (2008/07/04)


開発中のソースコードは下記から参照できます。

selenium-extension - Google Code

ライセンス

Selenium RC と同様に、Apache License, Version 2.0とします。

使用方法

selenium-autoexec-server-0.2.zipファイルを解凍します。
(解凍した状態では、サンプルとしてhttp://www.google.com/に対するFirefox、IEを使ったテストを実行できるようになっています。)

設定ファイルの変更

利用する環境に応じて設定ファイル(setting.properties)を変更します。

設定ファイルの内容は下記の通りです。

項目 必須
/任意
内容
browser 必須 テストの実行ブラウザを指定します。カンマ区切りで複数指定可能です。
例:*iexplore,*firefox,*opera,*safari
startURL 必須 テスト対象のドメインを指定します。
generateSuite 任意 テストスイートの自動生成を行う場合に"true"、行わない場合には"false"を指定します。(デフォルトは"true")
suiteで指定したディレクトリ内の"Case"または"case"がつくファイルをテストケースのHTMLと判断し、テストスイートファイルを作成します。
詳しくは、suiteDirの欄をご参照ください。
suiteDir 任意 テストケース、テストスイートの配置ディレクトリを指定します(相対パスでもOK)。
省略した場合、"suite"が指定されたものとして動作します。

generateSuiteの設定によって、実行されるテストケース、テストスイートが変わってきます。
[generateSuite=true、または指定無し の場合]
指定ディレクトリ内からテストケースのHTMLを検索(ファイル名に"Case"または"case"が含まれる)し、同ディレクトリに"generatedTestSuite.html"というファイルでテストスイートを作成し実行します。
[generateSuite=false の場合]
そのディレクトリ内からテストスイートを検索(ファイル名に"Suite"または"suite"が含まれる)し、実行します。
suiteRepo 任意 テストケース、テストスイートの取得先リポジトリ(Subversion)です。
指定されたリポジトリから、ファイルをimportし、suiteDirで指定したディレクトリに配置します。
suiteRepoUsername 任意 テストケース、テストスイートの取得先リポジトリ(Subversion)のユーザ名です。
suiteRepoPassword 任意 テストケース、テストスイートの取得先リポジトリ(Subversion)のパスワードです。
resultDir 任意 テスト結果を出力するディレクトリを指定します。
テスト結果のファイルは、指定ディレクトリ配下に "(ブラウザ名)/(テストスイート名)_result.html" として出力されます。
省略した場合、"result"が指定されたものとして動作します。
autoExecTime 任意 定期実行する時刻です。
毎日、ここで指定された時刻にテストを自動実行します。
hh:mmで指定します。(例:1:00、14:30)
port 任意 Selenium サーバを起動するポート番号を指定します。
デフォルトは4444です。
timeout 任意 テストスイート実行時のタイムアウト時間(秒)を指定します。
デフォルトは3600秒です。
multiWindow 任意 "true"を指定するとテストを別ウインドウで実行します。
debug 任意 "true"を詳細なログ(デバッグログ)を出力します。
log 任意 ログをファイルに出力したい場合、ファイル名を指定します。
userExtensions 任意 JavaScriptで記述されたSeleniumのユーザ拡張ファイルを使用する場合に指定します。
proxyHost 任意 利用するプロキシのホストを指定します。
Selenium RCのバージョン0.9.2ではバグがあるので、プロキシを利用する際には、avoidProxy=true も一緒に指定してください。
Selenium RC (0.9.2) でプロキシ指定が動かない - Enjoy*Study
proxyPort 任意 利用するプロキシのポート番号を指定します。
avoidProxy 任意 "true"を指定すると、/selenium-server 以外のリクエストは、Seleniumサーバで受けないようになります。
firefoxProfileTemplate 任意 Firefoxで利用するプロファイルディレクトリを指定します。
mail.host 任意 テスト結果の送信を行う際に使用するメールサーバのホスト名です。
SMTPで送信されます。

メールに関する設定例は、後述しますので、詳しくはそちらをご参考ください。
mail.port 任意 テスト結果の送信を行う際に使用するメールサーバのポート番号です。
デフォルトで25(SMTPの標準ポート)が利用されます。
mail.ssl 任意 メール送信にてSSLを利用する際に"true"を指定します。
mail.username 任意 メール送信時の認証に利用するユーザ名です。
mail.password 任意 メール送信時の認証に利用するパスワードです。
mail.to 任意 テスト結果メールの送信先アドレスです。
mail.from 任意 テスト結果メールの送信元アドレスです。
mail.subject 任意 テスト結果メールの件名フォーマットです。
${result}という変数が利用できます。(テスト結果が正常の場合は"passed"、失敗の場合は"failed")
デフォルトは、下記のようなフォーマットになっています。
Selenium Test Report [${result}]
mail.debug 任意 trueを指定すると、メール送信時のDEBUGログがコンソールに表示されます。

テストケース、テストスイートの配置

Subversionのリポジトリからテストケース、テストスイートを取得する場合、設定ファイルの、suiteRepo、suiteRepoUsername、suiteRepoPasswordにリポジトリの情報を設定します。

# テストケース、テストスイートが配置されているリポジトリURL
suiteRepo=http://192.168.0.1/svn/trunk/selenium/
# 上記リポジトリにアクセスするためのユーザ/パスワード(認証が不要な場合は何も設定しなくてOK)
suiteRepoUsername=devuser
suiteRepoPassword=devpass

上記のような設定をすることにより、テスト実行時に、指定リポジトリから最新のリビジョンのファイルを取得し、設定ファイルのsuiteDirに指定したディレクトリにimportします。


Subversionと連携しない場合には、手動でテストケースを指定のディレクトリに配置しておきます。

解凍した状態では、サンプルのテストケースが配置されていますので、実際にプロジェクトで利用される場合は削除してください。

Selenium AESの起動

Selenium AESを起動します。

Windowsの場合はstart.bat、Linuxの場合は、start.shを実行してください。

"Start Selenium Auto Exec Server."がコンソールに表示されたら、起動完了です。

なお、Selenium AESの実行には、Javaの実行環境(JRE1.5以上)が必要となりますので、インストールされていない場合には、インストールしてから実行してください。

テストの実行

テストは下記の3つの方法で実行することができます。

(A) 定期実行

毎日決められた時刻に実行するよう設定できます。

設定ファイルのautoExecTimeに実行したい時刻を指定します。

autoExecTime=1:30

上記のように設定すると、毎日1時30分に実行されます。

(B) ブラウザ上から実行

Selenium AESを起動しているマシンにブラウザからアクセスし、ブラウザ上からテストの実行を行えます。

URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/ になります。

下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。

http://localhost:4444/selenium-server/autoexec/

この画面で「Run Test」ボタンを押下すると、テストが実行されます。(その他、画面で確認できる内容については、後述します。)

(c) APIから実行

APIを使って、HTTPリクエストによってテストの実行を指示できます。

URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/command/run になります。

下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。

http://localhost:4444/selenium-server/autoexec/command/run

レスポンスのbodyとして、テスト結果を返却します。テストが全てOKとなった場合には"passed"が、失敗した場合には"failed"が返ります。


テストの結果を待たずにテストの実行の指示だけ行う場合には、/selenium-server/autoexec/command/run/async をURLとして指定します。

http://localhost:4444/selenium-server/autoexec/command/run/async

この場合には、受付完了の場合に、"success"がレスポンスのbodyとして返却されます。

ブラウザ上から参照できる情報

テストの実行状況と、テスト結果をブラウザ上から参照できます。

URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/ になります。

下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。

http://localhost:4444/selenium-server/autoexec/

TOPページ

この画面は30秒毎に内容が更新されます。

各表示項目の内容は下記の通りです。

項目 内容
status Selenium AESの状態です。
  • idle: 空き
  • run: テスト実行中
idleの場合には、「Run Test」ボタンが押下可能となっており、ボタン押下によりテストを実行できます。
result テストの実行結果です。
  • passed: 成功
  • falied: 失敗
number of cases テスト結果の内訳です。
結果毎のテストスイート数と、テストスイートの総数が表示されます。
start time テストの開始時刻です。
end time テストの終了時刻です。

テストスイート毎の項目内容です。

項目 内容
suite テストスイートファイル名です。
リンクを押下すると、テスト結果の詳細画面に遷移します。
browser 実行ブラウザ名です。
status テストスイートの状態です。
  • wait: 実行待ち
  • run: 実行中
  • passed: 終了(成功)
  • failed: 終了(失敗)

結果メール送信のための設定ファイル記入例

利用するメールサーバの設定により、設定ファイルに記載する項目が異なりますので、設定例をいくつか下記に記載します。

(A) SMTP(認証なし)

認証なしのSMTPの設定例です。

# サーバ名
mail.host=smtp.enjoyxstudy.com

# ポート番号が25以外の場合は下記も設定する
#mail.port=925

# 送信先アドレス
mail.to=dev-ml@sample.enjoyxstudy.com
# 送信元アドレス
mail.from=report@sample.enjoyxstudy.com

(B) SMTP-AUTH

SMTP-AUTH(SMTPで認証あり)の設定例です。

mail.username、mail.passwordで認証情報を指定します。

# サーバ名
mail.host=smtp.enjoyxstudy.com

# ポート番号が25以外の場合は下記も設定する
#mail.port=925

# 認証ユーザ名
mail.username=userhoge
# 認証パスワード
mail.password=paspaspas
              
# 送信先アドレス
mail.to=dev-ml@sample.enjoyxstudy.com
# 送信元アドレス
mail.from=report@sample.enjoyxstudy.com

(C) SMTP-AUTH over SSL

SMTP-Auth(SMTPで認証あり)+SSLの設定例です。

mail.sslに"true"を設定することで、SSLを利用するようになります。

また、SSLを利用した場合、SMTPのポート番号は25以外を利用することが多い(一般的に465を利用)ので、mail.portも指定します。

# サーバ名
mail.host=smtp.enjoyxstudy.com

# ポート番号
mail.port=465

# SSLの利用を指定
mail.ssl=true

# 認証ユーザ名
mail.username=userhoge
# 認証パスワード
mail.password=paspaspas
              
# 送信先アドレス
mail.to=dev-ml@sample.enjoyxstudy.com
# 送信元アドレス
mail.from=report@sample.enjoyxstudy.com

変更履歴

ver 0.2 (2008/07/04)

  • firefoxProfileTemplateオプション対応。

ver 0.1 (2008/06/02)

  • 初回公開。

その他

お問い合わせ、コメント等は下記Blogの方でお願いします。