本実施の形態の動作検証システムについて説明する前に、その前提となる動作検証装置に係る参考技術1、参考技術2、および参考技術3について説明する。
(参考技術1)
図1(a)は、ポータルサイト第1画面300の画面図である。
参考技術1においては、ポータル・サイト「XYZ!」を対象とした動作テストについて説明する。ポータルサイト第1画面300は、エディットボックス302と検索リンク304を含む。検索リンク304は、「ウェブ」、「ブログ」、「画像」、「辞書」という4つのリンクを含む。ユーザがエディットボックス302に文字列を入力し、検索リンク304のうちのいずれかをマウス・クリックすると、入力文字列の検索が開始される。たとえば、エディットボックス302に文字列「液晶」と入力し、リンク「ウェブ」をマウス・クリックした場合、文字列「液晶」を含むウェブサイトが検索対象となる。エディットボックス302に文字列「液晶」と入力し、リンク「ブログ」をマウス・クリックした場合には、このポータル・サイトに開設されているブログ(Weblog)のうち、文字列「液晶」を含むブログページが検索対象となる。
ここでは、エディットボックス302に文字列「テスト」が入力され、リンク「辞書」がマウス・クリックされたとする。
図1(b)は、ポータルサイト第2画面310の画面図である。
ポータルサイト第1画面300にて、「テスト」を入力し、「辞書」をマウス・クリックすると、図1(b)に示すポータルサイト第2画面310が表示される。検索結果欄306には、このポータル・サイトが提供している「辞書」サービスにより、文字列「テスト」に関連する項目が羅列される。
ここで、検索結果欄306の1番上にあるリンク「テスト(test)」がマウス・クリックされたとする。
上記過程においては、以下に示す3つの操作がなされている。
A1.ポータルサイト第1画面300のエディットボックス302に文字列「テスト」を入力する操作。
A2.ポータルサイト第1画面300の検索リンク304のうち、リンク「辞書」をマウス・クリックする操作。
A3.ポータルサイト第2画面310の検索結果欄306のうち、リンク「テスト(test)」をマウス・クリックする操作。
以下においては、上記A1〜A3の操作により実現される動作過程のことを、「辞書テスト」とよぶ。
図2は、辞書テストを実行したときのログ320を示す図である。
HP社のQTPが導入されているクライアント端末を操作して、上記ポータル・サイトにアクセスし、A1〜A3の操作を実行した場合、QTPは図2に示すログ320を生成する。ログ320には、操作A1〜A3が所定フォーマットの符合文として記録される。
たとえば、操作A1は、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
という符号文にて表現される。これは、"XYZ!"というウェブ・サイト、"XYZ!"という名前のウェブページ、pという名前のエディットボックス(図1(a)、図1(b)に示すエディットボックス302に相当する)に対して、文字列「テスト」が入力されたことを意味している。
同様にして、操作A2は、
Browser("XYZ!").Page("XYZ!").Link("辞書").Click
操作A3は、
Browser("XYZ!").Page("XYZ!-すべての辞書-テスト").Link("テスト(test)").Click
という符号文にて表示される。参考技術1においては、QTPの文法に基づいて説明するが、符合文のフォーマットはこれに限られるものではない。
QTPは、ログ320の符合文を解釈しながら、符合文により表現される操作を再現実行できる。このため、いったんログ320を生成すれば、同一内容の辞書テストを何度でも繰り返し実行できる。また、ログ320の一部を書き換えれば、手動操作時とは異なる内容にて辞書テストを実行できる。たとえば、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
に含まれる文字列「テスト」を別の文字列「テイスト」に変更し、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テイスト"
と書き換えてQTPに入力すれば、エディットボックス302への入力文字列だけ変更した同内容の辞書テストを自動実行できる。
しかし、ログ320を書き換えながら動作テストを実行するには、ログ320の文法に関してある程度の知識が必要である。また、ログ320の書き換えに際し、人為的なミスが発生する可能性がある。
図3は、辞書テストを実行するためのプログラム330を示す図である。
ログ320により動作テストを実行する代わりに、ログ320と同等の内容をVB(Visual Basic)スクリプト等で記述することにより、テスト・プログラムを作成してもよい。図3に示すプログラム330は、図2のログ320を参照しつつ作成されたテスト・プログラムである。
たとえば、操作A1は、
WebEditSet(Browser("XYZ!").Page("XYZ!").WebEdit("p"),DataTable("p1,dtGlobalSheet")
というVB関数により表現される。WebEditSet関数の具体的なロジックは、同図中段に記述されている通りである。
プログラム330、文字列「テスト」のような入力データをプログラム330中に含まない点においてログ320と異なる。代わりに、WebEditSet関数は、dtGlobalSheetとして表現されるファイル(以下、「入力データファイル」とよぶ)から入力データを受け取る。すなわち、ロジックと入力データが分離されることになる。入力データファイルの書き換えや取り替えにより、さまざまな入力データに基づいて同一ロジックの辞書テストを実行できる。手動による動作テストやログ320による動作テストに比べて、プログラム330による動作テストは、入力データのバリエーションを増やしやすいというメリットがある。
ただし、プログラム330による動作テストには、以下の問題点がある。
d1.プログラムを作成する手間が新たに発生する。
d2.プログラム作成者によって、プログラムの内容が変化する。たとえば、プログラマP1が操作A1に対応して作成するWebEditSet関数と、プログラマP2が操作A1に対応して作成するWebEditSet関数は、関数名は同じでもロジックが同一になるとは限らない。また、プログラム自体にバグが混入する可能性がある。このため、プログラム330自体の信頼性を担保するための取り組みが必要となる。また、プログラム330には、例外処理等、動作テストとは直接関係しないロジックも必要であるが、全てのプログラマが例外処理まで考慮したロジックを実装するとは限らない。たとえば、図3に示すWebEditSet関数の場合、入力データが空文字の場合にも対応できるようにロジックが組まれているが、別のプログラマがWebEditSet関数を実装する場合には、こういった配慮が欠如するかもしれない。
結果として、プログラマのスキルが動作テストの内容・結果に影響を及ぼしやすくなってしまう。
図4は、動作検証装置100の機能ブロック図である。
本明細書のブロック図が示す各機能ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組み合わせによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、各機能ブロックは、コンピュータプログラムとして記録媒体に格納され、情報処理装置のハードディスクにインストールされ、適宜メインメモリに読み出されてプロセッサにより実行されてもよい。
動作検証装置100は、専用ハードウェアとして形成されてもよいし、ウェブブラウザなどのユーザインタフェースと連携するソフトウェア・モジュールとして形成されてもよい。
参考技術1の動作検証装置100とは、QTPのアドオンとして形成されるソフトウェア・モジュールであるとして説明する。
動作検証装置100は、IF(インタフェース)部110、データ処理部130およびデータ保持部140を含む。
IF部110は、ユーザやQTPとのインタフェースを担当する。データ処理部130は、IF部110やデータ保持部140から取得されたデータを元にして各種のデータ処理を実行する。データ処理部130は、IF部110とデータ保持部140との間のインタフェースの役割も果たす。データ保持部140は、各種データを保持するための記憶領域である。
IF部110:
IF部110は、入力部112と出力部118を含む。入力部112はユーザやQTPからの入力処理を担当し、出力部118はユーザやQTPに対する出力処理を担当する。入力部112は、ログ取得部114と入力データ取得部116を含む。ログ取得部114は、QTPからログを取得する。入力データ取得部116は、入力データファイルを取得し、入力データファイルからプログラムに提供する入力データを取得する。入力データファイルの詳細については、図5や図9に関連して詳述する。
出力部118は、関数設定画面表示部120、入力設定画面表示部122、プログラム画面表示部124およびケース設定画面表示部126を含む。関数設定画面表示部120は、図7に示す関数設定画面210を表示させる。入力設定画面表示部122は、図9に示す入力設定画面230を表示させる。プログラム画面表示部124は、図8に示すプログラム画面220を表示させる。ケース設定画面表示部126は、図10に示すケース設定画面240を表示させる。
データ処理部130:
データ処理部130は、プログラム生成部132、プログラム実行部134およびテストケース登録部136を含む。プログラム生成部132は、動作テスト用のプログラムを自動的に生成する。プログラム実行部134は、生成されたプログラムを実行させる。参考技術1においては、QTPにプログラムを実行させる。テストケース登録部136は、実行セットをケースファイルに登録する。実行セットおよびケースファイルについては図10に関連して詳述する。
データ保持部140:
データ保持部140は、ログ保持部142、プログラム保持部144、入力データファイル保持部146、ケースファイル保持部148、関数保持部150および結果保持部152を含む。ログ保持部142は、ログを保持する。プログラム保持部144は、プログラムを保持する。入力データファイル保持部146は、入力データファイルを保持する。ケースファイル保持部148は、ケースファイルを保持する。関数保持部150は、動作テスト用のプログラムに登録される関数について、関数ライブラリを保持する。結果保持部152は、動作テストの結果を保持する。
図5は、参考技術1において、ログを取得して動作テストを実行するまでの概要図である。
まず、動作テストの対象となる機器を手動操作する。参考技術1においては、クライアント端末のウェブブラウザを操作して、ポータル・サイト「XYZ!」にアクセスする。QTPはログを生成し、ログ取得部114はQTPからログを取得する。各種符合文にはあらかじめ関数が対応づけられている。関数設定画面表示部120は、関数保持部150の関数ライブラリを読み出し、ログに含まれる各符号文に対応する関数を一覧表示させる(S1)。関数設定画面表示部120において、ユーザは、適宜、関数を追加・変更・削除できる。こうして、プログラムに含まれるべき関数が特定される。S1については、図7に関連して後に詳述する。
次に、このプログラムに供給すべき入力データを設定する(S2)。設定内容は、入力データファイルとして登録される。S2については、図9に関連して後に詳述する。S1で設定された関数群からプログラムを自動生成する(S3)。S3については、図8に関連して後に詳述する。
次に、複数種類のプログラムおよび複数種類の入力データファイルから、プログラムと入力データファイルの組合せを「実行セット」として登録する。実行セットは複数個登録することもできる(S4)。設定内容は、ケースファイルとして登録される。たとえば、プログラムP1を入力データファイルF2に基づいて実行したあと、プログラムP2を入力データファイルF6に基づいて実行させたい場合、
実行セット1:プログラムP1+入力データファイルF2
実行セット2:プログラムP2+入力データファイルF6
としてケースファイルに登録される。S4については、図10に関連して詳述する。
最後に、ケースファイルにしたがって、プログラムを実行する(S5)。上記例の場合には、プログラム実行部134は、実行セット1と実行セット2を連続実行させる。プログラム実行部134は、プログラムの実行結果、いいかえれば、テスト結果を結果保持部152に登録する。
図6は、ログ画面200の画面図である。
ログ取得部114がログを取得すると、出力部118はログ画面200におけるログ表示領域202にログを画面表示させる。ユーザは、QTPのログをログ表示領域202にコピー&ペーストしてもよい。あるいは、出力部118は、ログ画面200の表示時において、QTPが生成したログ(ファイル)を取得し、ログ表示領域202に画面表示させてもよい。ユーザが実行ボタン204をマウス・クリックすると、次の図7に示す関数設定画面210が表示される。
図7は、関数設定画面210の画面図である。
プログラム生成部132は、ログに含まれる符号文について関数を特定し、関数設定画面210の関数欄214に特定した関数を一覧表示させる。番号欄212は実行順序、説明欄216は関数の概要説明、オブジェクト欄218は操作対象オブジェクト、パラメータ欄219はパラメータ名、入力値欄217は入力データを示す。
先述の操作A1を示す符合文、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
には、あらかじめ、WebEditSet関数が関数ライブラリにおいて対応づけられている。プログラム生成部132はログ320の1番目の符合文を読み出すと、関数保持部150の関数ライブラリを参照し、WebEditSet関数を特定する。操作A1が操作対象とするオブジェクトは、「Browser("XYZ!").Page("XYZ!")」のページであるため、オブジェクト欄218には、「Browser("XYZ!").Page("XYZ!")」が設定される。WebEditSet関数は、エディットボックスp(エディットボックス302)に設定される入力データを引数とする関数である。入力値欄217において、エディットボックスpに設定すべき入力データを設定することもできるが、関数設定画面210では入力データを登録しないものとして説明する。エディットボックスpに設定すべき入力データは、図9に関連して詳述する入力設定画面230にて設定される。
ログ320には操作A1〜A3に対応して3つの符合文が含まれているため、プログラム生成部132は3つの関数を特定する。ユーザは、関数設定画面210にて、関数を追加・削除・変更してもよい。図7における4番目のTextCheck関数と5番目のWebScreenCapture関数は、ユーザが追加選択した関数である。
TextCheck関数は、表示中のウェブページにおいて、変数qに代入される文字列が含まれているかを判定する関数である。WebScreenCapture関数は、表示中のウェブページを画面キャプチャする関数である。動作テストの結果を証跡管理する上で、WebScreenCapture関数は便利な関数である。このように、関数ライブラリには、WebEditSet関数のようにユーザの操作に対応した関数だけでなく、TestCheck関数のように動作テストを補助・支援するための関数も用意されている。ユーザは、関数ライブラリから所望の関数を選択するだけで、動作テストに含めたいロジックを設定できる。
テストケース設定ボタン215がクリックされると、図10のケース設定画面240が表示される。入力データファイル作成ボタン213がクリックされると、図9の入力設定画面230が表示される。プログラム作成ボタン211がクリックされると、図8のプログラム画面220が表示される。
参考技術1の動作検証装置100には、以下のメリットがある。
m1.GUI(Graphical User Interface)ベースで関数を選択するだけで、プログラムに含めたいロジックを選択できる。プログラムを作成するための手間がほとんどかからない。
m2.プログラムに含まれる関数は、関数ライブラリとして登録済みの関数であるため、作成者によってプログラムの品質がばらつきにくい。例外処理等の必要なロジックも、あらかじめ各関数に組み込まれている。
図8は、プログラム画面220の画面図である。
関数設定画面210において、プログラム作成ボタン211がマウス・クリックされると、プログラム生成部132がプログラムを生成し、プログラム画面表示部124はプログラム画面220におけるプログラム表示領域222にそのソースコードを表示させる。プログラムは、プログラム保持部144に保持される。
図9は、入力設定画面230の画面図である。
関数設定画面210において、入力データファイル作成ボタン213がマウス・クリックされると、入力設定画面表示部122は入力設定画面230を表示させる。関数設定画面210においては、パラメータpとqが定義されている。番号欄232は入力順序、変数欄234はパラメータpへの入力データ、変数欄236はパラメータqへの入力データを示す。入力設定画面230では、このパラメータpとqに代入する入力データを設定する。各入力データは、入力データファイルとして入力データファイル保持部146に保持される。
たとえば、プログラム330に、図9に示す形式の入力データファイルを与えると、
1.文字列「テスト」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
2.文字列「test」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
3.文字列「テストケース」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
・・・のように、異なる入力データに基づく複数の辞書テストを連続実行できる。
図10は、ケース設定画面240の画面図である。
関数設定画面210において、テストケース設定ボタン215がマウス・クリックされると、ケース設定画面表示部126はケース設定画面240を表示させる。番号欄244は実行順序、実行セット欄245は実行セットの概要、プログラム欄246は実行対象となるプログラム、入力データファイル欄247は入力データの抽出対象となる入力データファイルを示す。
ここでは、インターネット証券のウェブ・サイトを動作テストの対象として説明する。
同図においては、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが登録されている。まず、QTPは、プログラム「login.vbs」から「login」プロジェクトを生成する。ここでいう「プロジェクト」とは、QTPの実行形式ファイル群を含むディレクトリである。QTPは「login」プロジェクトを入力として、login.vbsとlogin.xlsに定義された処理を実行する。ユーザが実行ボタン248をマウス・クリックすると、最初に、実行セット「ログイン」の「login」プロジェクトが実行される。1番目の実行セット「ログイン」が完了すると、実行セット「ニュースチェック」として、「ncheck」プロジェクトが実行される。
このように、実行ボタン248がマウス・クリックされると、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが連続実行される。これにより、「ログインして、ニュースをチェックした後、手持ち株と手持ち債券の売りを指示し、住所変更をした上で、ログアウトする」というテスト・シナリオに基づく動作テストを自動化できる。
ユーザは、ケース設定画面240において自由にテスト・シナリオを作ることができる。たとえば、実行セット「株売り」の代わりに実行セット「株買い」を登録してもよいし、実行セット「株売り」の入力データファイルとして「stock1.xls」ではなく別の入力データファイルを登録してもよい。ケース設定画面240において登録されたテスト・シナリオはケースファイルとして記録され、ケースファイル保持部148に保持される。
テスト・シナリオの構成や入力データファイル等を少しずつ変化させることにより、動作テストのバリエーションを広げやすくなる。
以上、参考技術1の動作検証装置100を説明した。
動作検証装置100によれば、プログラムと入力データ、すなわち、処理とパラメータを分離できる。そして、そのためのプログラムをGUIベースの設定に基づき自動生成できる。これにより、プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの内容を変更するだけで、動作テストの内容を変更できるため、動作テストのバリエーションを広げやすくなる。
更に、実行セットをケースファイルに登録してテスト・シナリオを作ることにより、既存のプログラムを組合せながら、さまざまな状況における動作テストを実現できる。また、WebEditSet関数のようなテスト対象機器を操作するための関数だけでなく、WebScreenCapture関数のような動作テストを支援するための関数を用意しておくことにより、動作テストの効率や信頼性をいっそう向上させやすくなる。
(参考技術2)
参考技術2では、上記の参考技術1を改良した動作検証装置100を提案する。
まず、参考技術1における動作検証装置100と、参考技術2の動作検証装置100とを比較しつつ、参考技術2の動作検証装置100についてその概要を説明する。
図11は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける構成の概要を示す。図11(a)が示すように、参考技術1の動作検証装置100は、動作テストの実行エンジンであるQTPモジュール102と、QTPモジュール102を使用したウェブサーバ400の動作テストを効率化するためのラッパーモジュール104とを備えた。このラッパーモジュール104には、図4で示した各機能ブロックが含まれる。
図11(a)において、ユーザは、QTPモジュール102を介して、動作確認の対象装置であるウェブサーバ400を操作する(S100)。ラッパーモジュール104は、その操作内容が記録されたログをQTPモジュール102から取得して、関数設定画面210をユーザに提供した(S102)。ユーザは、動作テスト実行の際、QTPモジュールが読み込み可能な動作テスト用プログラムをラッパーモジュール104において生成させ、QTPモジュール102にそのプログラムを実行させた(S104)。
これに対して、図11(b)が示すように、参考技術2の動作検証装置100は、動作テストの実行エンジンの機能とラッパーモジュール104の機能とが統合された統合検証モジュール106を備える。ユーザが統合検証モジュール106を介してウェブサーバ400を操作すると(S200)、統合検証モジュール106はその操作内容を逐次検出して関数設定画面210のデータを設定し、関数設定画面210をユーザに提供する(S202)。ユーザは、動作テスト実行の際、統合検証モジュール106において動作テスト用プログラムを生成させて実行させる(S204)。
図12は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける動作の概要を示す。図12(a)は、参考技術1の動作検証装置100における動作の概要を示している。ユーザはウェブサーバ400に対するデータ入力操作を実行し(S110)、QTPモジュール102はその操作内容が記録されたログを出力する(S112)。ユーザはそのログのデータをQTPモジュール102の所定の入力エリアにコピーする(S114)。ラッパーモジュール104は所定の入力エリアに設定されたログのデータに基づいて関数設定画面を設定して表示させ(S116)、ユーザはその関数設定画面を介して追加・変更すべき関数・入力データを設定する(S118)。
ラッパーモジュール104は、関数設定画面のデータに基づいて、動作テストのためのQTP用プログラムを生成する(S120)。ユーザは、QTP用プログラムをQTPモジュール102の所定の入力エリアにコピーする(S122)。ユーザは、ケース設定画面において、QTP用プログラムと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S124)。ラッパーモジュール104は、そのシナリオに基づいて、QTP用プログラムと入力データファイルのセットをQTPモジュール102に渡して、セット毎に動作テストを実行させる(S126)。
図12(b)は、参考技術2の動作検証装置100における動作の概要を示している。ユーザは、ウェブサーバ400に対するデータ入力操作を実行する(S210)。統合検証モジュール106は、そのデータ入力操作を逐次検出して、データ入力操作に対応する関数を操作内容ファイルに記録し、その操作内容ファイルの記録データを関数設定画面において表示する(S212)。ユーザは、その関数設定画面を介して追加・変更すべき関数・入力データを操作内容ファイルに設定する(S214)。そしてユーザは、ケース設定画面において、操作内容ファイルと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S216)。統合検証モジュール106は、そのシナリオに基づいて、シナリオ内の1以上のセットを集約した動作テスト用プログラムを生成して実行する(S218)。
このように、参考技術1の動作検証装置100では、QTPモジュール102とラッパーモジュール104とが分離していた。したがって、両モジュールを連係させるために、ユーザ自身が仲介作業を実行する必要があった。また、ラッパーモジュール104はシナリオ内のセット毎にQTPモジュール102をコールして、テスト用プログラムをセット毎に実行させる必要があった。
これに対して、参考技術2の動作検証装置100では、動作テストの実行エンジンと、その効率的な利用を実現するラッパーとが分離されることなく、シームレスに統合されている。したがって、参考技術1の動作検証装置100と比較すると、分離したモジュールを連係させるために必要であったユーザの作業が不要になり、動作テストのためのユーザの作業量が低減する。また、シナリオ内の複数のセットが集約された動作テスト用プログラムが生成され、そのプログラムの実行により一連のシナリオが実行されるため、迅速な動作テストが実現される。
図13は、参考技術2の動作検証装置100の機能構成を示すブロック図である。同図の機能ブロックは、図11(b)で示した統合検証モジュール106に含まれる。参考技術2の機能ブロックのうち、参考技術1の機能ブロックに対応する機能ブロックには、同じ符号を付している。参考技術1の機能ブロックと同じ符号を付した機能ブロックについてはその機能が参考技術1に既述した内容と異なる場合に記載しており、同様の機能についてはその記載を省略する。
データ保持部140は、操作内容ファイル保持部143と、プログラム保持部144と、入力データファイル保持部146と、ケースファイル保持部148と、関数保持部150とを有する。操作内容ファイル保持部143は、動作テスト用プログラムに設定すべき関数が記録される操作内容ファイルを記憶する。プログラム保持部144は、操作内容ファイルにしたがって生成された動作テスト用プログラムを記憶する。
IF部110の入力部112は、操作検出部115とユーザ設定受付部117とを有する。操作検出部115は、ウェブサーバ400に対するユーザのデータ入力操作を逐次検出する。ユーザ設定受付部117は、関数設定画面210、入力設定画面230、ケース設定画面240に対するユーザによる設定情報を検出する。
IF部110の出力部118は、関数設定画面表示部120と入力設定画面表示部122とケース設定画面表示部126とを有する。関数設定画面表示部120は、操作内容ファイル保持部143に記録された操作内容ファイルの内容を表示する関数設定画面210を所定の表示装置に表示させる。
データ処理部130は、プログラム生成部132と、プログラム実行部134と、テストケース登録部136と、操作記録部137と、入力データ記録部138とを有する。操作記録部137は、関数保持部150を参照して、操作検出部115において検出されたデータ入力操作に対応する関数を特定し、その関数を操作内容ファイルに記録する。また操作記録部137は、関数設定画面210に対するユーザの設定情報を操作内容ファイルに記録する。入力データ記録部138は、入力設定画面230を介してユーザが入力した入力データを入力データファイルに記録する。プログラム生成部132は、操作内容ファイルに記録された関数に応じて動作テスト用プログラムを生成する。プログラム実行部134は、動作テストの実行エンジンとして、動作テスト用プログラムを実行し、その結果を結果保持部152に記録する。
図14は、参考技術2において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。まず、ユーザはクライアント端末のウェブブラウザを操作してウェブサーバ400にアクセスし、ウェブサーバ400に対する各種操作、典型的にはウェブサーバ400が提供するウェブページに対するデータ入力操作を実行する。操作検出部115はユーザによるデータ入力操作を逐次検出し、操作記録部137は関数保持部150の関数ライブラリを読み出し、そのデータ入力操作に対応する関数を操作内容ファイルに逐次記録する(S220)。
次に、関数設定画面表示部120は、操作内容ファイル保持部143の操作内容ファイルを読み出し、ユーザによる操作に対応する関数を一覧表示する関数設定画面を表示させる。関数設定画面において、ユーザは、適宜、関数を追加・変更・削除でき、また、動作テスト用プログラムに静的に設定すべき入力データを設定できる。こうして、動作テスト用プログラムに含まれるべき関数が特定される。関数設定画面については、図15および図16に関連して後述する。
次に、入力設定画面表示部122は、入力設定画面230を表示させる。ユーザは、入力設定画面230を介して、動作テストの実行時に動作テスト用プログラムに対して動的に供給されるべき入力データを設定する。ユーザにより設定された入力データは、入力データファイルに記録される(S222)。入力設定画面230については、図17に関連して後述する。
次に、ケース設定画面表示部126は、ケース設定画面240を表示させる。ユーザは、複数種類の操作内容ファイルおよび複数種類の入力データファイルから、操作内容ファイルと入力データファイルとの組み合わせを実行セットとして登録する。テストケース登録部136は、1以上の実行セットをケースファイルに記録する(S224)。例えば、テストケース1において、操作内容ファイルF01の設定内容を入力データファイルF12に基づいて実行させた後、操作内容ファイルF02の設定内容を入力データファイルF16に基づいて実行させる場合、
テストケース1:
実行セット1:操作内容ファイルF01+入力データファイルF12
実行セット2:操作内容ファイルF02+入力データファイルF16
としてケースファイルに登録される。ケース設定画面240については、図18に関連して後述する。
次に、プログラム生成部132は、ケースファイルおよび操作内容ファイルに基づいて動作テスト用プログラムを生成する(S226)。具体的には、実行セットに設定された操作内容ファイルに順次記録された関数を、動作テスト用プログラムのプログラムコードに順次設定してもよい。また、プログラム生成部132は、1つのテストケースに複数の実行セットが設定されている場合、各実行セットの操作内容ファイルに記録された関数を1つの動作テスト用プログラムに集約して設定する。
また、プログラム生成部132は、操作内容ファイルの関数に対して入力データそのものが設定されていた場合には、その入力データを動作テスト用プログラムに静的に設定する。例えば、動作テスト用プログラムの生成の際に、そのプログラムコードにおける関数の引数として入力データをあらかじめ設定する。また、操作内容ファイルの関数に対して入力データファイルが指定されていた場合には、その入力データファイルのデータをプログラム実行時に読み込むように設定する。
最後に、プログラム実行部134は、動作テスト用プログラムを実行して、ウェブサーバ400に対してユーザにより実行された一連の操作を再現する(S228)。入力データファイルのデータを必要とする関数に対しては、動作テスト用プログラムの実行の際に読み込んだ入力データファイルのデータを引数として渡す。すなわち、入力データファイルから動的に取得した入力データに基づいて関数を実行する。
図15は、関数設定画面210の画面図である。同図は、図18で後述する「検索記入.xls」を表示する関数設定画面210を示している。データファイルカラム名欄250は、パラメータに設定する入力データを記録した入力データファイルのカラム名が指定される領域である。ユーザは、入力値欄217に入力データそのものを記述してもよく、その代わりに、データファイルカラム名欄250に入力データファイルのカラム名を指定してもよい。データファイルカラム名欄250に入力データファイルのカラム名が指定された場合、動作テスト用プログラムの実行時に、その入力データファイルのカラムに設定された1以上の入力データが読み込まれて関数に渡される。
図16は、参考技術2における関数設定画面210の画面図である。同図の「検索部署名」パラメータの入力値欄217においては、入力データの候補がドロップダウンリスト252で一覧表示されている。ドロップダウンリスト252において表示される入力データの候補は、ウェブページに対するユーザによるデータ入力の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補である。ユーザはドロップダウンリスト252から入力データを選択することができ、入力データの設定におけるユーザの負担が軽減される。
ドロップダウンリスト252を設定するために、操作検出部115は、ウェブページに対するユーザによるデータ入力操作の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補を取得する。例えば、ウェブサーバ400から取得されたウェブページのデータ、例えばHTMLデータからドロップダウンリストにおける入力データの候補を取得する。操作記録部137は、その入力データの候補を操作内容ファイルの入力値欄217に記録する。関数設定画面表示部120は、入力値欄217が入力される際に、操作内容ファイルに記録された入力データの候補をドロップダウンリストの形式で一覧表示させる。
図17は、参考技術2における入力設定画面230の画面図である。図17(a)は、図15および図16の関数設定画面210においてカラム名が指定された入力データファイル「検索記入データ.xls」を表示する入力設定画面230を示している。なお、図15および図16では、図17(a)の「氏名漢字」カラムと「氏名カナ」カラムとが指定されている。図17(b)は、別の入力データファイル「ログインデータ2.xls」を表示する入力設定画面230を示している。同図の入力データファイルについては、図18に関連して後述する。
図18は、参考技術2におけるケース設定画面240の画面図である。実行番号欄253には各実行セットの基本的な実行順序、テストケースID欄254にはテストケースの識別情報が設定される。グループID欄256には実行セットの繰り返し処理のグループを示す識別情報、行番号欄258には動作テストにおける入力データファイルの参照範囲が設定される。操作内容ファイル欄260は各実行セットにおける操作内容ファイル、入力データファイル欄262は各実行セットの入力データファイルが設定される。ケース設定画面240における設定内容は、ケースファイル保持部148においてケースファイルとして記憶される。
ケース設定画面240においてテスト実行ボタン264が押下されると、プログラム生成部132は、ケースファイルおよび操作内容ファイルにしたがって動作テスト用プログラムを生成する。具体的には、ケースファイルにおいて同一のテストケースIDが設定された1以上の操作内容ファイルに基づいて、各操作内容ファイルに記録された関数がプログラムコードに設定された1つの動作テスト用プログラムを生成する。例えば、プログラム生成部132は、図18のケース設定画面240の内容が記録されたケースファイルにしたがって、登録ケースを実行するための1つの動作テスト用プログラムと、検索ケースを実行するための1つの動作テスト用プログラムとを生成する。なお、「1つの動作テスト用プログラム」は、1つの実行単位として実行されるプログラム、言い換えれば1つの実行契機で実行されるプログラムを意味し、物理的なプログラム数は問わない。
プログラム実行部134は、各操作内容ファイルに記録された1つの関数を実行する際、その操作内容ファイルと対応づけられた入力データファイルのデータのうち、操作内容ファイルにおいてその関数と対応づけられたカラムのデータをその関数に渡す。
また、プログラム実行部134は、同一のテストケースにおいて同一のグループIDが付与された複数の実行セットを、同一の繰り返し処理を実行すべき同一のグループとして取り扱う。具体的には、同一のグループIDが付与された複数の実行セットそれぞれの実行を繰り返し、繰り返しのたびに、各実行セットの操作内容ファイルに記録された関数に対して、入力データファイルに記録された所定数のレコードを渡す。参考技術2では、繰り返しのたびに入力データファイルに記録された1レコードを関数に渡すこととする。なお、上述の処理を実行するための繰り返し命令がプログラムコードに設定された動作テスト用プログラムを、プログラム生成部132おいて生成してもよい。
また、プログラム実行部134は、行番号が指定された実行セットについては、その操作内容ファイルに記録された関数に対して、入力データファイルにおいてその行番号で特定される入力データを渡す。したがって、グループIDによる繰り返し処理が指定され、さらに行番号が指定された場合には、行番号の指定数だけその繰り返しを実行することになる。例えば、図18の登録ケースでは、実行セットをまたがったグループの設定はなく、各実行セットでは入力データ1個分の処理が実行される。これに対し、図18の検索ケースでは、各実行セットにおける入力データ1個分の処理が3回繰り返される。
具体的には、1回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの35行目のデータ「t_yamada」が渡される。そして、検索記入.xlsに記録された関数、具体的には図15のNo1の関数に対しては検索記入データ.xlsの1行目・氏名漢字のデータ「山田太郎」が渡される。また、図15のNo2の関数に対しては検索記入データ.xlsの1行目・氏名カナのデータ「ヤマダタロウ」が渡される。
2回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの36行目のデータ「h_yamada」が渡される。そして、検索記入.xlsに記録された図15のNo1の関数に対して検索記入データ.xlsの2行目・氏名漢字のデータ「山田花子」が渡される。また、図15のNo2の関数に対して検索記入データ.xlsの2行目・氏名カナのデータ「ヤマダハナコ」が渡される。
3回目の繰り返しにおいても同様に、インクリメントされた行番号における入力データが各関数に渡されることになる。
参考技術2の動作検証装置100においても、参考技術1で既述した効果を奏する。具体的には、処理とパラメータの分離、および、GUIベースの設定が実現されるため、動作テスト用プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの設定によって、動作テストのバリエーションを広げやすくなる。さらに、ケースファイルの設定によって、様々なシナリオにおける動作テストを実現できる。
参考技術2の動作検証装置100においては、さらに、動作テスト用プログラムを実行する実行エンジン機能と、実行エンジンの効率的な利用を実現するラッパー機能とがシームレスに、ユーザによる仲介を要することなく連係する。これにより、動作テストを実行するためのユーザの負担を軽減できる。また、参考技術1の動作検証装置100の場合と異なり、ユーザは、QTPのプロジェクト等、プログラム実行のための環境を意識する必要がない。すなわち、ユーザにとって理解・操作が容易な形式の操作内容ファイルと入力データファイルとを設定すればよい。これにより、ユーザは動作テストを容易に実施できるようになる。
参考技術2の動作検証装置100においては、さらにまた、同一テストケースの複数の実行セットが集約された1つの動作テスト用プログラムが生成され、その1つの動作テスト用プログラムが実行される。参考技術1の動作検証装置100における実行セット毎、すなわち実行セットに基づき生成されたQTPのプロジェクト毎の実行と比較して、1つのテストケースにおける一連の動作テストを実行する際のオーバーヘッドが低減され、迅速な動作テストを実現できる。
参考技術2の動作検証装置100においては、さらにまた、複数の実行セットに亘る繰り返しのグループを設定できる。これにより、実行セットを柔軟に分割でき、また、動作テストのシナリオを柔軟に設定できる。さらにまた、入力データファイルの参照範囲を設定できる。これにより、入力データファイルが同一であっても、シナリオに応じて柔軟に参照範囲を変更でき、様々なバリエーションの動作テストを容易に実現できる。
上述した参考技術2においては、関数設定画面210における値設定を支援する例としてドロップダウンリスト252を示した。変形例においては、ウェブページにおけるラジオボタン、チェックボックス、リストボックス等で選択可能に表示された入力データの候補が、ドロップダウンリスト252またはその他の形式で関数設定画面210において選択可能に表示されてもよい。すなわち、動作確認対象の機器に対するデータ入力操作の際にユーザに対して様々な形式で選択可能に表示された入力データの候補が、関数設定画面210における値設定の際に選択可能に表示されてもよい。
上述した参考技術1においては、ウェブサーバ400に対するユーザの操作をQTPが受け付け、ログを生成したことを条件として、動作検証装置100が動作テスト用プログラムを作成している。また、上述した参考技術2においては、ウェブサーバ400に対するユーザの操作を動作検証装置100が検出して、動作テスト用プログラムを作成している。変形例として、動作検証装置100においてウェブサーバ400からHTMLファイルを取得した時点で、動作テスト用プログラムを生成してもよい。この場合、動作検証装置100は、HTMLファイルに含まれるフォームタグを検索し、HTMLファイルにどのような入力インタフェースが含まれているかを特定する。そして、各入力インタフェースにデータを入力するための関数を選択し、これらの関数をさまざまな順序で並べれば、ユーザによる明示的なウェブ操作がなくても、動作テスト用のプログラムを生成できる。
(参考技術3)
まず参考技術3の概要を説明する。
現在、数多くのウェブブラウザが公開されており、ユーザのPCにおいても様々な種類のウェブブラウザが使用されている。したがって動作検証装置としては、複数種のウェブブラウザによるウェブページの動作テストをサポートできることが望ましい。この場合、動作検証装置は、ウェブブラウザの仕様に応じてウェブブラウザを操作する必要があり、そのアーキテクチャは以下の2つに大別される。なお、動作テストの対象となるウェブページを、以下では「テスト対象ページ」とも称する。
方式1.外部からの操作:
ウェブブラウザが外部に公開するAPI(Application Programming Interface)、すなわちウェブブラウザに表示中のテスト対象ページへの入力操作を受け付けるインタフェース(以下、「操作IF」とも呼ぶ)を呼び出すことにより、ウェブブラウザを外部から操作する。参考技術3の操作IFは、具体的には、テスト対象ページに対してデータを入力し、またテスト対象ページのフォームを実行させ、またウェブサーバに対するGETリクエストやPOSTリクエストを送信させるための関数である。
方式2.内部からの操作:
テスト対象ページへの入力操作を受け付けて、その入力操作をウェブブラウザに実行させるスクリプト文書(以下、「制御コード」とも呼ぶ)を、テスト対象ページのプログラムコード(すなわちHTML文書)に対して追記する。そして、その制御コードを呼び出すことにより、ウェブブラウザを内部から操作する。言い換えれば、ウェブブラウザに表示されたウェブページに予め埋め込まれたスクリプト文書によってそのウェブブラウザを操作する。
参考技術3の制御コードは、テスト対象ページへの入力操作を外部から受け付けるインタフェース機能を含む関数が記述されたプログラムコードである。また、テスト対象ページのDOMツリーを操作することによりテスト対象ページの表示内容を更新する機能や、ウェブサーバに対するGETリクエストやPOSTリクエストを送信する機能を含む関数が記述されたプログラムコードでもある。なお制御コードは、所定のスクリプト言語(例えば、JAVAスクリプト(「JAVA」は登録商標))で記述されてもよい。
図19は、ウェブブラウザに対する2つの操作方式の特徴を示す。同図は、外部からの操作方式と内部からの操作方式とを比較したものである。最重要と想定される動作テストそのものの信頼性については、内部からの操作方式はテスト対象ページを書き換えるものであるため、外部からの操作方式の方が優れるといえる。その一方で適合性および汎用性については、外部からの操作方式はウェブブラウザにおける操作IFに依存するものであるため、内部からの操作方式の方が優れるといえる。
そこで参考技術3では、動作テストに使用するウェブブラウザの操作IFが公開されている場合はウェブブラウザを外部から操作し、操作IFが非公開である場合はウェブブラウザを内部から操作する動作検証装置を提案する。これにより、動作テストの信頼性をベストエフォートで確保しつつ、様々な種類のウェブブラウザによる動作テストをサポートできる。
図20は、ウェブブラウザに対する2つの操作方式について機能間の呼び出し関係を模式的に示す。ウェブサーバ400は、テスト対象ページを提供する情報処理装置である。ブラウザ402で総称されるブラウザA402a、ブラウザB402b、ブラウザC402c、ブラウザD402dは、HTTPユーザエージェントとして機能するウェブブラウザであり、テスト対象ページの表示処理・操作処理等を実行する。なお、同図のブラウザA402aおよびブラウザB402bはその操作IFを外部に公開し、ブラウザC402cおよびブラウザD402dはその操作IFを非公開とするものである。
個別ブラウザ用エンジン404で総称されるブラウザA用エンジン404aとブラウザB用エンジン404bとのそれぞれは、ブラウザA402aとブラウザB402bそれぞれの操作IFを呼び出すプログラムコードである。共通IF406は、複数種のブラウザ402それぞれの操作IFを呼び出すためのインタフェースであり、複数種のブラウザ402それぞれで異なる操作IFに依存しない共通形式のインタフェースを備えるプログラムコードである。個別ブラウザ用エンジンドライバ408で総称されるブラウザA用エンジンドライバ408a、ブラウザB用エンジンドライバ408bは、ブラウザ402の種類に依存しない共通IF406形式のデータを、ブラウザ402ごとに異なる操作IF形式のデータへ変換することにより、動作テスト用プログラムと個別ブラウザ用エンジン404とをブリッジする。
プロキシサーバ410は、ブラウザ402の代理として、ウェブサーバからテスト対象ページを取得するリバースプロキシとして機能する。プロキシサーバ410は、テスト対象ページへ制御コードを追加した後、そのテスト対象ページをブラウザC402cおよびブラウザD402dへ提供する。内部操作エンジン412は、プロキシサーバ410を介して、テスト対象ページに付加された制御コードを呼び出す。内部操作エンジンドライバ414は、共通IF406形式のデータを、制御コードを呼び出すための所定形式のデータへ変換することにより、動作テスト用プログラムと内部操作エンジン412とをブリッジする。
図20の動作を説明する。テスト対象ページを表示するウェブブラウザがブラウザA402a、またはブラウザB402bである場合、動作テスト用プログラムは共通IF406をコールする。それに伴って、個別ブラウザ用エンジンドライバ408・個別ブラウザ用エンジン404を介して、ウェブブラウザの操作IFがコールされることにより、ウェブブラウザが操作され、テスト対象ページへの入力操作が実現される。
一方で、テスト対象ページを表示するウェブブラウザがブラウザC402c、またはブラウザD402dである場合、プロキシサーバ410はテスト対象ページに制御コードを追加して、そのテスト対象ページをウェブブラウザに表示させる。この場合も動作テスト用プログラムは共通IF406をコールし、内部操作エンジンドライバ414・内部操作エンジン412・プロキシサーバ410を介して、テスト対象ページに付加された制御コードが呼び出される。これにより、ウェブブラウザの操作IFを介することなくウェブブラウザが操作され、テスト対象ページへの入力操作が実現される。
図20の構成によれば、個別ブラウザ用エンジンドライバ408および内部操作エンジンドライバ414によりウェブブラウザのインタフェースの差異が吸収される。これにより、動作テスト用プログラムは、ウェブページの動作テストで使用するウェブブラウザ(以下、「テスト実行ブラウザ」とも呼ぶ)の種類によらず、常に共通IF406を呼び出すことでテスト実行ブラウザを操作できる。言い換えれば、同一の動作テスト用プログラムにより、複数種のウェブブラウザによる動作テストを自動実行させることができる。
図21は、参考技術3の動作検証装置の機能構成を示すブロック図である。同図の機能ブロックのうち、参考技術1および2で示した動作検証装置100の機能ブロックに対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術1および2に既述した内容と異なる場合に記載しており、同様の機能については既述であるため適宜その記載を省略する。
動作検証装置100は、図13で示した機能ブロックに加え、ブラウザ処理部160をさらに備える。ブラウザ処理部160は、図20のブラウザ402に対応し、ウェブブラウザとして機能する。なお、単一の動作検証装置100が複数種のブラウザ処理部160を備えてもよいことはもちろんである。
プログラム実行部134は、動作テスト用プログラムの実行に際し、テスト実行ブラウザの種類、言い換えれば、ブラウザ処理部160の態様に応じて、外部からの操作方式または内部からの操作方式を選択してブラウザ処理部160を操作する。図22は、図21のプログラム実行部134の詳細を示すブロック図である。プログラム実行部134は、テスト主体選択部162と、外部操作実行部164と、プロキシ処理部166と、内部操作実行部168と、証左物設定部170とを含む。
テスト主体選択部162は、テスト実行ブラウザの種類を示す情報、言い換えれば、ブラウザ処理部160における操作IFの公開状況を示す情報を所定の設定ファイルや動作テスト用プログラムから取得し、その情報にしたがって動作テストの実行主体を決定する。例えば、各種ウェブブラウザとそれぞれの操作IFの公開状況とを対応づけたテーブルを参照して、テスト実行ブラウザにおける操作IFの公開状況を特定してもよい。
テスト主体選択部162は、ブラウザ処理部160が操作IFを外部に公開するものである場合、動作テストの実行主体として後述する外部操作実行部164を選択する。その一方で、ブラウザ処理部160が操作IFを外部に非公開とするものである場合、動作テストの実行主体として後述するプロキシ処理部166および内部操作実行部168を選択する。
外部操作実行部164は、図20の個別ブラウザ用エンジン404に対応し、動作テスト用プログラムの実行に際し、動作テスト用プログラムによる共通IF406の呼び出しを検出する。そして、ブラウザ処理部160が公開する操作IFを呼び出すことにより、ブラウザ処理部160を操作して、テスト対象ページに対する入力操作を実行する。
プロキシ処理部166は、図20のプロキシサーバ410に対応し、ブラウザ処理部160から要求されたテスト対象ページをウェブサーバ400から代理取得し、テスト対象ページのHTMLコード内に制御コードを挿入する。そして改変後のテスト対象ページのHTMLコードをブラウザ処理部160へ送出して表示させる。またプロキシ処理部166は、後述する内部操作実行部168から制御コードの呼び出しを受け付け、テスト対象ページに追加した制御コードを呼び出す。プロキシ処理部166とテスト対象ページとの通信は、XMLHttpRequestによる非同期通信として実装されてもよい。
内部操作実行部168は、図20の内部操作エンジン412に対応し、動作テスト用プログラムの実行に際し、動作テスト用プログラムによる共通IF406の呼び出しを検出する。そして、プロキシ処理部166を介して、テスト対象ページに追加された制御コードを呼び出すことにより、ブラウザ処理部160を操作して、テスト対象ページに対する入力操作を実行する。なお、プロキシ処理部166および内部操作実行部168は、テスト自動化ツールとして公開されているSelenium(http://seleniumhq.org/)のライブラリを用いて実装されてもよい。
証左物設定部170は、外部操作実行部164または内部操作実行部168からの要求に応じて、動作テストの結果を証明するデータ(以下、「証左物」とも呼ぶ)を設定し、その証左物を結果保持部152へ格納する。証左物として、ブラウザ処理部160によりディスプレイに表示されたテスト対象ページの画面スナップを取得し、また、ウェブサーバ400とのHTTP通信で送受されるデータを取得してもよい。なお、画面スナップの取得機能は、動作検証装置100のオペレーティングシステム(以下、「OS」とも呼ぶ。)により提供されてもよく、HTTP通信データの取得機能は、動作検証装置100にインストールされたパケットキャプチャソフトにより提供されてもよい。
以上の構成による動作を以下説明する。
図23は、動作検証装置100の動作を示すフローチャートである。同図は、動作検証装置100において動作テスト用プログラムが実行される際の動作を示すものである。例えば、図12におけるS218の詳細を示すものであり、図14におけるS228の詳細を示すものでもある。
テスト対象ページの動作テストの開始時、テスト主体選択部162は、ブラウザ処理部160における操作IFの公開状況に応じて、動作テストの実行エンジンを選択する(S300)。ブラウザ処理部160は、ウェブサーバ400に対してテスト対象ページの提供を要求する(S302)。ブラウザ処理部160において操作IFが非公開である場合(S304のN)、プロキシ処理部166は、テスト対象ページを代理取得して、そのHTMLコードへ制御コードを追加した後、テスト対象ページをブラウザ処理部160へ送出する(S306)。操作IFが公開されていれば(S304のY)、S306はスキップされる。ブラウザ処理部160は、テスト対象ページを所定のディスプレイに表示させる(S308)。証左物設定部170は、テスト対象ページの画面スナップを取得する等、動作テストの証左物を設定して結果保持部152へ格納する(S310)。
動作テストで実行すべき全操作が実行済であれば(S312のY)、本図のフローを終了する。未実行の操作が残っており(S312のN)、ブラウザ処理部160において操作IFが公開されている場合(S314のY)、外部操作実行部164は、動作テスト用プログラムによるテスト対象ページへの入力操作を、その操作IFをコールすることにより実行する(S316)。操作IFが非公開であれば(S314のN)、内部操作実行部168は、動作テスト用プログラムによるテスト対象ページへの入力操作を、そのテスト対象ページに追加された制御コードをコールすることにより実行する(S318)。テスト対象ページへの操作により新たなウェブページの提供が要求される場合、例えば、GETリクエストやPOSTリクエスト等による画面遷移が発生する場合(S320のY)、S304に戻る。新たなウェブページの提供が要求されなければ(S320のN)、S310に戻る。
参考技術3の動作検証装置100は、参考技術1および2に記載の動作検証装置100の構成を前提として、複数種のウェブブラウザにおけるウェブページの動作テストをサポートするための構成を追加したものである。したがって、参考技術3の動作検証装置100の構成は、参考技術1および2に記載の効果をそのまま奏するとともに、さらに以下の効果を奏するものである。
動作検証装置100では、ウェブブラウザの操作方式として、内部からの操作方式を実装することにより、ウェブブラウザにおける操作IFの公開有無によらず、複数種のウェブブラウザにおけるウェブページの動作テストを実行できる。また、動作検証装置100では、ウェブブラウザの操作方式として、外部からの操作方式も実装しており、ウェブブラウザが操作IFを公開する場合は、外部からの操作方式で動作テストを行うことにより、動作テストの信頼性を担保しやすくなる。
以上、参考技術3の動作検証装置100を説明した。
参考技術3では、プロキシサーバ410に対応するプロキシ処理部166は、動作検証装置100に内包されることとした。変形例では、プロキシ処理部166は、動作検証装置100とは異なる別の情報処理装置に備えられてもよい。
一部既述したが、単一の動作検証装置100に複数種のウェブブラウザがインストールされてもよく、動作検証装置100は複数種のウェブブラウザに対応する複数のブラウザ処理部160を備えてもよい。この場合、プログラム実行部134は、それぞれのウェブブラウザにおいてテスト対象ページの動作テストを実行してもよい。すなわち、図23で示す処理をウェブブラウザごとに並行実行してもよい。複数種のウェブブラウザにおける動作テストを単一の動作検証装置100において実施できることで、効率的かつ低コストでの動作テストを実現できる。
参考技術3では、ウェブブラウザの種類ごとに内部からの操作方式と外部からの操作方式とのいずれかが選択された。変形例では、単一のウェブブラウザでの動作テストにおいて両方式が組み合わせられてもよい。例えば、テスト対象ページに対する操作のうち、公開された操作IFを使用して実行可能な操作は外部からの操作方式を適用し、すなわち外部操作実行部164が操作IFをコールする。その一方で、公開された操作IFでは実行不可な操作は内部からの操作方式を適用し、すなわち内部操作実行部168が制御コードをコールする。ウェブページ内に記述されたスクリプトコードには一般的に広範な操作が許容されるため、操作IFの仕様に依存して発生する外部からの操作方式での制約を、内部からの操作方式により補完することができる。
(実施の形態)
本発明の実施の形態では、上記の参考技術3に関連し、様々な種類のウェブブラウザによるウェブページの動作テストをサポートする動作検証装置100を提案する。以下の説明における「Windows(ウィンドウズ)」、「Internet Explorer(インターネット・エクスプローラ)」、「Firefox(ファイアフォックス)」、「Mac(マック)」、「Mac OS(マック・オーエス)」、「Safari(サファリ)」、「JAVA」等の名称は、各社の商標または登録商標である。
図24は、ウェブページの動作テストにおける機能間の呼び出し関係を模式的に示す。同図の動作検証エンジン500は、動作検証装置100におけるウェブページの動作テストのためのコア機能を示している。Windows環境540は、ウィンドウズOSにおける環境を示し、Mac環境560はMacOSにおける環境を示している。なお、OSにウィンドウズがインストールされた動作検証装置100は、動作検証エンジン500およびWindows環境540の組み合わせで構成されてもよい。また、OSにMacOSがインストールされた動作検証装置100は、動作検証エンジン500およびMac環境560の組み合わせで構成されてもよい。
図24のIE(インターネット・エクスプローラ)ブラウザ542は、外部のアプリケーションから呼び出し可能な操作IFであるCOM550を公開している。したがって、IEブラウザ542に表示されたウェブページの操作には、参考技術3における外部からの操作方式が採用される。その一方で、FF(ファイアフォックス)ブラウザ546およびSafariブラウザ562は、外部のアプリケーションから呼び出し可能な操作IFが公開されていない。したがって、これらのブラウザに表示されたウェブページに対する操作には、参考技術3における内部からの操作方式が採用される。
図24では、内部からの操作方式のためのセレニウムモジュール530を示している。セレニウムモジュール530は、図20の内部操作エンジン412およびプロキシサーバ410に対応し、テスト自動化ツールとして公開されているSelenium(http://seleniumhq.org/)のサーバプログラムである。セレニウムモジュール530は、ウェブページを表示するウェブブラウザのウィンドウ(以下、「ブラウザウィンドウ」とも呼ぶ。)に対して独自の識別子を割り当てる。そして、クライアントからその識別子が指定されることにより、操作対象とすべきブラウザウィンドウ(言い換えればウェブページ)を一意に識別する。
共通IF406は、図20の共通IF406に対応する。IEドライバ502は、図20の個別ブラウザ用エンジンドライバ408に対応する。IEドライバ502は、IEブラウザ542を使用したウェブページの動作テストにおいて、動作テスト用プログラム(以下、「テスト・プログラム」とも呼ぶ。)とIEブラウザ542のブリッジとして機能する。IEドライバ502は、IEウィンドウマネージャ504と、IEブラウザ操作部506と、IEダイアログ操作部508とを含む。
IEウィンドウマネージャ504は、ウェブページを表示させたブラウザウィンドウに対して、ユーザがテスト・プログラムにおいて割り当てた識別子(以下、「ユーザ割当ID」とも呼ぶ。)と、OSが割り当てた識別子(以下、「OS割当ID」)との対応関係を管理する。
IEブラウザ操作部506は、ウェブページの操作を行うべきブラウザウィンドウ(以下、「操作対象ウィンドウ」とも呼ぶ。)について、テスト・プログラムで指定されたユーザ割当IDに対応するOS割当IDを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するCOM550の関数を特定する。そして、OS割当IDを指定してCOM550の関数を呼び出すことにより、IEブラウザ542を外部から操作し、操作対象ウィンドウにおけるウェブページの操作をIEブラウザ542に実行させる。ウェブページの操作に応じて、IEブラウザ542は、ウィンドウズOSのリソースを直接使用してダイアログボックスを表示させる場合がある。このダイアログボックスを以下では「OSダイアログ」とも呼ぶ。
IEダイアログ操作部508は、IEブラウザ542が表示させたOSダイアログ544を操作する。具体的には、OSダイアログ544が表示されたことを検出して、テスト・プログラムで指定されたダイアログ操作に対応するWin32API552の関数を呼び出すことにより、OSダイアログ544に対する操作を実行する。なお、OSダイアログ544に対する典型的な操作内容としては、文字列の入力や、表示項目の選択、ボタンの押下等が挙げられる。後述するFFダイアログ548やSafariダイアログ564に対する操作内容も同様である。
FFドライバ510は、図20の内部操作エンジンドライバ414に対応し、FFブラウザ546を使用したウェブページの動作テストにおいて、テスト・プログラムとFFブラウザ546とのブリッジとして機能する。FFドライバ510は、FFウィンドウマネージャ512と、FFブラウザ操作部514と、FFダイアログ操作部516とを含む。
FFウィンドウマネージャ512は、ウェブページを表示させたブラウザウィンドウに対して、セレニウムモジュール530が割り当てた識別子(以下、「セレニウム割当ID」とも呼ぶ。)と、当該ウィンドウに対するユーザ割当IDとOS割当IDとの対応関係を管理する。
FFブラウザ操作部514は、操作対象ウィンドウについて、テスト・プログラムで指定されたユーザ割当IDに対応するセレニウム割当IDを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するセレニウムモジュール530の関数を特定する。そして、セレニウム割当IDを指定してセレニウムモジュール530の関数を呼び出す。これに応じてセレニウムモジュール530は、セレニウム割当IDにもとづき操作対象ウィンドウを特定し、当該操作対象ウィンドウに表示されたウェブページの制御コードのうち、呼び出された関数に対応する制御コードを呼び出す。これにより、操作対象のウェブページにおいて特定のJAVAスクリプトが動作して、FFブラウザ546を内部から操作し、テスト・プログラムで指定されたウェブページの操作が実現される。
FFブラウザ操作部514は、セレニウムモジュール530を介さずに操作すべき所定の操作、典型的にはブラウザウィンドウのクローズ処理がテスト・プログラムで指定された場合は、セレニウムモジュール530の呼び出しを抑止する。その代わりに、IEダイアログ操作部508と同様に、Win32API552を呼び出すことにより当該操作を実行する。
ウェブページの操作に応じて、FFブラウザ546は、OSダイアログ544を表示させ、または、FFブラウザ546の独自のリソースを使用したダイアログボックス(以下、「FFダイアログ」とも呼ぶ。)を表示させる場合がある。典型的には、ファイルの保存等OSと連携する場合にはOSダイアログ544を表示させ、JAVAスクリプトによるアラートダイアログとしてはFFダイアログ548を表示させる。
FFダイアログ操作部516は、OSダイアログ544およびFFダイアログ548を操作する。具体的には、OSダイアログ544の表示を検出すると、テスト・プログラムで指定されたダイアログ操作に対応するWin32API552の関数を呼び出すことにより、そのOSダイアログ544に対する操作を実行する。また、FFダイアログ548の表示を検出すると、FFブラウザ546に予め設定した拡張機能であるFFプラグイン554を呼び出してダイアログ操作を指示することにより、FFダイアログ548に対する操作を実行する。この詳細は図26に関連して後述する。
Safariドライバ520は、図20の内部操作エンジンドライバ414に対応し、Safariブラウザ562を使用したウェブページの動作テストにおいて、テスト・プログラムとSafariブラウザ562とのブリッジとして機能する。Safariドライバ520は、Safariウィンドウマネージャ522と、Safariブラウザ操作部524と、Safariダイアログ操作部526とを含む。Safariウィンドウマネージャ522は、ウェブページが表示されたウィンドウに対するユーザ割当IDとOS割当IDとセレニウム割当IDとの対応関係を管理する。なお、MacOSでは、ブラウザウィンドウに対してIDを割り当てるのはSafariブラウザ562であるが、記載の簡明化のため、その名称はOS割当IDで統一する。
Safariブラウザ操作部524は、操作対象のウィンドウについて、テスト・プログラムで指定されたユーザ割当IDに対応するセレニウム割当IDを特定する。それとともに、テスト・プログラムで指定された操作内容に対応するセレニウムモジュール530の関数を特定する。そして、セレニウム割当IDを指定してセレニウムモジュール530の関数を呼び出す。これにより、FFブラウザ操作部514と同様に、操作対象のウェブページに対する操作を、セレニウムモジュール530を介して実行する。
Safariブラウザ操作部524は、セレニウムモジュール530を介さずに操作すべき所定の操作、典型的にはウィンドウのクローズ処理がテスト・プログラムで指定された場合は、セレニウムモジュール530の呼び出しを抑止する。その代わりに、MacOSが提供するAPIを呼び出すことにより当該操作を実行する。具体的には、障害者のためのアプリケーションによる利用のために供されたAPI群であるアクセシビリティAPI566を呼び出す。この詳細は図27に関連して後述する。
ウェブページの操作に応じて、Safariブラウザ562はダイアログ(以下、「Safariダイアログ」とも呼ぶ。)を表示させる場合がある。Safariダイアログ操作部526は、Safariダイアログ564の表示を検出すると、テスト・プログラムで指定されたダイアログ操作に対応するMacOSのAPIを呼び出すことにより、Safariダイアログ564に対する操作を実行する。この際にも、上述のアクセシビリティAPI566を呼び出す。この詳細は図27に関連して後述する。
上記のFFウィンドウマネージャ512およびSafariウィンドウマネージャ522は、セレニウムウィンドウマネージャ532として総称される。図25は、セレニウムウィンドウマネージャ532に格納されるデータ例を示す。同図で示すように、セレニウムウィンドウマネージャ532は、ウェブページの動作テストにおいて各ブラウザウィンドウへ割り当てられたユーザ割当IDとセレニウム割当IDとOS割当IDとを対応づけて保持する。ユーザ割当IDは、ユーザが各ウィンドウに対して任意に割り当てたIDであり、ユーザにとって都合のよい(例えば認識しやすく、覚えやすい)名称であってもよい。なお、IEブラウザ542の操作にはセレニウムモジュール530を介さない。そのため、IEウィンドウマネージャ504は、ユーザ割当IDとOS割当IDのみを対応づけて保持する。
また、上記のFFブラウザ操作部514およびSafariブラウザ操作部524は、セレニウムモジュール530を介してウェブブラウザを操作するセレニウムブラウザ操作部534として総称される。
図26は、図24のFFダイアログ548に対する操作の仕組みを示す。セレニウムモジュール530において、FFブラウザ546の起動時に、FFブラウザ546によって読み込まれるFFプロファイル570に、JAVAスクリプトで実装されたウィンドウハンドラ572が予め設定される。FFブラウザ546は、新規のブラウザウィンドウを開く際に、FFプラグイン554の記憶領域にウィンドウハンドラ572を読み込むことにより、ウィンドウハンドラ572の機能が追加的に組み込まれる。
ウィンドウハンドラ572は、FFプラグイン554として組み込まれた際、FFブラウザ546によるウィンドウ生成を検出するリスナオブジェクトを、XPConnect578およびXPCOM580を介してウィンドウウオッチャ(WindowWatcher)582へ登録する。ウィンドウハンドラ572は、登録したリスナオブジェクトを介して、FFダイアログ548が生成されたことを検出すると、FFダイアログ操作部516のソケットサーバ574とソケット通信を行い、FFダイアログ548が生成された旨を通知する。この通知情報には、FFダイアログ548における表示文字列や、ボタン等の表示オブジェクトを示す表示態様情報が含まれる。
FFダイアログ操作部516は、FFダイアログ548が生成された旨が通知されると、テスト・プログラムで指定されたダイアログ操作に対応した関数であり、XPCOM580の関数の識別情報をウィンドウハンドラ572へ通知する。ウィンドウハンドラ572は、FFダイアログ操作部516により指定されたXPCOM580の関数を呼び出すことにより、FFダイアログ548を操作する。なお、FFダイアログ操作部516は、FFダイアログ548の表示態様に応じて、FFダイアログ548に対する操作内容を適宜調整してもよい。例えば、テスト・プログラムで指定されたボタン押下操作に対して、押下対象のボタンのIDを追加した上で、その操作指示をウィンドウハンドラ572へ通知してもよい。
既述したように、FFブラウザ546は、JAVAスクリプトのアラートダイアログとして、FFダイアログ548を表示させる。このFFダイアログ548は、FFブラウザ546独自のリソースを使用して表示されたものであるため、OS側からはダイアログの内容を判別できない。例えば、FFダイアログ548における表示文字列や、ボタン等の表示オブジェクトが判別できない。そのため、OSダイアログ544に対する操作のように、Win32API552を介しての操作ができない。例えば、FFダイアログ548に表示されたボタンに対する押下操作ができない。
そこで本実施の形態では、FFブラウザ546におけるFFダイアログ548表示の監視機能をプラグインとして追加することにより、FFダイアログ548の表示内容の取得を可能にし、また、FFダイアログ548に対する操作を実現する。
なお、FFブラウザ操作部514は、セレニウムモジュール530を介してFFブラウザ546を操作するため、ウェブページのプログラムコードにダイアログ操作のための関数(例えば、ウィンドウハンドラ572と同様のプログラムコード)を設定することもできる。しかし、FFダイアログ548がモーダルダイアログ(アプリケーションモーダルダイアログまたはシステムモーダルダイアログ)である場合、その表示元のウェブページのコードからはダイアログを操作できなくなる。その一方で、FFプラグイン554として組み込まれたウィンドウハンドラ572はモーダルダイアログへの操作を継続できる。この観点から、ウィンドウハンドラ572は、FFブラウザ546の拡張機能として設定されることが望ましいといえる。
図27は、図24のSafariダイアログ564に対する操作の仕組みを示す。同図のAppleスクリプト584は、MacOSにおけるアプリケーション間通信技術であるAppleイベントを呼び出すスクリプトである。システムイベント586は、MacOSが提供するアプリケーションであり、Appleスクリプト584とアクセシビリティAPI566とを仲介して、Appleスクリプト584によるアクセシビリティAPI566の呼び出しを実現させる。
図27はMacOSを4階層で示しており、上位の階層は下位の階層よりも抽象度が高いAPI、言い換えれば、高レベルのAPIを提供する。同図で示すように、アクセシビリティAPI566は、最上位の階層「ユーザ・エクスペリエンス」に属する。既述したように、アクセシビリティAPI566は、障害者向けのユーザビリティを確保するためのUI自動化機能に関するAPI群である。自動化される操作内容には、ウィンドウを開く・ボタンを押下する等、各種のユーザインタフェース(画面)操作が含まれる。
Safariダイアログ操作部526は、テスト・プログラムで指定されたダイアログ操作に対応するアクセシビリティAPI566の関数を特定して、その関数を指定したAppleスクリプト584をシステムイベント586へ送信する。これにより、システムイベント586を介して、アクセシビリティAPI566として用意されたダイアログ操作の関数を呼び出す。
なお、Safariダイアログ564に対する操作は、MacOSにおけるより低レベルなAPI群を用いても実現可能である。例えば、Safariダイアログ操作部526がグラフィックス・アンド・メディア階層の「Quartz」APIを呼び出すことによっても、Safariダイアログ564に対する操作を実行できる。しかし、アクセシビリティAPI566は、ユーザによるUI操作に対応する高レベルな関数を提供するため、アクセシビリティAPI566を利用することで、Safariダイアログ操作部526のコード量を低減でき、また、その保守性を高めることができる。
また図27では図示しないが、Safariブラウザ操作部524は、ウェブページに対する操作のうち、セレニウムモジュール530を介さず行うべき所定の操作については、Safariダイアログ操作部526と同様に、アクセシビリティAPI566を呼び出す。これにより、当該操作をMacOSやSafariブラウザ562に実行させる。
図28は、実施の形態の動作検証装置100の機能構成を示すブロック図である。同図の機能ブロックのうち、参考技術1乃至3で示した動作検証装置100の機能ブロックと同一もしくは対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術1乃至3において既述した内容と異なる場合に記載しており、同様の機能については適宜その記載を省略する。
動作検証装置100は、ウィンドウID保持部154およびID取得部139をさらに備える。ウィンドウID保持部154およびID取得部139は、図24のIEウィンドウマネージャ504およびセレニウムウィンドウマネージャ532に対応する。すなわち、ウィンドウID保持部154は、ウェブページを表示するブラウザウィンドウに対して割り当てられたユーザ割当ID、セレニウム割当ID、OS割当IDとの対応関係を保持する。
ID取得部139は、OS(ウィンドウズOSやMacOS)から、ブラウザウィンドウに対するOS割当IDを取得する。ウィンドウズOSの場合、ID取得部139は、Win32APIをコールすることにより得られるウィンドウハンドルを取得する。例えば、関数「FindWindow」が返すHWND値をlong型の整数として取得して、ウィンドウID保持部154のOS割当IDフィールドに格納する。関数「FindWindow」が返す複数種類のHWND値のうち、ウィンドウID保持部154に未格納のものについて、ウィンドウID保持部154の新たなレコードとして追加してもよい。
またMacOSの場合、ID取得部139は、AppleスクリプトによりSafariブラウザ562から得られるlong値を取得して、ウィンドウID保持部154のOS割当IDフィールドに格納する。例えば、以下のスクリプト、
tell application ”Safari”
return id of windows
end tell
を実行して、それぞれのブラウザウィンドウに対してSafariブラウザ562が割り当てたlong値の一覧を取得してもよい。
またID取得部139は、セレニウムモジュール530(Selenium−CORE)がブラウザウィンドウごとに割り当てたウィンドウ属性値である「seleniumWindowName」を取得する。そして、そのウィンドウ属性値をセレニウム割当IDとして、ウィンドウID保持部154のセレニウム割当IDフィールドに格納する。例えば、セレニウムモジュール530の関数「getAttributeFromAllWindows(”seleniumwindowName”)」を呼び出すことにより、セレニウムモジュール530で管理されるウィンドウ属性値の一覧を取得する。
またID取得部139は、後述するID割当部174およびID割当部180がブラウザウィンドウに対して割り当てたユーザ割当IDを取得して、ウィンドウID保持部154のユーザ割当IDフィールドに格納する。なおID取得部139は、ユーザ割当IDとセレニウム割当IDとOS割当IDとのそれぞれを、時間軸上での割当順(ID取得部139における取得順)にウィンドウID保持部154へ逐次格納してもよい。これにより、時間軸上で先に割り当てられたID(例えばセレニウム割当ID)は、同様に時間軸上で先に割り当てられた別のID(例えばユーザ割当ID)と対応づけられることになる。
図29は、図28のプログラム実行部134の詳細を示すブロック図である。プログラム実行部134は、テスト環境判定部171と、外部操作実行部164と、プロキシ処理部166と、内部操作実行部168と、証左物設定部170とを備える。同図の機能ブロックのうち、参考技術3で示したプログラム実行部134の機能ブロックと同一もしくは対応する機能ブロックには、同じ符号を付している。同じ符号を付した機能ブロックについては、その機能が参考技術3において既述した内容と異なる場合に記載しており、同様の機能については適宜その記載を省略する。
テスト環境判定部171は、参考技術3(図21)におけるテスト主体選択部162に対応し、ウェブページの動作テストのための環境、具体的にはOSとウェブブラウザの組み合わせにもとづいて、ウェブページの動作テストの方式を決定する。例えば、ウェブブラウザの操作方式およびダイアログの操作方式を決定する。
外部操作実行部164は、図24におけるIEブラウザ操作部506に対応する。外部操作実行部164は、ID割当部174とダイアログ操作部176を含む。ID割当部174は、テスト・プログラムの実行に際して、テスト・プログラムにおいて新規のブラウザウィンドウを生成させる関数(コマンド)が指定されたことを検出すると、そのコマンドの引数として指定されたIDをユーザ割当IDとして決定する。IDが未指定の場合は、外部操作実行部164および内部操作実行部168において一意となる新たなIDを、ユーザ割当IDとして採番してもよい。
ダイアログ操作部176は、図24のIEダイアログ操作部508に対応し、IEブラウザ542によるダイアログの設定を定期的に監視する。例えば、Win32API552の上述したFindWindow関数を定期的にコールして、ダイアログウィンドウが生成されたことを検出してもよい。ダイアログ操作部176は、IEブラウザ542において表示されたOSダイアログ544を、Win32API552を介して操作する。
なお、外部操作実行部164は、テスト・プログラムで指定されうる、ウェブページ操作用の関数と、ウェブブラウザの操作IFとして規定された関数、実施の形態ではCOM550やWin32API552にて規定された関数との対応関係を格納したテーブルを保持する。外部操作実行部164は、当該テーブルを参照して、テスト・プログラムで指定された関数に対応したCOM550やWin32API552の関数をコールする。
プロキシ処理部166は、図24におけるセレニウムモジュール530に対応する。参考技術3において既述したように、プロキシ処理部166は、操作対象のウェブページを代理取得する。そして、そのウェブページのプログラムコードに、JAVAスクリプトで実装されたプログラムコードであり、ウェブページに対する各種の操作を実行するための予め用意された関数群(参考技術3における「制御コード」)を追加する。そして、制御コード追加後のウェブページをブラウザ処理部160に表示させる。また、内部操作実行部168からの操作指示に応じて、その操作指示に対応する制御コードの関数を呼び出すことにより、ウェブページの操作を仲介して実行する。
プロキシ処理部166は、ID発行部178とアドオン設定部179を含む。ID発行部178は、制御コード追加後のウェブページをブラウザ処理部160に表示させる際に、そのブラウザウィンドウをプロキシ処理部166において一意に識別するための識別情報を発行する。この識別情報は、ID取得部139によってセレニウム割当IDとして取得される。アドオン設定部179は、制御コード追加後のウェブページをブラウザ処理部160に表示させるためにFFブラウザ546を起動すべき際、図26のウィンドウハンドラ572を含むFFプロファイル570を指定してFFブラウザ546を起動する。これにより、FFブラウザ546の拡張機能としてウィンドウハンドラ572を組み込む。
内部操作実行部168は、図24におけるセレニウムブラウザ操作部534に対応する。内部操作実行部168は、ID割当部180とダイアログ操作部182を含む。ID割当部180は、外部操作実行部164のID割当部174と同様の構成である。なお、内部操作実行部168は、テスト・プログラムで指定されうるウェブページ操作用の関数と、セレニウムモジュール530において規定されたウェブページ操作用の関数との対応関係を格納したテーブルを保持する。外部操作実行部164は、当該テーブルを参照して、セレニウムモジュール530への操作指示として、テスト・プログラムで指定された関数に対応したセレニウムモジュール530の関数をコールする。
ダイアログ操作部182は、図24のFFダイアログ操作部516およびSafariダイアログ操作部526に対応する。テスト環境がウィンドウズOSおよびFFブラウザ546の場合、ダイアログ操作部182は、FFブラウザ546によるダイアログの設定を定期的に監視する。例えば、Win32API552の上述したFindWindow関数を定期的にコールして、ダイアログウィンドウが生成されたことを検出してもよい。ダイアログ操作部182は、FFブラウザ546において表示されたOSダイアログ544を、Win32API552を介して操作する。また、ダイアログ操作部182は、FFブラウザ546により表示されたFFダイアログ548を、FFプラグイン554を介して検出し、FFプラグイン554を介して操作する。
またテスト環境がMacOSおよびSafariブラウザ562である場合、ダイアログ操作部182は、Safariブラウザ562によるダイアログの設定を定期的に監視する。例えば、上述のAppleスクリプトを定期的に実行して、Safariブラウザ562におけるダイアログウィンドウの設定を検出してもよい。ダイアログ操作部182は、Safariブラウザ562において表示されたSafariダイアログ564を、アクセシビリティAPI566を介して操作する。
以上の構成による動作を以下説明する。
図30は、動作検証装置100の動作を示すフローチャートである。同図は、動作検証装置100において動作テスト用プログラムが実行される際の動作を示すものである。例えば、図12におけるS218の詳細を示すものであり、図14におけるS228の詳細を示すものでもある。すなわち、図14で示したように、動作検証装置100は、ウェブページに対して事前にユーザが実施した一連の入力操作を再現することで、ウェブページの動作確認を支援する。なお、図30は、図23のフローチャートをより詳細化したものとも言える。
ウェブページの動作テストの開始指示をユーザから受け付けると、テスト環境判定部171は、動作テストの実行環境となるOSおよびウェブブラウザの種別を判定する。そして、その判定結果に応じて、ウェブページの操作主体として外部操作実行部164または内部操作実行部168を選択する(S400)。プログラム実行部134、言い換えれば操作主体として選択された外部操作実行部164または内部操作実行部168は、後述するテスト・プログラム読込処理を実行する(S402)。テスト・プログラムに記述されたウェブページに対する全操作(動作テストの全項目)が完了した場合(S404のY)、本図のフローを終了する。
テスト・プログラムの一例として、ここでは、以下の操作1〜操作10の操作コマンドが記述されたテスト・プログラムを想定する。
(操作1)ブラウザウィンドウA(ID=1を指定)をオープン
(操作2)ブラウザウィンドウB(ID=2を指定)をオープン
(操作3)ブラウザウィンドウAを選択(ID=1を指定)
(操作4)ブラウザウィンドウAに表示されたウェブページに対する操作
(操作5)ブラウザウィンドウAに表示されたウェブページに対する操作
(操作6)操作5により表示されたダイアログに対する操作
(操作7)ブラウザウィンドウBを選択(ID=2を指定)
(操作8)ブラウザウィンドウBに表示されたウェブページに対する操作
(操作9)ブラウザウィンドウAをクローズ(ID=1を指定)
(操作10)ブラウザウィンドウBをクローズ(ID=2を指定)
このテスト・プログラムは、図14で示した一連の処理で設定された動作テスト用プログラムである。この場合の操作内容ファイルには、操作1および操作2を指定する関数として「waitForNewWindow」が指定され、その引数としてウェブページのURLとユーザ指定のIDが設定される。また操作3および操作7を指定する関数として「selectWindow」が指定され、その引数としてユーザ指定のIDが設定される。また操作4、操作5、および操作8を指定する関数として、WebEditSetやWebElementClick等、各種の操作用の関数が指定される。また操作6を指定する関数として、ダイアログ操作用の所定の関数が指定される。
テスト・プログラムの実行においては、テスト・プログラムに記述された操作コマンドが順次実行される。テスト・プログラムにおいて未実行の操作コマンドが残存しており(S404のN)、テスト・プログラムにおいて新たなウェブページの表示が要求された場合、すなわち上記の操作1および操作2を実行すべき場合(S406のY)、操作主体として選択された外部操作実行部164または内部操作実行部168のID割当部は、その操作コマンドで指定されたIDをユーザ割当IDとして割り当てる。ID取得部139は、そのユーザ割当IDを取得し、ウィンドウID保持部154へ格納する(S408)。
ウェブブラウザの操作IFが公開されている場合(S410のY)、外部操作実行部164は、その操作IFを呼び出すことにより、操作対象のウェブページのデータをウェブブラウザに取得させる(S412)。そして、操作対象のウェブページを表示したブラウザウィンドウをディスプレイ上に表示させる(S420)。図24においてS410のYとなるのは、ウェブブラウザがIEブラウザ542の場合であり、このときの操作IFにはCOM550が対応する。
ウェブブラウザの操作IFが非公開の場合(S410のN)、内部操作実行部168は、プロキシ処理部166に対して、操作対象のウェブページの取得を指示する。プロキシ処理部166のID発行部178は、セレニウム割当IDを発行する(S414)。プロキシ処理部166は、操作対象のウェブページのデータを取得し(S416)、当該ウェブページのデータに制御コードを追加する(S418)。プロキシ処理部166は、後述するウェブブラウザ起動処理を実行後(S419)、制御コードを追加したウェブページのデータをウェブブラウザに渡し、操作対象のウェブページを表示するブラウザウィンドウをディスプレイ上に表示させる(S420)。図24においてS410のNとなるのは、ウェブブラウザがFFブラウザ546またはSafariブラウザ562の場合である。
ID取得部139は、OSが提供するAPIをコールし、ブラウザウィンドウに対してOSが割り当てたOS割当IDを取得してウィンドウID保持部154へ格納する。また、ウェブブラウザの操作IFが非公開の場合は、セレニウムモジュール530が提供するAPIをコールし、ブラウザウィンドウに対してセレニウムモジュール530が割り当てたセレニウム割当IDを取得してウィンドウID保持部154へ格納する。これにより、ブラウザウィンドウAとブラウザウィンドウBのそれぞれに割り当てられたユーザ割当IDとOS割当IDとセレニウム割当IDとを対応づける(S422)。
テスト・プログラムにおいて新たなウェブページの表示が指定されなければ(S406のN)、S408〜S422はスキップされる。テスト・プログラムにおいてウェブページの操作が指定された場合、すなわち上記の操作3〜操作10を実行すべき場合(S424のY)、プログラム実行部134は後述するウェブページ操作処理を実行する(S426)。テスト・プログラムにおいてウェブページの操作が指定されなければ(S424のN)、S426はスキップされる。ウェブページに対する操作の後、証左物設定部170は、画面スナップショット等の証左物のデータを結果保持部152へ格納し(S428)、S404へ戻る。
なお、証左物設定部170は、証左物としての、ブラウザウィンドウに関する画面スナップ等の証左物を、そのブラウザウィンドウに対して割り当てられたユーザ割当IDと対応づけて記録することが望ましい。これにより、ウェブページの動作テストの結果を確認するユーザに、自身が指定したIDと対応づけられた証左物を確認させることができ、証左物の確認におけるユーザの利便性を高めることができる。
図31は、図30のS402のテストプログラム読込処理を詳細に示すフローチャートである。プログラム実行部134は、動作テスト用プログラムを読み込む(S430)。そのプログラムにおいてダイアログ操作を示す所定関数が指定されている場合(S432のY)、プログラム実行部134は、そのダイアログ操作の内容(上記の操作6)を所定のダイアログ操作保持テーブルに格納する(S434)。ダイアログ操作の指定がなければ(S432のN)、S434はスキップされる。
図32は、図30のS419のウェブブラウザ起動処理を詳細に示すフローチャートである。プロキシ処理部166は、動作テストのためのウェブブラウザを起動する(S440)。動作テスト用のウェブブラウザがFFブラウザ546である場合(S442のY)、アドオン設定部179は、FFブラウザ546の拡張機能としてウィンドウハンドラ572をアドオンする(S444)。ウィンドウハンドラ572は、FFダイアログ548を検出するためのリスナをFFブラウザ546に登録する(S446)。動作テスト用のウェブブラウザがFFブラウザ546でなければ(S442のN)、S444およびS446はスキップされる。
図33は、図30のS426のウェブページ操作処理を詳細に示すフローチャートである。テスト環境判定部171における判定結果においてOSがMacOSである場合(S450のY)、内部操作実行部168が後述のMac用操作処理を実行する(S452)。OSがMacOSでなければ(S450のN)、S452はスキップされる。OSがWindowsであり(S454のY)、ウェブブラウザがIEブラウザ542である場合(S456のY)、外部操作実行部164が後述のIE用操作処理を実行する(S458)。ウェブブラウザがIEブラウザ542でなく(S456のN)、FFブラウザ546である場合(S460のY)、内部操作実行部168が後述のFF用操作処理を実行する(S462)。ウェブブラウザがFFブラウザ546でもなければ(S460のN)、S462はスキップされ、OSがWindowsでもなければ(S454のN)、S456以降はスキップされる。
図34は、図33のS452のMac用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作(上記の操作3および7)が指定された場合(S470のY)、内部操作実行部168のID割当部180は、引数で受け付けたIDをユーザ割当IDとして特定する(S472)。ウィンドウ選択操作でなく(S470のN)、Safariブラウザ562を介して実行すべき所定の操作(上記の操作4、5および8、以下「ブラウザ操作」とも呼ぶ)が指定された場合(S474のY)、内部操作実行部168は、ユーザ割当IDと対応づけられたセレニウム割当IDを特定する(S476)。そして、そのセレニウム割当IDを指定した操作指示をセレニウムモジュール530へ通知することにより、ウェブページに追加された制御コードのうち操作指示に対応する関数をセレニウムモジュール530に呼び出させる(S478)。
ブラウザ操作でなく(S474のN)、MacOSを介して実行すべき所定の操作(上記の操作9および10、以下「OS操作」とも呼ぶ)が指定された場合(S480のY)、内部操作実行部168は、ユーザ割当IDと対応づけられたOS割当IDを特定する(S482)。そして、そのOS割当IDを指定して、操作内容に対応するアクセシビリティAPI566の関数を呼び出すことにより、ブラウザウィンドウに対するOS操作をMacOSに実行させる(S484)。OS操作でもなければ(S480のN)、S482およびS484はスキップされる。
内部操作実行部168のダイアログ操作部182は、Safariダイアログ564の表示を検出すると(S486のY)、そのダイアログに対する操作内容(上記の操作6)をダイアログ操作保持テーブルから取得する(S488)。そして、その操作内容に対応するアクセシビリティAPI566の関数をコールすることにより、Safariダイアログ564に対する操作を実行する(S490)。Safariダイアログ564の表示が未検出であれば(S486のN)、S488およびS490はスキップされる。
図35は、図33のS458のIE用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作(上記の操作3および7)が指定された場合(S500のY)、外部操作実行部164のID割当部174は、引数で受け付けたIDをユーザ割当IDとして特定する(S502)。ウィンドウ選択操作でなく(S500のN)、IEブラウザ542を介して実行すべき操作(上記の操作4、5および8、以下「ブラウザ操作」とも呼ぶ)が指定された場合(S504のY)、外部操作実行部164は、ユーザ割当IDと対応づけられたOS割当IDを特定する(S506)。そして、そのOS割当IDを指定して、ブラウザ操作の内容に対応するCOM550の関数を呼び出すことにより、当該操作をIEブラウザ542に実行させる(S508)。
ブラウザ操作でなく(S504のN)、WindowsOSを介して実行すべき操作(上記の操作9および10、以下「OS操作」とも呼ぶ)が指定された場合(S510のY)、外部操作実行部164は、ユーザ割当IDと対応づけられたOS割当IDを特定する(S512)。そして、そのOS割当IDを指定して、操作内容に対応するWin32API552の関数を呼び出すことにより、ブラウザウィンドウに対するOS操作をWindowsOSに実行させる(S514)。OS操作でもなければ(S510のN)、S512およびS514はスキップされる。
外部操作実行部164のダイアログ操作部176は、OSダイアログ544の表示を検出すると(S516のY)、そのダイアログに対する操作内容(上記の操作6)をダイアログ操作保持テーブルから取得する(S518)。そして、その操作内容に対応するWin32API552の関数をコールすることにより、OSダイアログ544に対する操作を実行する(S520)。OSダイアログ544の表示が未検出であれば(S516のN)、S518およびS520はスキップされる。
図36は、図33のS462のFF用操作処理を詳細に示すフローチャートである。テスト・プログラムにおいてウィンドウ選択操作(上記の操作3および7)が指定された場合(S530のY)、内部操作実行部168のID割当部180は、引数で受け付けたIDをユーザ割当IDとして特定する(S532)。ウィンドウ選択操作でなく(S530のN)、FFブラウザ546を介して実行すべき所定の操作(上記の操作4、5および8、以下「ブラウザ操作」とも呼ぶ)が指定された場合(S534のY)、内部操作実行部168は、ユーザ割当IDと対応づけられたセレニウム割当IDを特定する(S536)。そして、そのセレニウム割当IDを指定した操作指示をセレニウムモジュール530に通知することにより、ウェブページに追加された制御コードのうち操作指示に対応する関数をセレニウムモジュール530に呼び出させる(S538)。
ブラウザ操作でなく(S534のN)、WindowsOSを介して実行すべき所定の操作(上記の操作9および10、以下「OS操作」とも呼ぶ)が指定された場合(S540のY)、内部操作実行部168は、ユーザ割当IDと対応づけられたOS割当IDを特定する(S542)。そして、そのOS割当IDを指定して、操作内容に対応するWin32API552の関数を呼び出すことにより、ブラウザウィンドウに対するOS操作をWindowsOSに実行させる(S544)。OS操作でもなければ(S540のN)、S542およびS544はスキップされる。
当段落では、上記操作5により表示されたダイアログがFFダイアログ548であるとして説明する。内部操作実行部168のダイアログ操作部182は、ウィンドウハンドラ572からの通知により、FFダイアログ548の表示を検出すると(S546のY)、そのダイアログに対する操作内容(上記の操作6)をダイアログ操作保持テーブルから取得する(S548)。そして、その操作内容をウィンドウハンドラ572へ通知することにより、その操作内容に対応するFFブラウザ546の関数をウィンドウハンドラ572に呼び出させる(S550)。これにより、FFダイアログ548に対する、テスト・プログラムにしたがった操作を実行する。FFダイアログ548の表示が未検出であれば(S546のN)、S548およびS550はスキップされる。
当段落では、上記操作5により表示されたダイアログがOSダイアログ544であるとして説明する。内部操作実行部168のダイアログ操作部182は、OSダイアログ544が表示されたことを検出すると(S552のY)、そのダイアログに対する操作内容(上記の操作6)をダイアログ操作保持テーブルから取得する(S554)。そして、その操作内容に対応するWin32API552の関数をコールすることにより、OSダイアログ544に対する操作を実行する(S556)。OSダイアログ544の表示が未検出であれば(S552のN)、S554およびS556はスキップされる。
本実施の形態の動作検証装置100によれば、参考技術3において既述したように、セレニウムモジュール530を使用することで、操作IFの公開有無によらず、様々なウェブブラウザ上でのウェブページの動作確認が可能になる。また、テスト・プログラム、およびテストプログラムの生成元となる操作内容ファイルや関数設定画面において、ユーザは任意のIDをブラウザウィンドウに対して付与できる。すなわち、ユーザは、テストの都合に応じてブラウザウィンドウのIDを適宜設定できる一方で、セレニウムモジュール530がブラウザウィンドウを識別するために必要なセレニウム割当IDを意識する必要がなく、ユーザの利便性を向上できる。
また動作検証装置100によれば、セレニウムモジュール530を介さずに行うべきブラウザウィンドウへの操作もサポートできる。この場合も、ユーザは、テストの都合に応じてブラウザウィンドウのIDを任意に設定できる一方で、OSやウェブブラウザがそのブラウザウィンドウに対して割り当てたIDを意識する必要がなく、ユーザの利便性を向上できる。
さらに動作検証装置100によれば、ウェブブラウザ(FFブラウザ546)の拡張機能として、ダイアログ検出機能をアドオンする。これにより、ウェブブラウザが独自のリソースを使用してダイアログを表示するためにOSの機能ではダイアログの内容を取得できない場合でも、アドオンしたダイアログ検出機能を介して、ダイアログの内容を取得し、当該ダイアログを操作できる。また、ウェブブラウザが独自のリソースを使用した第1ダイアログと、OSのネイティブリソースを使用した第2ダイアログの両方を生成しうる場合も、ダイアログ操作の方式を適宜切り替えることにより、いずれのダイアログに対する操作も可能にする。すなわち、第1ダイアログに対してはアドオンしたダイアログ検出機能を介して操作し、第2ダイアログに対してはOSのネイティブ機能を介して操作することで、ウェブページに対する一連の操作をサポートして、再現できる。
さらにまた動作検証装置100によれば、ブラウザウィンドウに対する多くの操作においてセレニウムモジュール530を利用しつつ、例外的な操作ではOSのAPIを直接呼び出し、または、ダイアログ操作用のモジュールを利用する。このように、本実施の形態で説明した技術を適宜組み合わせることにより、本実施の形態では言及しなかった様々なテスト環境(すなわちOSとウェブブラウザとの組み合わせ)もサポートでき、ウェブページの動作テストを支援できる。
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
上述した参考技術、実施の形態、変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる参考技術、実施の形態、変形例それぞれの効果をあわせもつ。
請求項に記載の各構成要件が果たすべき機能は、参考技術、実施の形態、および変形例において示された各構成要素の単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。