はじめに
本稿は、Webアプリケーション用のテストツールSelenium(セレニウム)のTipsと、Excelを使ったDB初期化のノウハウを紹介するものです。Seleniumの基本的な使い方については、『Selenium 0.7利用手順書』(前編/後編)を参照してください。
読者対象
プロジェクトの試験担当者で、Seleniumの基本的な利用手順を既に習得している人を想定しています。
使用したソフトウェア・環境
Seleniumを動作させるにあたり、以下のソフトウェアを使用しました。本ドキュメントはこれらのソフトウェアを使用しているという前提で記述しています。
カテゴリ | ソフトウェア | バージョン | バージョン |
OS | Windows XP Professional | 2002 SP2 | 2002 SP2 |
JavaVM | JDK(JRE) | 1.4.2_10 | 1.5.0_06 |
Web/APサーバ | Tomcat | 5.0.28 | 5.5.16 |
RDBMS | MySQL | 4.1.16 | 4.1.16 |
IDE | Eclipse | 3.0.1 | 3.1.1 |
Eclipse plugin | sysdeo tomcat plugin | 3.0.0 | 3.1.0 |
ブラウザ | Internet Explorer(以下IE) | 6.0 SP2 | 6.0 SP2 |
使用したSeleniumのバージョンは次のとおりです。
カテゴリ | ソフトウェア | バージョン |
Selenium | Selenium Core | 0.7.0 |
Selenium tool | Selenium IDE | 0.7.2 |
テストの環境としては、ローカルマシンにてWeb/APサーバ(Tomcat)を起動してテスト対象アプリケーションをデプロイしています。テスト対象のアプリケーションとして、プレゼンテーション層にStruts(1.2.7)を用いて作成されたJavaEE/Webアプリケーションを使用しました。
テストケースの書き方 Tips集(1/2)
ここではテストケースの書き方のヒントや便利なコマンドの使い方などを紹介します。
openコマンドのURL指定
Seleniumでは、URLを指定して、html(JSP)を開いたり、サーブレットを起動したりできます。URLは絶対パス、相対パスのいずれも指定可能です。しかし、絶対パス指定だと、アプリを起動するマシン(IP)が限られてしまいます。
例えば、「http://localhost:8080/~」と指定した場合、自分のローカルマシンでしかテストを実行できません。172.16.0.1のサーバにデプロイしたアプリケーションに対して、リモートのPCからアクセスしてSeleniumでテスト実施する場合、ブラウザはテストケースで指定されたlocalhostを開こうとしてしまうため、localhostを172.16.0.1と書き換える必要があります。
<!-- ログイン画面を開く --> <tr> <td>open</td> <td>http://localhost:8080/MyApp/001_login.jsp</td> <td></td> </tr> : <!-- DB初期化サーブレットを起動する --> <tr> <td>open</td> <td>http://localhost:8080/SeleniumTest/dbinit?name=init_common</td> <td> </td> </tr>
従って、open
コマンドのURLは相対パス指定が良いでしょう。相対パスを使用した場合のホストとポートは、Seleniumの起動しているWebサーバのものになります(一般的な相対URLの動作と同じです)。
<!-- ログイン画面を開く --> <tr> <td>open</td> <td>/MyApp/001_login.jsp</td> <td></td> </tr> : <!-- DB初期化サーブレットを起動する --> <tr> <td>open</td> <td>/SeleniumTest/dbinit?name=init_common</td> <td> </td> </tr>
実行するURL(IPアドレス)を変更できるようにする
Seleniumで実行(open)するURLを、試験環境に合わせて変更できるようにする方法です。絶対パス指定としても、相対パス指定としても使うことができます。open
以外のコマンドでも使用することができるので、リンク(href
属性)の絶対パスが環境によって変化する場合の検証に最適です。
手順は次のとおりです。
1. user-extention.jsの拡張
globalエクステンションを以下のURLからダウンロードし、その記述を自分の「userextention.js」に追記します。
2. storeGlobalコマンドでbaseURL変数を設定するテストケースを作成する
テストケースのファイルに任意の名前を付けます。今回は「00_SetEnv.html」としました。テストケースの内容はstoreGlobal
コマンドだけでよく、storeGlobal
コマンドの引数には以下を設定します。
- ターゲット…設定値にベースとなるURLを指定する。環境を変える場合、ここを変えれば良い。
- バリュー…変数名(任意)を指定する。今回は
baseURL
とする。
<table cellpadding="1" cellspacing="1" border="1"> <thead> <tr><td rowspan="1" colspan="3">00 Set Environment Values</td></tr> </thead> <!-- 環境設定 --> <!-- ここにテストサーバのIP/ベースURLを指定する --> <tr> <td>storeGlobal</td> …【1】 <td>http://localhost:8080</td> …【2】 <!-- 他の環境の場合こちらを入れ替えて使用 <td>http://172.16.0.5</td> <td>http://172.16.0.99:8080</td> --> <td>baseURL</td> …【3】 </tr> </table>
storeGlobal
コマンドbaseURL
という名前の変数に値(URL)を保持。3. その他の各テストケースではbaseURL変数を使って記述
変数名は手順2で設定したものを使用し、${変数名}
と記述します。
<tr> <td>open</td> <td>${baseURL}/MyApp/001_login.jsp</td> …【1】 <td></td> </tr> <tr> <td>assertTitle</td> <td>MyApp -ログイン-</td> <td></td> </tr> <tr> <td>clickAndWait</td> <td>submit</td> <td></td> </tr>
${変数名}
で指定する。4. TestSuiteの先頭に手順2で作成したテストケースを含める
複数のTestSuiteでbaseURL
を設定する場合、変数(baseURL
)設定のテストケースはフォルダ構成上、各TestSuiteの上の階層に配置します。このようにすることで、複数のTestSuiteで変数設定テストケースを使いまわすことが可能になります。

<table border="1"> <tr><td>01_Login_TestSuite</td></tr> <tr><td> <a href="../00_SetEnv.html">00_Set Environment value</a> …【1】 </td></tr> <tr><td> <a href="./01_Login_Test_001.html">01_Login_Test_001 Normal login</a> …【2】 </td></tr> <tr><td> <a href="./01_Login_Test_002.html">01_Login_Test_002 Text count</a> </td></tr> </table>
TestRunner画面でTestSuiteを見ると次のようになります。

5. テストの実行
[Run All]でTestSuiteの全テストケースを実行する場合は、特に注意点はありません。個別のテストを実行する場合は、まず環境設定テストケースを実行(Selected)し、その後、対象のテストケースを実行します。設定されたbaseURL
変数はTestRunnerのウィンドウを閉じる(更新する)まで有効です。
storeGlobal
を使用するに当たって、以下の注意点があります。
- 通常は、外部URL(Seleniumをデプロイしているサーバ以外)を指定してもSeleniumが動作してくれません。例えば、ローカルPC上でSeleniumを起動して、リモートサーバ上のアプリに対して試験しようとした場合です。
- 環境設定テストケースを実行しないで、その他のテストケースを実行した場合、エラー(404)になります。
また、このbaseURL
変数の利用として以下の応用が可能です。
- 環境設定テストケースで値なしで設定すると、各テストケースでは相対パスとして扱われます。ただし、
href
属性の検証など絶対パスが必要な箇所では使えません(相対パスになってしまうので検証NGになってしまいます)。また、この場合も他のテストケース実行前に必ずこれを実行する必要があります。
<!-- 環境設定 --> <!-- ここにテストサーバのIP/ベースURLを指定する --> <tr> <td>storeGlobal</td> <td></td> …【1】 <td>baseURL</td> </tr>
テストケースにコメントを記述する
Seleniumのバージョン0.7.0から、テストケースのhtmlにコメントを記述することが可能になりました。コメントとして認識される記述方法は次のとおりです。
- 1カラムの行
- 4カラム目
<tr> <td>open</td> <td>/MyApp/001_login.jsp</td> <td></td> </tr> <tr><td rowspan="1" colspan="3">*** ログイン画面 ****</td></tr> …【1】 <tr> <td>assertTitle</td> <td>MyApp -ログイン-</td> <td></td> </tr> <tr> <td>type</td> <td>id</td> <td>047403</td> </tr> <tr> <td>type</td> <td>password</td> <td>hoge#55</td> <td>コメント</td> …【2】 </tr>
TestRunner画面では次のような見え方になります。
