IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Java technology  >

テスト: Jameleonを使った理論的・計画的なWebアプリケーションのテストの実現

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 初級

加藤 大受, 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というディレクトリの中に次のようなディレクトリが作成されます。

ディレクトリ名格納されているもの
scriptsXMLスクリプトを格納
src/javaカスタムXMLタグを格納
dataデータセットを使ったテスト(データドリブンテスト)のためにCSVファイルを格納
resプロパティファイルを格納
libJameleonのライブラリファイル

プロパティファイルは使用するプラグインやテスト実行に関する設定を記述するファイルです。通常はすでに存在する初期値の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




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


この記事を共有する

はてなブックマーク はてなブックマーク livedoorクリップ livedoorクリップ del.icio.us del.icio.us Buzzurl(バザール) Buzzurl(バザール) Choix! Choix!
Saafブックマーク Saafブックマーク FC2ブックマーク FC2ブックマーク MM/memo MM/memo ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
CZブックマーク CZブックマーク newsing newsing




上に戻る


    日本IBMについて プライバシー お問い合わせ