Selenium Auto Exec Server(AES)

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連携

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

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

結果メール送信

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

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

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

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

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

テスト実行API

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

Hudson用にプラグインも用意されています。

また、コマンドラインなどからSelenium AESのAPIを実行できるように、クライアントとなるjarも提供しています。

HTMLSuite(テストスイート)の複数指定

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

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証明書で警告が出る場合に、本オプションを指定しないとエラーとなります。

テストケース、HTMLSuite(テストスイート)の配置

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の起動

Selenium AESを起動します。

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

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

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

テストの実行

テストは下記のように様々な方法で実行することができます。

(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/

TOPページ

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

(C) Hudsonと連携

CIツールであるHudsonからSelenium AESを起動するために、プラグインを提供しています。

プラグインはHudsonのプラグインアップデートセンターからインストールできます。


プラグインを使用すると、ビルド手順として、Selenium AESの実行が追加できます。

そして、Selenium AESの実行結果も、Hudson上で参照できるようになります。

Hudson

(D) クライアント用のjarを使ってコマンドラインから実行

クライアント用の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/

(E) JUnitとして実行

クライアント用の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>

(F) APIから実行

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/

TOPページ

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

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

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

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

項目 内容
suite HTMLSuite(テストスイート)ファイル名です。
リンクを押下すると、テスト結果の詳細画面に遷移します。
browser 実行ブラウザ名です。
status HTMLSuite(テストスイート)の状態です。
  • 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

参考記事

CodeZineにも記事を書いています。


変更履歴

ver 1.2 (2011/08/02)

  • Selenium RC バージョン2.2.0 対応。

ver 1.1 (2010/11/24)

  • Selenium RC バージョン1.0.3 対応。

ver 1.0 (2009/09/25)

  • Selenium RC バージョン1.0.1 対応。

ver 0.5 (2009/04/13)

  • Selenium RC バージョン1.0beta2 対応。

ver 0.4 (2008/11/30)

  • trustAllSSLCertificatesオプション対応。

ver 0.3 (2008/11/07)

  • Selenium RC バージョン1.0beta1 対応。
  • Firefox3対応。
  • 子ディレクトリ毎のテストスイート作成機能追加。
  • クライアントからの実行方法改善。
  • 過去のテスト結果を保持するよう変更。
  • テスト開始前、終了後のコマンド実行機能を追加。
  • ブラウザ上からのテスト実行で、たまにブラウザ上にエラーが表示される問題対処。

ver 0.2 (2008/07/04)

  • firefoxProfileTemplateオプション対応。

ver 0.1 (2008/06/02)

  • 初回公開。


その他

お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。