レベル: 初級 加藤 大受, Writer, ITmedia
2007年 5月 18日 Jameleon 3.3-M4を使ってJameleonの機能を説明していきます。まずはサンプルスクリプトで行われている内容を解説した後、実際にテストスクリプトを作成してみましょう。
実際にJameleon 3.3-M4を使って、Jameleonの機能を説明したいと思います。かなりのボリュームになりますが、最後まで読み進めていただければ、Jameleonについてはひととおり理解できると思います。
なお、Jameleonを実行するにはJava環境が必要ですので、事前にJ2SEのSDKのインストールを済ませておいてください。ここではJ2SE 6.0のSDKがインストールされていることを前提に説明します。
Jameleon 3.3-M4の導入は、まずJameleon Test Suiteをダウンロードします。解凍すると、jameleon-test-suiteというディレクトリの中に次のようなディレクトリが作成されます。
| ディレクトリ名 | 格納されているもの |
|---|
| scripts | XMLスクリプトを格納 |
|---|
| src/java | カスタムXMLタグを格納 |
|---|
| data | データセットを使ったテスト(データドリブンテスト)のためにCSVファイルを格納 |
|---|
| res | プロパティファイルを格納 |
|---|
| lib | Jameleonのライブラリファイル |
|---|
プロパティファイルは使用するプラグインやテスト実行に関する設定を記述するファイルです。通常はすでに存在する初期値のEnvironment.propertiesファイルをそのまま利用することで問題ありません。
Jameleonでは、次のようなテストを作成することができます。
- JUnitプラグインを使ったホワイトボックスレベルのテスト。すべてのJUnitの機能タグはほかのプラグインの機能と一緒に利用可能
- Jiffieプラグインを使ったIEベースのテスト。このテストはWindows環境でのみ実行可能
- HtmlUnitプラグインを使ったブラウザベースのテスト。一部のJavaScriptsとXPathについてもサポートしている
- HTTPUnitプラグインを使ったブラウザベースのテスト。HtmlUnitプラグインではコンテンツベースでテストするのに対し、HTTPUnitではHTTPの通信ベース、つまりプロトコルベースのテストとなる。
- 3270(Jagacy)プラグインを使った3270ベースのIBMメインフレームで稼働するアプリケーションのテスト
プラグインとしては前記以外にもJWebUnitプラグインがありますが、これはセッションタグの機能を提供するために利用されているものです。
JameleonはこのようにさまざまなプラグインでWebアプリケーションのホワイトボックステストからブラックボックスレベルの機能テストまでサポートします。ただし、わたしとしてはJUnitなどのホワイトボックステストはEclipseなどの開発環境内から実行したいので、Jameleonは機能テストまたは回帰テストなどのブラックボックステストのツールとして利用するのがいいと思います。そこでこの記事では機能テストに話を絞ってJameleonを解説していきます。
なお、Jameleonのライセンスは、GNU Lesser General Public License(GNU LGPL)ライセンスで開発されていますが、Jameleon自体を開発しているアプリケーションに組み込んだりせずに、ただのテストツールとして利用するのであれば利用は問題ありません。
まずはサンプルを動かしてみよう
解凍後、scriptsフォルダ以下には、「htmlunit-sourceforge.xml」「httpunit-sourceforge.xml」「jiffie-sourceforge.xml」の3つのテストスクリプトがサンプルとして用意されています。それぞれHtmlUnitプラグイン、HttpUnitプラグイン、Jiffleプラグインを使ったものとなっています。
リスト1はJiffleプラグインを使ったjiffie-sourceforge.xmlです。このXMLファイルはApache Jakartaプロジェクトで利用されているJellyというJavaおよびXMLベースのスクリプトエンジンを利用したスクリプトファイルです。
まずはサンプルを動かしてみよう
<testcase xmlns="jelly:jameleon">
<test-case-summary>Tests searching on the sourceforege site</test-case-summary>
<test-case-author>Christian Hargraves</test-case-author>
<test-case-level>ACCEPTANCE</test-case-level>
<functional-point-tested>Jiffie Example</functional-point-tested>
<ie-session baseUrl="http://sourceforge.net" beginSession="true">
<ie-validate
functionId="Verify that we are on the sourceforge home page"
title="SourceForge.net: Welcome to SourceForge.net"
textPresent="Open Source Technology Group"/>
<ie-set-text-field
functionId="Enter jameleon into the search box."
name="words"
value="jameleon"
form="searchform"/>
<ie-click-button
functionId="Click on the 'Google Search' button."
form="searchform"
value="Search"
eventToFire="onclick"
functionDelay="300"/>
<ie-validate
functionId="Check that we actually did a search for 'Jameleon' and that
we found 'Jameleon'"
title="SourceForge.net: Software Search"
linkPresent="Jameleon"/>
<ie-click-link
functionId="Click on the 'Jameleon' link"
link="Jameleon"/>
<ie-validate
functionId="Validate that we arrived at the Jameleon SourceForge Page."
title="SourceForge.net: Jameleon"
linkPresent="engrean"/>
<ie-fire-event
functionId="Do a mouseover on the 'Project' tab"
htmlElement="li"
eventToFire="onmouseover">
<ie-attribute>
<ie-attribute-name>class</ie-attribute-name>
<ie-attribute-value>begin selected</ie-attribute-value>
</ie-attribute>
</ie-fire-event>
<ie-click-link
functionId="Navigate to the Jameleon site by clicking on the 'Home Page' link"
link="Web Site"/>
<ie-validate
functionId="Validate that we arrived at the Jameleon SourceForge Page."
title="Jameleon - An Automated Testing Tool - Overview"/>
</ie-session>
</testcase>
|
次に、このjiffie-sourceforge.xmlの内容を順に追うことで、Jameleonのテストスクリプトがどのようになっているのかを解説していきます。リスト1を印刷するなどして手元に置きながら読み進めるとよいでしょう。
<testcase xmlns="jelly:jameleon">
|
テストケースの始まりであり、書かれているのがJellyスクリプトであることを示しています。<testcase>タグには非常に多くのパラメータがあり、CSVファイルを利用したり、結果ファイルの場所を指定したりするときなどに設定します。ほとんどのパラメータの指定はjameleon.confに書かれており、初期値を変更するときにのみ、それらのパラメータを指定します。なお、traceパラメータを指定するとfunctionIdパラメータで指定されている文字列を結果ファイルに出力します。
その後に続く<test-case-summary>、<test-case-author>、<test-case-level>、<functional-point-tested>のタグは、テストスクリプトに関する情報を記載するためのタグです。
<ie-session baseUrl="http://sourceforge.net"
beginSession="true">
|
ここからが実際のテストの開始です。<ie-sesson>タグはJiffleプラグインを使ったセッションの開始を示しています。baseUrlパラメータはIEでアクセスするテストターゲットとなるURLを指定します。beginSessionパラメータはセッションを開始するかどうかを指定します。
functionId="Verify that we are on the sourceforge home page"
title="SourceForge.net: Welcome to SourceForge.net"
textPresent="Open Source Technology Group"/>
|
<ie-validate>タグはバリデーションポイントです。ここでは、アクセスしたSourceForge.Netのトップページのページタイトルとページ内に含まれる文字列を確認しています。functionIdパラメータはチェック内容の概要、つまりこのバリデーションポイントが何を目的としているかを示すための記述です。
続いてのtitleパラメータはページタイトルの期待結果です。このtitleパラメータの値と一致しなければテストは失敗となります。比較は部分一致です。testPresentはページ内の文字列に該当する文字列があるかどうかを調べるものです。このtestPresentパラメータに指定された文字列がない場合はテストは失敗となります。
<ie-set-text-field
functionId="Enter jameleon into the search box."
name="words"
value="jameleon"
form="searchform"/>
|
<ie-set-text-field>タグはファンクションポイントで、テキストボックスに値をセットするものです。前のバリデーションポイントと同様に、functionIdはこのファンクションポイントの説明です。nameパラメータに設定する対象のテキストボックスの名称を指定します。valueパラメータには設定する値を指定します。formパラメータは設定対象のテキストボックスが存在するフォームオブジェクトの名称を指定します。値を設定するテキストボックスが存在しなかったり、テキストボックスが書き込み不可の場合はテストは失敗となります。このファンクションポイントでは、searchformフォームオブジェクト内のwordsという名称のテキストボックスにjameleonという文字列を入力しているわけです。
<ie-click-button
functionId="Click on the 'Google Search' button."
form="searchform"
value="Search"
eventToFire="onclick"
functionDelay="300"/>
|
<ie-click-button>タグはナビゲーションポイントで、指定されたボタンをクリックして画面遷移を行います。ここではsearchformフォームオブジェクト内のSearchという文字列のボタンをクリックします。クリック後300ミリ秒待ちます。eventToFileはJavaScriptsのイベント名称です。ここではボタンのテキスト文字列でボタンオブジェクトを指定していますが、nameパラメータを指定してボタンオブジェクトの名前を指定することもできます。
<ie-validate
functionId="Check that we actually did a search for 'Jameleon' and that
we found 'Jameleon'"
title="SourceForge.net: Software Search"
linkPresent="Jameleon"/>
|
このバリデーションポイントでは、遷移されたページが、「SourceForge.net: Software Search」というページタイトルであり、linkPresentパラメータでJameleonという文字列のリンクがあるかどうかをチェックしています。
<ie-click-link
functionId="Click on the 'Jameleon' link"
link="Jameleon"/>
|
<ie-click-link>タグはナビゲーションポイントであり、Jameleonというリンクをクリックします。指定された文字列のリンクがないときは失敗となります。
<ie-validate
functionId="Validate that we arrived at the Jameleon SourceForge Page."
title="SourceForge.net: Jameleon"
linkPresent="engrean"/>
|
このバリデーションポイントは、直前のJameleonというリンクをクリックするナビデーションポイントによる動作の結果、期待するページが表示されているかどうかを確認するためのもので、「SourceForge.net: Jameleon」というページタイトルで、ページ内にengreanというリンクが存在するかどうかを確認しています。
<ie-fire-event
functionId="Do a mouseover on the 'Project' tab"
htmlElement="li"
eventToFire="onmouseover">
<ie-attribute>
<ie-attribute-name>class&tl;/ie-attribute-name>
<ie-attribute-value>begin selected&tl;/ie-attribute-value>
</ie-attribute>
</ie-fire-event>
|
<ie-fire-event>タグはファンクションポイントで、eventToFireパラメータで指定されたJavaScriptsのイベントを発生させます。ここではhtmlElementパラメータで指定されたHTMLタグの種類に対し、<ie-attribute-name>タグで属性を、<ie-attribute-value>タグでその属性の値を設定しています。ここではHtmlタグの<LI>タグで、begin selectedというスタイルシートで定義されたものに対して、mouseoverのイベントを実行しています。つまり、Projectタブにマウスポインタを置き、Pojectタブのメニューを表示できるかを確認しているということです。
<ie-click-link
functionId="Navigate to the Jameleon site by clicking on the 'Home Page' link"
link="Web Site"/>
|
このナビゲーションポイントでは、以前のファンクションポイントで表示したProjectタグのメニュー内の「Web Site」というリンクをクリックします。
<ie-validate
functionId="Validate that we arrived at the Jameleon SourceForge Page."
title="Jameleon - An Automated Testing Tool - Overview"/>
|
このバリデーションポイントは、以前のナビゲーションポイントによって遷移したページが「Jameleon - An Automated Testing Tool - Overview」というページタイトルであることを確認しています。
</ie-session>
</testcase> |
Jiffleプラグインを使ったセッションの終了とテストケースの終了です。これで1つのテストケースが終了したことになります。このサンプルスクリプトのテストケースをまとめてみると表1のようになります。
| 順序 | 種類 | 内容 |
|---|
| 1 | バリデーションポイント | SourceForge.netのトップページの確認 |
|---|
| 2 | ファンクションポイント | wordsテキストボックスに“Jameleon”をセット |
|---|
| 3 | ナビゲーションポイント | Searchボタンを実行 |
|---|
| 4 | バリデーションポイント | “SourceForge.net: Software Search”の表示。“Jameleon”のリンクがあるか |
|---|
| 5 | ナビゲーションポイント | “Jameleon”のリンクをクリック |
|---|
| 6 | バリデーションポイント | “SourceForge.net: Jameleon”というページタイトルのページかどうか。engreanのリンクがあるか |
|---|
| 7 | ファンクションポイント | Projectタブが選択されているか |
|---|
| 8 | ナビゲーションポイント | “Web Site”のリンクをクリック |
|---|
| 9 | バリデーションポイント | “Jameleon - An Automated Testing Tool - Overview”というページタイトルのページかどうか |
|---|
表1. テストスクリプトの流れ。テスト対象のURLはhttp://sourceforge.net
スクリプトの実行
では、解説したテストスクリプトを実行して、テストケースを確認してみましょう。テストスクリプトを実行するには、Jameleon GUIを起動します。図1はJameleon GUIを起動したところです。ここで、右側のペインからJiffle-sourceforge.xmlを選択します。選択後、人が走っているデザインの実行ボタンを押せば、指定されたテストスクリプトが実行されます。
図1. Jameleon GUI
スクリプトが実行されると、Jameleonのバリデーションポイントで確認されたポイントやファンクションポイントで入力されたオブジェクトがピンク色で囲まれながら実行されていきます。図2~図4はテストスクリプトの実行途中の画面です。Jameleon.confファイルのfunctionDelayのコメントをはずし、値を大きくすると、ゆっくりと実行され、テスト内容を目視でも確認することができます。テストスクリプトを作成し、確認作業を行うときは目視も重要視してください。
図2 テキストボックスに文字列を挿入したところ
拡大図
図3 Jameleonのリンクの存在を確認したところ
拡大図
図4 ProjectタブへのonMouseOverイベントの実行とengreanのリンクの確認
拡大図
テストが終了すると、図5のようにテスト結果がJameleon GUIに表示されます。詳細なテスト結果はjameleon_test_results/jiffie-sourceforge/doc以下に、結果ドキュメントのHTMLファイル、ここではjiffie-sourceforge.htmlが作成されます(図6)。
図5. テスト結果
図6. テスト結果ドキュメント
実行結果はコンソールにも次のように出力されます。
Beginning Session: "net.sf.jameleon.plugin.jiffie.IESessionTag"
Begin: starting application
End: starting application
BEGIN: Verify that we are on the sourceforge home page
SUCCEEDED: Verify that we are on the sourceforge home page
BEGIN: Enter jameleon into the search box.
SUCCEEDED: Enter jameleon into the search box.
BEGIN: Click on the 'Google Search' button.
SUCCEEDED: Click on the 'Google Search' button.
BEGIN: Check that we actually did a search for 'Jameleon' and that we found 'Jameleon'
SUCCEEDED: Check that we actually did a search for 'Jameleon' and that we found 'Jameleon'
BEGIN: Click on the 'Jameleon' link
SUCCEEDED: Click on the 'Jameleon' link
BEGIN: Validate that we arrived at the Jameleon SourceForge Page.
SUCCEEDED: Validate that we arrived at the Jameleon SourceForge Page.
BEGIN: Do a mouseover on the 'Project' tab
SUCCEEDED: Do a mouseover on the 'Project' tab
BEGIN: Navigate to the Jameleon site by clicking on the 'Home Page' link
SUCCEEDED: Navigate to the Jameleon site by clicking on the 'Home Page' link
BEGIN: Validate that we arrived at the Jameleon SourceForge Page.
SUCCEEDED: Validate that we arrived at the Jameleon SourceForge Page.
Ending Session: "net.sf.jameleon.plugin.jiffie.IESessionTag"
jiffie-sourceforge PASSED
|
もちろん、Jameleon GUIを利用することなくコマンドラインでテストスクリプトを実行できますし、Jameleon GUIで複数のテストスクリプトを実行することも可能です。
テストスクリプトを書いてみよう
では、実際にjeffleプラグインを使ってテストスクリプトを書いてみましょう。ここでは、次回のMercury intractive社のQuickTest Professional(以下、QTPと表記)でも同じテストケースを作成し、今回のJameleonとの比較を見てみるために、QTPに付属するサンプルアプリケーションである「Mercury Tours」のWebサイトを利用してみたいと思います。ただし、WebサイトのURLはここでは掲載しないものとします。
図7. テスト対象となるWebアプリケーション「Mercury Tours」
まずはテストケースを設計します。今回は非常に簡単な次の操作をテスト対象とします。
「Mercury Tours」のWebサイトへアクセス
↓
Flightを見つけるためにログインする
↓
Flight Finderページにて、行き4月1日、戻り4月10日で、LondonからNew Yorkのフライトをビジネスクラスで航空会社を指定せずに探す
↓
SELECT FLlGHTページにて、行きに5:03発Blue Skies Airlines 360、戻りに12:23発のBlue Skies Airlines 630があることを確認する
この流れを先ほどの表1と同様に流れを書いてみると表2のようになります。ナビゲーションポイントの次には必ずバリデーションポイントを入れて、表示されているページが正しいかどうかを確認する必要があります。
| 順序 | 種類 | 内容 |
|---|
| 1 | バリデーションポイント | 「Mercury Tours」のWebサイトの確認 |
|---|
| 2 | ファンクションポイント | ログイン処理のためにログイン情報をセットする |
|---|
| 3 | ナビゲーションポイント | Sign-Inボタンでログイン |
|---|
| 4 | バリデーションポイント | Flight Finderページであることを確認 |
|---|
| 5 | ファンクションポイント | 行き4月1日、戻り4月10日で、LondonからNew Yorkのフライトをビジネスクラスで航空会社を指定 |
|---|
| 6 | ナビゲーションポイント | CONTINUEボタンを押して検索の実行 |
|---|
| 7 | バリデーションポイント | SELECT FLIGHTページであり、行きに5:03発 Blue Skies Airlines 360、戻りに12:23発のBlue Skies Airlines 630があることを確認する |
|---|
表2 作成するテストスクリプトの流れ
では、この流れに合わせてスクリプトを書いていきましょう。テキスト入力や画面遷移は説明しましたので、説明していないパスワード入力、リストボックス、イメージボタン、ラジオボタンの検証用のタグだけを説明しておきます。パスワードのテキストボックスは<ie-setpassword-field>タグを利用します。使い方は<ie-set-text-field>とほとんど変わりません。次のように書きます。
<ie-set-password-field
functionId="パスワードを入力"
name="password"
value="jameleon"
form="home"/>
|
リストボックスは<ie-set-select-field>タグを利用します。optionValueパラメータにHTMLの<select>タグのoptionValueパラメータの値を設定するか、optionTextパラメータに同じくoptionTextパラメータの値を設定すると指定できます。例えば出発日では次のように設定しています。
<ie-set-select-field
functionId="出発地の設定"
name="fromPort"
optionValue="London"
form="findflight"/>
|
イメージボタンを利用するには、<ie-click-html-element>タグを利用し、<ie-attibute>タグでINPUTタグのパラメータを指定します。今回のケースでは"CONTINUE"というイメージボタンのクリックを次のように記述しています。
<ie-click-html-element
functionId="飛行機の検索処理を実行"
htmlElement="input"
functionDelay="300">
<ie-attribute>
<ie-attribute-name>type</ie-attribute-name>
<ie-attribute-value>image</ie-attribute-value>
</ie-attribute>
<ie-attribute>
<ie-attribute-name>src</ie-attribute-name>
<ie-attribute-value>continue.gif</ie-attribute-value>
</ie-attribute>
</ie-click-html-element>
|
最後に、ラジオボタンの検証ですが、これは<ie-validate-radiobutton>タグを利用します。選択されている値をvalueパラメータに設定します。今回のケースでは次のようになります。
<ie-validate-radiobutton
functionId="行き:Blue Skies Airlines 360がチェックされていることを確認する"
name="outFlight"
value="Blue Skies Airlines$360$270$5:03"
form="results"/>
|
図8~図10は作成したスクリプトを実行したところです。作成したスクリプトが正常に動作していることがピンクの枠で分かるでしょう。
図8. ログイン処理の実行
図9. 飛行機の検索
図10 検索結果の確認
最後に、ここで作成したテストスクリプトファイルを示すとともに、今回のまとめを行います。
リスト2 作成したテストスクリプトファイル(MercuryTourSample.xml)
<testcase <testcase xmlns="jelly:jameleon">
<test-case-summary>Mercury ToursでのFlightsの検索</test-case-summary>
<test-case-author>加藤 大受</test-case-author>
<test-case-level>ACCEPTANCE</test-case-level>
<functional-point-tested>Jameleonのjiffieプラグインのサンプル</functional-point-tested>
<ie-session baseUrl="http://xxxxxxxxxxxxxxxx" beginSession="true">
<ie-validate
functionId="Mercury ToursのWebサイトへの確認"
title="Welcome: Mercury Tours"
linkPresent="Flights" />
<ie-set-text-field
functionId="ユーザー名を入力"
name="userName"
value="jameleon"
form="home"/>
<ie-set-password-field
functionId="パスワードを入力"
name="password"
value="jameleon"
form="home"/>
<ie-click-button
functionId="ログイン処理を実行"
form="home"
value="Login"
eventToFire="onclick"
functionDelay="300"/>
<ie-validate
functionId="'Flight Finder'ページであることを確認する"
title="Find a Flight: Mercury Tours:"
textPresent="Flight Finder"/>
<ie-set-select-field
functionId="出発地の設定"
name="fromPort"
optionValue="London"
form="findflight"/>
<ie-set-select-field
functionId="行きの月の設定"
name="fromMonth"
optionValue="4"
form="findflight"/>
<ie-set-select-field
functionId="行きの日の設定"
name="fromDay"
optionValue="1"
form="findflight"/>
<ie-set-select-field
functionId="到着地の設定"
name="toPort"
optionValue="New York"
form="findflight"/>
<ie-set-select-field
functionId="戻りの月の設定"
name="toMonth"
optionValue="4"
form="findflight"/>
<ie-set-select-field
functionId="戻りの日の設定"
name="toDay"
optionValue="10"
form="findflight"/>
<ie-set-radiobutton
functionId="ビジネスクラスの設定"
name="servClass"
value="Business"
form="findflight"/>
<ie-click-html-element
functionId="飛行機の検索処理を実行"
htmlElement="input"
functionDelay="300">
<ie-attribute>
<ie-attribute-name>type</ie-attribute-name>
<ie-attribute-value>image</ie-attribute-value>
</ie-attribute>
<ie-attribute>
<ie-attribute-name>src</ie-attribute-name>
<ie-attribute-value>continue.gif</ie-attribute-value>
</ie-attribute>
</ie-click-html-element>
<ie-validate
functionId="'SELECT FLIGHT'ページであることを確認する"
title="Select a Flight: Mercury Tours"
textPresent="London to New York"/>
<ie-validate-radiobutton
functionId="行き:Blue Skies Airlines 360がチェックされていることを確認する"
name="outFlight"
value="Blue Skies Airlines$360$270$5:03"
form="results"/>
<ie-validate-radiobutton
functionId="'戻り:Blue Skies Airlines 630がチェックされていることを確認する"
name="inFlight"
value="Blue Skies Airlines$630$270$12:23"
form="results"/>
</ie-session>
</testcase>
|
※Webサイトのアドレスは無効なアドレスに変えてあります。
まとめ
Jameleonはホワイトボックスのテストも可能ですが、ブラックボックスのテストツールとしてWebアプリケーションの機能テストを行うのが便利でしょう。作成したスクリプトをスモークテストとしてビルドプロセスの中に組み込むことで、ビルドのたびに最低限の品質を確認することができ、前ビルドから品質低下が起きていないかをすぐに判断することができます。
Jameleonにはまだ記録機能がありませんが、すでにSelenium用のプラグインも開発されております。Seleniumのテスト記録を利用できるようになれば、より簡単に機能テストや回帰テストの自動化が実現できるようになるでしょう。また、次の機能テストツールとして有名なQTPを使ったケースと比較してみるのもいいかもしれません。
参考文献
著者について  | |  | 加藤大受,ITmedia |
記事の評価
|