Japanese / English
Selenium Auto Exec Server(以降 Selenium AES)は、Seleniumによる継続的なリグレッションテストを行うためのツールです。
プロジェクトにおけるテストの手助けとなることを目標としています。
Selenium AESを使えば、SeleniumのHTML形式のテストを毎日決まった時間に実行し、その結果をメールで送信するといったことが簡単に行えます。
他にもSeleniumを使ったリグレッションテストを手助けするための様々な機能が提供されます。
Selenium AESは、Selenium RCを拡張することにより、実現しています。
また、Selenium RCのHTMLSuiteに対する使い勝手を向上させたツールとして、Selenium HTMLSuite Extensionというものも公開しており、Selenium AESでも、このライブラリを使っています。
(Selenium HTMLSuite Extension自体、Selenium AESの開発過程でできた物です。)
Selenium AESは、下記のような機能を持っています。
毎日決められた時刻にテストを自動実行できます。
テスト開始時に、テストケースをSubversionのリポジトリから取得したうえで、テストを実行することができます。
これにより、いちいちテスト用のマシンにテストケースを配置する手間がなくなります。
テスト結果をメールとして送信(SMTP)することができます。
テスト結果のHTMLをZIPファイルとして添付するので、テスト用のマシンにログインする必要もなく、テスト結果の詳細が確認できます。
テストを実行しているサーバに対して、他のマシンからブラウザでテスト状況を参照可能です。
また、ブラウザ上からテストの実行を指示することもできます。
HTTPでテストの実行を指示するためのAPIがあるので、他のCIサーバと連携して動作することも可能です。
Hudson用にプラグインも用意されています。
また、コマンドラインなどからSelenium AESのAPIを実行できるように、クライアントとなるjarも提供しています。
指定ディレクトリ内の特定のファイルパターン(ファイル名に"suite"または"Suite"が含まれる)に一致するHTMLSuiteをまとめて実行することができます。
いちいちHTMLSuiteを作成しておく必要はありません。
テストケースを特定のファイルパターン(ファイル名に"case"または "Case"が含まれる)で作成しておくことにより、それらテストケースを実行するためのHTMLSuiteを自動生成し、実行できます。
同じテストケースを複数のブラウザで実行するよう指定できます。
Javaの実行環境(JRE1.5以上)が必要です。
OSはSelenium RCと同様に、Windows、Unix/Linux、Mac OS Xで動作すると思います。
(Windows XP、Mac OS Xでは動作確認済み)
開発中のソースコードは下記から参照できます。
Selenium RC と同様に、Apache License, Version 2.0とします。
ダウンロードしたzipファイルを解凍します。
(解凍した状態では、サンプルとしてhttp://www.google.com/に対するFirefox、IEを使ったテストを実行できるようになっています。)
利用する環境に応じて設定ファイル(setting.properties)を変更します。
設定ファイルの内容は下記の通りです。
項目 | 必須 /任意 |
内容 |
---|---|---|
browser | 必須 |
テストの実行ブラウザを指定します。カンマ区切りで複数指定可能です。 例:*iexplore,*firefox,*opera,*safari |
startURL | 必須 | テスト対象のドメインを指定します。 |
generateSuite | 任意 |
HTMLSuite(テストスイート)の自動生成を行う場合に"true"、行わない場合には"false"を指定します。(デフォルトは"true") suiteで指定したディレクトリ内の"Case"または"case"がつくファイルをテストケースのHTMLと判断し、HTMLSuiteファイルを作成します。 詳しくは、suiteDirの欄をご参照ください。 |
suiteDir | 任意 |
テストケース、HTMLSuite(テストスイート)の配置ディレクトリを指定します(相対パスでもOK)。 省略した場合、"suite"が指定されたものとして動作します。 generateSuiteの設定によって、実行されるテストケース、HTMLSuiteが変わってきます。 [ディレクトリ名指定(指定ディレクトリにテストケースあり)、generateSuite=true または指定なしの場合] 指定ディレクトリからテストケースのHTMLを検索し、同ディレクトリに"generatedTestSuite.html"というファイルでHTMLSuiteを作成し実行します。 [ディレクトリ名指定(指定ディレクトリにテストケースなし)、generateSuite=true または指定なしの場合] 指定ディレクトリにテストケースがない場合、指定ディレクトリ配下のディレクトリ毎にHTMLSuiteを作成します。 HTMLSuiteのファイル名は、<ディレクトリ名>.html となります。HTMLSuiteを機能毎に分けて作成したい場合などに便利です。 [ファイル名指定、generateSuite=true または指定なしの場合] 指定されたファイル名でHTMLSuiteを自動生成します。 テストケースの検索対象は、指定したHTMLSuiteと同じディレクトリ内が対象になります。 [generateSuite=false の場合] そのディレクトリ内からHTMLSuiteを検索(ファイル名に"Suite"または"suite"が含まれる)し、実行します。 |
suiteRepo | 任意 |
テストケース、HTMLSuite(テストスイート)の取得先リポジトリ(Subversion)です。 指定されたリポジトリから、ファイルをimportし、suiteDirで指定したディレクトリに配置します。 |
suiteRepoUsername | 任意 | テストケース、HTMLSuite(テストスイート)の取得先リポジトリ(Subversion)のユーザ名です。 |
suiteRepoPassword | 任意 | テストケース、HTMLSuite(テストスイート)の取得先リポジトリ(Subversion)のパスワードです。 |
permanentResult | 任意 |
過去のテスト結果を残しておく場合は"true"を、残さない場合には、"false"を指定します。(デフォルトは"true") "false"を指定した場合、過去のテスト結果が参照できない(常にテスト結果が上書きされる)ことになるので、テスト結果を後から参照する場合には注意が必要です。 |
resultDir | 任意 |
テスト結果を出力するディレクトリを指定します。 テスト結果のファイルは、指定ディレクトリ配下に "(テスト実行時間※)/(ブラウザ名)/(HTMLSuite名)_result.html" として出力されます。 (※permanentResult=falseの場合、テスト実行時間はパスに含まれません。常に同じディレクトリに出力されることになります。) 省略した場合、"result"が指定されたものとして動作します。 |
autoExecTime | 任意 |
定期実行する時刻です。 毎日、ここで指定された時刻にテストを自動実行します。 hh:mmで指定します。(例:1:00、14:30) |
port | 任意 |
Selenium サーバを起動するポート番号を指定します。 デフォルトは4444です。 |
timeout | 任意 |
HTMLSuite(テストスイート)実行時のタイムアウト時間(秒)を指定します。 デフォルトは1800秒です。 |
singleWindow | 任意 |
"true"を指定するとテストを同一ウインドウで実行します。 デフォルトは"false"(別ウインドウ)です。 |
debug | 任意 |
"true"を指定すると詳細なログ(デバッグログ)を出力します。 |
log | 任意 |
ログをファイルに出力したい場合、ファイル名を指定します。 |
userExtensions | 任意 | JavaScriptで記述されたSeleniumのユーザ拡張ファイルを使用する場合に指定します。 |
proxyHost | 任意 |
利用するプロキシのホストを指定します。 |
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ログがコンソールに表示されます。 |
beforeCommand | 任意 |
テスト開始前に実行するコマンドを指定します。 |
afterCommand | 任意 |
テスト終了後に実行するコマンドを指定します。 |
trustAllSSLCertificates | 任意 |
"true"を指定すると、全てのSSL証明書を信頼するようにします。 試験対象のサーバが提供するSSL証明書で警告が出る場合に、本オプションを指定しないとエラーとなります。 |
Subversionのリポジトリからテストケース、HTMLSuiteを取得する場合、設定ファイルの、suiteRepo、suiteRepoUsername、suiteRepoPasswordにリポジトリの情報を設定します。
# テストケース、HTMLSuiteが配置されているリポジトリURL suiteRepo=http://192.168.0.1/svn/trunk/selenium/ # 上記リポジトリにアクセスするためのユーザ/パスワード(認証が不要な場合は何も設定しなくてOK) suiteRepoUsername=devuser suiteRepoPassword=devpass
上記のような設定をすることにより、テスト実行時に、指定リポジトリから最新のリビジョンのファイルを取得し、設定ファイルのsuiteDirに指定したディレクトリにimportします。
Subversionと連携しない場合には、手動でテストケースを指定のディレクトリに配置しておきます。
解凍した状態では、サンプルのテストケースが配置されていますので、実際にプロジェクトで利用される場合は削除してください。
Selenium AESを起動します。
Windowsの場合はstart.bat、Linuxの場合は、start.shを実行してください。
"Start Selenium Auto Exec Server."がコンソールに表示されたら、起動完了です。
なお、Selenium AESの実行には、Javaの実行環境(JRE1.5以上)が必要となりますので、インストールされていない場合には、インストールしてから実行してください。
テストは下記のように様々な方法で実行することができます。
毎日決められた時刻に実行するよう設定できます。
設定ファイルのautoExecTimeに実行したい時刻を指定します。
autoExecTime=1:30
上記のように設定すると、毎日1時30分に実行されます。
Selenium AESを起動しているマシンにブラウザからアクセスし、ブラウザ上からテストの実行を行えます。
URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/ になります。
下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。
http://localhost:4444/selenium-server/autoexec/
この画面で「Run Test」ボタンを押下すると、テストが実行されます。(その他、画面で確認できる内容については、後述します。)
CIツールであるHudsonからSelenium AESを起動するために、プラグインを提供しています。
プラグインはHudsonのプラグインアップデートセンターからインストールできます。
プラグインを使用すると、ビルド手順として、Selenium AESの実行が追加できます。
そして、Selenium AESの実行結果も、Hudson上で参照できるようになります。
クライアント用のjarファイルを同梱しています。(selenium-autoexec-client-*.jar)
これを使うことにより、コマンドラインからテストを実行することができます。
パラメータとして、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/command/ を指定します。
java -jar selenium-autoexec-client-1.2.jar http://localhost:4444/selenium-server/autoexec/command/
テストの結果を待たずにテストの実行の指示だけ行う場合は、パラメータとして -a を指定します。
java -jar selenium-autoexec-client-1.2.jar -a http://localhost:4444/selenium-server/autoexec/command/
クライアント用のjarファイル(selenium-autoexec-client-*.jar)に、JUnitのテストケースとして実行するクラス(com.enjoyxstudy.selenium.autoexec.client.SeleniumAutoExecRemoteTest)を含んでいます。
これを使って、テストケースの1つとして、テストの実行を行うことが出来ます。
例として、これをAntで実行するためのビルドファイルを下記に記載します。
<?xml version="1.0" encoding="UTF-8"?> <project basedir="." default="junit-test" name="selenium-autoexec-client"> <path id="classpath"> <pathelement location="selenium-autoexec-client-1.2.jar"/> </path> <target name="junit-test"> <mkdir dir="junit-dist"/> <junit fork="yes" printsummary="withOutAndErr"> <!--<sysproperty key="seleniumaes.async" value="true"/>--> <sysproperty key="seleniumaes.url" value="http://localhost:4444/selenium-server/autoexec/command/"/> <formatter type="plain"/> <test name="com.enjoyxstudy.selenium.autoexec.client.SeleniumAutoExecRemoteTest" todir="junit-dist"/> <classpath refid="classpath"/> </junit> </target> </project>
APIを使って、HTTPリクエストによってテストの実行を指示できます。
定期実行以外は、全てこのAPIを利用して操作しています。
URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/command/run になります。
下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。
http://localhost:4444/selenium-server/autoexec/command/run
レスポンスのbodyとして、下記のようなテスト結果を返却します。
result: passed number of cases: passed: 2 / failed: 0 / total: 2 start time: 2008-11-08 22:11:15 end time : 2008-11-08 22:12:02 ---------------------------------------------- generatedTestSuite.html: *firefox: passed generatedTestSuite.html: *iexplore: passed ----------------------------------------------
テストが全てOKとなった場合には1行目に"result: passed"が、失敗した場合には"result: failed"が返ります。
また、クエリにtype=jsonをつけると、JSON形式で結果が返却されます。(下記は見やすいように整形しています)
{ "result" : "passed", "totalCount" : 2, "passedCount" : 2, "failedCount" : 0, "startTime" : "2008-11-08 22:40:42", "endTime" : "2008-11-08 22:41:04", "suites" : [ { "suiteName" : "generatedTestSuite.html", "resultPath" : "/selenium-server/autoexec/result/20081108224042/firefox/generatedTestSuite_result.html", "browser" : "*firefox", "status" : "passed" }, { "suiteName" : "generatedTestSuite.html", "resultPath" : "/selenium-server/autoexec/result/20081108224042/iexplore/generatedTestSuite_result.html", "browser" : "*iexplore", "status" : "passed" } ] }
テストの結果を待たずにテストの実行の指示だけ行う場合には、/selenium-server/autoexec/command/run/async をURLとして指定します。
http://localhost:4444/selenium-server/autoexec/command/run/async
この場合には、受付完了の場合に、"result: success"がレスポンスのbodyとして返却されます。
テストの実行状況と、テスト結果をブラウザ上から参照できます。
URLは、http://<Selenium AESを起動しているマシン>:<設定ファイルのportで指定したポート番号>/selenium-server/autoexec/ になります。
下記は、Selenium AESを起動しているマシン上のブラウザで参照した場合(設定ファイルのportは指定なし(デフォルトの4444となる))のURLです。
http://localhost:4444/selenium-server/autoexec/
この画面は30秒毎に内容が更新されます。
各表示項目の内容は下記の通りです。
項目 | 内容 |
---|---|
status |
Selenium AESの状態です。
|
result |
テストの実行結果です。
|
number of cases |
テスト結果の内訳です。 結果毎のHTMLSuite(テストスイート)数と、HTMLSuiteの総数が表示されます。 |
start time | テストの開始時刻です。 |
end time | テストの終了時刻です。 |
HTMLSuite(テストスイート)毎の項目内容です。
項目 | 内容 |
---|---|
suite |
HTMLSuite(テストスイート)ファイル名です。 リンクを押下すると、テスト結果の詳細画面に遷移します。 |
browser | 実行ブラウザ名です。 |
status |
HTMLSuite(テストスイート)の状態です。
|
利用するメールサーバの設定により、設定ファイルに記載する項目が異なりますので、設定例をいくつか下記に記載します。
認証なしのSMTPの設定例です。
# サーバ名 mail.host=smtp.enjoyxstudy.com # ポート番号が25以外の場合は下記も設定する #mail.port=925 # 送信先アドレス mail.to=dev-ml@sample.enjoyxstudy.com # 送信元アドレス mail.from=report@sample.enjoyxstudy.com
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
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
CodeZineにも記事を書いています。
ver 1.2 (2011/08/02)
ver 1.1 (2010/11/24)
ver 1.0 (2009/09/25)
ver 0.5 (2009/04/13)
ver 0.4 (2008/11/30)
ver 0.3 (2008/11/07)
ver 0.2 (2008/07/04)
ver 0.1 (2008/06/02)
お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。