はじめに
本ドキュメントは、Webアプリケーション用のテストツールSelenium(セレニウム)を利用するための手順を解説するものです。
前回はSeleniumの機能概要について解説してきました。Seleniumを使用することで、ブラウザ操作を自動化して、Webアプリケーションの試験・検証を効率的に行うことができます。今回は、いよいよテストケースについての解説です。テストケースを実際に記述し、Seleniumでテストを実行してみます。
読者対象
プロジェクトの試験担当者を想定しています。
対象フェーズ
本ドキュメントではプロジェクトにおいて、作成したWebアプリケーションに対してブラウザを用いた試験(結合試験・総合試験)を実施するフェーズを対象としています。Webアプリケーションの製造、単体試験フェーズや、外部のアプリケーションに対する試験については対象外です。
使用したソフトウェア・環境
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 |
2006年5月14日にSelenium(Selenium Core)のバージョン0.7.0がリリースされました。本書ではSeleniumのバージョン0.7.0を使用しています。
カテゴリ | ソフトウェア | バージョン |
Selenium | Selenium Core | 0.7.0 |
Selenium IDE | 0.7.2 |
テストの環境としては、ローカルマシンにてWeb/APサーバ(Tomcat)を起動してテスト対象アプリケーションをデプロイしています。テスト対象のアプリケーションとして、プレゼンテーション層にStruts(1.2.7)を用いて作成されたJavaEE/Webアプリケーションを使用しました。
テストケースの書き方
基本書式
それではいよいよ実際にテストケースを書いていきましょう。
テストケースはhtmlのtableを利用して記述します。htmlのファイル名は自由に付けてかまいません。作成したhtmlファイルは、現状では任意の作業フォルダに保存してください。tableは、テスト名を表す1カラムの1行目と、具体的なテスト手順を記述した3カラムの複数行から構成されます。
テスト手順の1行は1手順を表し、3つの項目から構成されます。行の左から、コマンド、ターゲット、バリューです。
テスト名 | ||
コマンド1 | ターゲット1 | バリュー1 |
コマンド2 | ターゲット2 | バリュー2 |
コマンド3 | ターゲット3 | バリュー3 |
: | : | : |
htmlは次のようになります。
<html> <head><title>テスト名</title></head> <body> <table cellpadding="1" cellspacing="1" border="1"> <thead> <tr><td rowspan="1" colspan="3">テスト名</td></tr> </thead> <tbody> <tr> <td>コマンド1</td> <td>ターゲット1</td> <td>バリュー1</td> </tr> <tr> <td>コマンド2</td> <td>ターゲット2</td> <td>バリュー2</td> </tr> <tr> <td>コマンド3</td> <td>ターゲット3</td> <td>バリュー3</td> </tr> : </tbody> </table> </body> </html>
<thead>
、<tbody>
タグは無くてもかまいません。「MyTestCase01.html」の6行目で、1行目のテスト名を指定しています。1カラムなので3カラムを結合させています。
<tr><td rowspan="1" colspan="3">テスト名</td></tr>
次に、1行1手順を表す3カラムは11行目~15行目となります。
<tr> <td>コマンド1</td> <td>ターゲット1</td> <td>バリュー1</td> </tr>
例えば、次のような試験項目を考えてみます。
- 内容
- 手順
- ログイン画面のURLを開く
- IDのテキストボックスに社員番号xxxxxを入力
- パスワードのテキストボックスにyyyyyを入力
- ログインボタンを押す
- ログイン後のホーム画面に遷移したことを確認
その場合、以下のようなtableをhtmlで作成することになります。
ログインテスト | ||
URLを開く | ログイン画面のURL | |
入力 | ID | xxxxx |
入力 | パスワード | yyyyy |
クリック | ログインボタン | |
検証 | ホーム画面のtitle |
ターゲットやバリューに何を指定するかは、使用するコマンドによって変わってきます。Seleniumのコマンド詳細については「Selenium 0.7 日本語リファレンス」を参照してください。
まず、Seleniumのコマンドを構成する要素についてみていきましょう。
コマンド
コマンドにはAction
とAccessor
、Assertion
の3種類があります。
Action
コマンドはアプリケーションの状態を操作するものです。例えば、名前のフォームに入力したり、ボタンをクリックしたりといった動作を行います。多くのAction
コマンドは「AndWait」という接尾辞を付けることができます。「AndWait」接尾辞を付けた場合、Seleniumはそのコマンドを実行した後、アプリケーションがサーバ通信を行って新たなページがロードされるまで待ちます。
Accessor
コマンドは、アプリケーションの状態を検査して結果を変数に保存します。また、自動的にAssertion
コマンドを生成します。
Assertion
コマンドはアプリケーションの状態が期待しているものと合致しているか検証するものです。例えば「XXXXXという文字列が表示されているか」とか「このページのタイトルがYYYYであるか」といった検証を行います。すべてのAssertion
コマンドは3つの形式(接頭辞)があります。「assert」「verify」「waitFor」です。
assertが失敗した場合、テストは中止されます。verifyが失敗した場合は、失敗はログに記録されてテストは継続実施されます。waitForはいくつかの条件が満たされることを待ちます。waitForでは条件が既に満たされている場合は直ちに検証成功となります。しかし、現在のタイムアウト設定の時間内に条件が満たされなかった場合には検証失敗となり、テストを中止します。
Seleniumのコマンド詳細については「Selenium 0.7 日本語リファレンス」を参照してください。
ElementLocator
ElementLocatorとは、コマンドがどのHTML要素を参照するのかを指定するものです。多くのコマンドはElementLocatorをターゲットとして必要とします。
ElementLocatorの書式は次のとおりです。
locatorType=引数値
Seleniumでは、ElementLocatorとして以下のlocatorTypeに対応しています。
identifier
書式 | identifier=id 属性値またはname 属性値 |
id
属性で指定された要素を選択し、id
属性で合致するものがなければname
属性で指定された要素のうち最初に合致したものを選択します(これは通常デフォルトの動作です)。
id
書式 | id=id 属性値 |
id
属性で指定された要素を選択します。
name
書式 | name=name 属性値 |
name
属性で指定された要素のうち、最初に合致したものを選択します。また、valueやindexを組み合わせて条件を絞り込むことができます(element-filterと言います)。element-filterは空白区切りで指定します。これはselect
要素などで複数name
属性がある場合に有効です。
name=flavour value=chocolate name=flavour index=0
dom
書式 | dom=javascript表現法 |
HTML DocumentObjectModel(DOM)のJavascript Traversalモジュールを使って要素を見つけます。JavaScript表現法で指定するDOMのロケータはdocument.
で始まらなければなりません。
dom=document.forms['myForm'].myDropdown dom=document.images[56]
xpath
書式 | xpath=xpath表現 |
XPath表現を使用して要素の場所を特定します。XPath表現は//
で始まらなければなりません。
xpath=//img[@alt='The image alt text'] xpath=//table[@id='table1']//tr[4]/td[2]
link
書式 | link=リンクの文字列pattern |
指定された文字列patternと合致するテキストを含むリンク(anchor)要素を選択します。
link=The link text
ElementLocatorのprefix(locatorType)がない場合、Seleniumは以下のものと解釈して動作します。
ocument.
から始まっている場合 ……dom=
と解釈して動作//
から始まっている場合 ……xpath=
と解釈して動作- それ以外 ……
identifier=
と解釈して動作
文字列マッチングパターン
Seleniumでは、文字列のマッチングとして以下のパターン構文を利用することができます。
glob
書式 | glob:パターン文字列 |
glob
パターン(別名wildmat
パターン)での文字列マッチングです。glob
は一種の限定正規表現で、コマンドラインシェルで典型的に使用されます。*
は任意の複数の文字を表し、?
は任意の1文字を表します。glob
パターンは文字列全体に対してマッチングします。
regexp
書式 | regexp:正規表現 |
正規表現を用いた文字列マッチングです。JavaScriptの正規表現をフルに使用可能です。
exact
書式 | exact:文字列 |
ワイルドカードを使用せずに、正確に同一の文字列マッチングを行います。
マッチングパターンを示す「prefix(xxx:)」がない場合、Seleniumはglob
パターンであると仮定して動作します。