JP5463717B2 - アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置 - Google Patents

アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置 Download PDF

Info

Publication number
JP5463717B2
JP5463717B2 JP2009099703A JP2009099703A JP5463717B2 JP 5463717 B2 JP5463717 B2 JP 5463717B2 JP 2009099703 A JP2009099703 A JP 2009099703A JP 2009099703 A JP2009099703 A JP 2009099703A JP 5463717 B2 JP5463717 B2 JP 5463717B2
Authority
JP
Japan
Prior art keywords
test
instruction sequence
instruction
request
communication log
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2009099703A
Other languages
English (en)
Other versions
JP2010250583A (ja
Inventor
裕司 山岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009099703A priority Critical patent/JP5463717B2/ja
Publication of JP2010250583A publication Critical patent/JP2010250583A/ja
Application granted granted Critical
Publication of JP5463717B2 publication Critical patent/JP5463717B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置に関し、特に、ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置に関する。
近年、ネットワークを介してアプリケーション装置に接続し、所定のサービスを受ける利用形態が広く普及している。例えば、Webサーバが提供するWebアプリケーションは、クライアント・コンピュータのWebブラウザを操作して利用することができる。このようなアプリケーションの動作確認は、操作あるいはデータの一部を変更してテストを繰り返し行う必要がある。このため、その作業は膨大となり、テストの自動化が検討されてきた。
ところで、アプリケーションテストの手順には、テスト対象のリクエストが通常処理される状況を作る作業と、テスト対象のリクエストをテストの目的に合うように改変し、レスポンスを検証する作業と、がある。以下の説明では前者の作業を「再現」、後者の作業を「テスト核」と呼ぶ。
再現に適している自動テスト手法として、例えば、Webブラウザに対する操作を自動化するブラウザ操作方式と呼ばれる手法がある。ブラウザ操作方式としては、Selenium RC(HYPERLINK "http://selenium-rc.openqa.org/"http://selenium-rc.openqa.org/参照)がよく知られている。また、Webブラウザの操作履歴に基づいて、操作の一部や入力データの一部を変更してテストを自動生成し、繰り返し実行させる方法も提案されている(例えば、特許文献1参照)。
一方、テスト核に適している自動テスト手法として、例えば、通信途中のリクエスト・レスポンスを横取りし、リクエストの任意の部分を改変する通信横取り方式と呼ばれる手法がある。通信横取り方式では、Webブラウザの操作に応じてWebサーバに対して送信されたリクエストを横取りし、予め決められたシナリオに沿って任意の部分を改変し、改変されたリクエストをWebサーバに送信する。そして、このリクエストを処理したWebサーバからのレスポンスを横取りして検証する。なお、リクエストなどの改変は、インタラクティブに手動で行うこともできる。また、リクエストの中には、サーバ装置に引き渡すべき引数を含むものもあるため、これを検出し、改変処理のシナリオにパラメータとして組み込む方法も提案されている(例えば、特許文献2参照)。
特開2005−266954号公報 特開2007−264967号公報
しかし、従来のアプリケーションテストは、テスト生成の自動化が容易ではないという問題点があった。
上述のように、アプリケーションテストには、テスト対象のリクエストが通常処理される状況を作る再現と、テスト対象のリクエストをテストの目的に合うように改変するテスト核と、がある。
再現に適しているブラウザ操作方式は、ブラウザ利用者ができることの多くを自動化することができる。しかし、この方法はブラウザ上から操作できない項目をテストすることはできないため、テスト核には適さない。例えば、Ajax(Asynchronous JavaScript + XML)のような非同期的に生じるリクエストの改変とそのレスポンスの検証、JavaScript(登録商標)などが動的に生成するリクエストの改変、ブラウザ上に表示されないフォームデータの改変などはできない。
一方、テスト核に適している通信横取り方式は、ブラウザ利用者の操作をシミュレートする能力は低いため、再現にはあまり適さない。
このように、ブラウザ操作方式は再現、通信横取り方式はテスト核に、それぞれ適しており、良いアプリケーションテストの自動化のためには、これらを組み合わせる必要があった。しかし、これらを組み合わせてテストを作成することは容易ではなかった。通信横取り方式では、テスト対象とするリクエスト・レスポンスだけを横取りするという仕組みがない。これは、リクエストからだけでは、リクエストがどのブラウザ操作に対応するのかを判断することは難しいことによる。従って、あるブラウザ操作に対応するリクエスト・レスポンスをテスト対象としたい場合でも、テスト対象以外のリクエスト・レスポンスも横取りしてしまう。このため、テスト全体が正しく実行されなくなる可能性がある。
一例として、Webブラウザの操作を何回か行った後に表示されるテスト対象の入力画面において、ある操作を行ったときに送信されるリクエストを改変し、アプリケーションテストを行う場合について説明する。便宜的に、テスト対象の入力画面までのWebブラウザの操作によって通信されるリクエスト・レスポンスをR1,R2,R3とし、テスト対象のリクエスト・レスポンスをR4とする。アプリケーションテストでは、R1,R2,R3については改変を行わない再現で検証し、テスト対象のR4のみをリクエストを改変するテスト核で検証するという制御を行うことが望ましい。しかし、上述のように、ブラウザ操作方式では、R1,R2,R3の再現を行うことはできるが、R4のリクエスト改変はできない。一方、通信横取り方式では、R1,R2,R3,R4に対応するリクエストを識別できない。このため、R4についてのみリクエストを改変するということは難しい。
このように、再現とテスト核とは、異なる方式で行われるため、双方の機能を満たすアプリケーションテストの自動生成は容易ではなかった。このため、アプリケーションテストの生成及び実行制御は、人手で行うほかなく、多大な手間と時間を要していた。
このような点に鑑み、アプリケーションテスト生成を自動化し、テスト作成の手間を軽減することが可能なアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置を提供することを目的とする。
上記課題を解決するために、ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムが提供される。このアプリケーションテスト生成プログラムは、コンピュータを、命令列分割手段、通信ログ取得・分類手段及び自動テスト生成手段として機能させる。命令列分割手段は、所定のサービスの提供を受けるユーザエージェントに対し、アプリケーション装置に対するテスト対象のリクエストの送信及びリクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得する。そして、命令列の表す処理が区切れる区切り命令を命令列から検出し、区切り命令ごとに命令列を分割して、分割命令列を生成する。通信ログ取得・分割手段は、分割命令列ごとに、分割命令列に含まれる命令列に基づいてユーザエージェントへの指示を再生して出力する。そして、ユーザエージェントが送信したリクエストと、リクエストに対応してアプリケーション装置から送信されたレスポンスと、を通信ログとして取得する。この通信ログを、通信ログ取得時に再生した分割命令列に対応付けて記憶手段に記憶し、通信ログを分割命令列ごとに分類したログ分類表を生成する。自動テスト生成手段は、ログ分類表からテスト対象のリクエストを発生させた命令列を含む分割命令列に対応付けられている前記通信ログを抽出する。そして、抽出された通信ログに基づいてリクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、分割命令列とテスト核とを協働して実行させる自動テストを生成する。
このようなアプリケーションテスト生成プログラムによれば、コンピュータを、アプリケーションテスト生成装置として機能させる。所定のサービスの提供を受けるユーザエージェントは、アプリケーション装置に対し、サービスを要求するリクエストを送信し、レスポンスを得て所定の処理を行う。アプリケーションテスト生成装置は、ユーザエージェントに対し、アプリケーション装置に対するテスト対象のリクエストの送信及びレスポンス処理を含む所定の処理の実行を指示する命令から成る命令列を取得する。そして、命令列に含まれる区切り命令によって命令列を分割し、分割命令列を生成する。次に、分割命令列ごとに、分割命令列を再生し、ユーザエージェントに出力して所定の処理を実行させる。このとき、ユーザエージェントが送信したリクエストと、これに対するレスポンスとを通信ログとして取得し、再生した分割命令列に対応付けて記憶手段に記憶する。分割命令列ごとにこの手順を繰り返し、通信ログを分割命令列ごとに分類したログ分類表を生成する。次に、ログ分類表に基づき、テスト対象のリクエストを含む通信ログを抽出し、リクエストの改変を含むテスト手順を記述したテスト核を生成する。こうして生成されたテスト核と分割命令列とを組み合わせ、分割命令列とテスト核を協働して実行させる自動テストを生成する。
また、上記課題を解決するために、コンピュータに、上記の処理機能によって実現される処理手順を実行させるアプリケーションテスト生成方法と、アプリケーションテストを実行するアプリケーションテスト装置と、が提供される。
開示のアプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置によれば、再現テストと、テスト核テストとを協働して実行させることができるアプリケーションテストを自動的に生成することができる。これによって、アプリケーションテストの作成に要する手間を軽減することができる。
発明の概要を示した図である。 実施の形態のシステムのハードウェア構成を示した図である。 テスト生成装置のソフトウェア構成を示した図である。 命令列(Selenese)の一例を示した図である。 命令列分割表の一例を示した図である。 ログ群(d1〜d3)の一例を示した図である。 ログ群(d4〜d9)の一例を示した図である。 ログ分類表の一例を示した図である。 アプリケーションテスト生成処理の手順を示したフローチャートである。 命令列分割処理の手順を示したフローチャートである。 通信ログ取得・分類処理の手順を示したフローチャートである。 自動テスト装置の構成を示した図である。
以下、実施の形態を図面を参照して説明する。まず、発明の概要について説明し、その後、具体的な内容を説明する。
図1は、発明の概要を示した図である。
テスト生成装置10は、所定のサービスを提供するアプリケーション装置として動作するサーバ60に、ネットワークを介して接続する。そして、サーバ60のアプリケーションプログラムを対象とするアプリケーションテストを生成する。
ここで、ユーザエージェント40とサーバ60の関係について説明する。ユーザエージェント40は、ユーザから指示を受けたとき、指示に対応するリクエストをサーバ60に送信する。サーバ60は、リクエストに対応する処理を実行し、レスポンスを返す。そして、ユーザエージェント40は、応答として得られたレスポンスに基づくサービスをユーザに提供する。例えば、ユーザエージェント40は、表示画面上に操作ボタンを表示しておく。ユーザが操作ボタンを操作して指示すると、操作ボタンに応じた情報を要求するリクエストをサーバ60に送信する。サーバ60から要求された情報を含むレスポンスが送られてきたときは、レスポンスに基づく表示を行い、ユーザに情報を提供する。
なお、通信ログ取得装置50は、ユーザエージェント40と、サーバ60との間で交換されるリクエスト及びレスポンスを中継し、通過したリクエスト及びレスポンスを通信ログとして残す処理を行う。
テスト生成装置10は命令列分割手段11、通信ログ取得・分類手段12及び自動テスト生成手段13の各処理手段と、記憶手段14とを有し、サーバ60のアプリケーションテストを生成する。各処理手段は、コンピュータが、アプリケーションテスト生成プログラムを実行することにより、その処理機能を実現する。
命令列分割手段11は、命令列21を取得し、所定の区切り命令で命令列を分割する。命令列21には、ユーザの指令と同様の操作命令をユーザエージェント40に出力することを指示する命令が実行順に記述されている。例えば、ユーザエージェント40に対し、「表示画面上に表示されている最初のリンクをクリックせよ」というような操作命令が記述される。この命令列21に基づいて、ユーザエージェント40に対する操作命令を再生することにより、ユーザができることの多くを自動化することができる。命令列分割手段11では、この命令列21に記述される命令を解析し、命令列から再生される操作命令が区切れる区切り命令を検出する。区切り命令は、予めユーザが設定しておいてもよい。例えば、ユーザエージェント40の表示画面でリンクが設定されているアイコンをクリックしてあるページを開くという操作について、「アイコンをクリック」、「ページが読込まれるのを待つ」、「ページが要求したものかをチェックする」という命令列が記述されていたとする。この命令の中で処理が区切られる命令列を検出し、区切り命令とする。この場合、「アイコンをクリック」と、「ページが読込まれるのを待つ」という一連の操作命令がエージェント40で実行されると、リクエストが送信され、それに対するレスポンスが完了したと推定される。そこで、「ページが読込まれるのを待つ」、あるいは、「ページが要求したものかをチェックする」を区切り命令とする。これは、ユーザエージェント40がリクエストをしてレスポンスを受けた後に状態が安定したことを示唆する命令と言い換えることもできる。命令列分割手段11は、指定された区切り命令を表す文字パターンと、命令列21の各命令列の文字パターンとを照合し、一致するものを命令列から検出する。そして、区切り命令ごとに命令列を分割し、分割命令列を生成する。どこで分割したかは、命令列分割表22に登録しておく。
通信ログ取得・分類手段12は、分割命令列を再生してユーザエージェント40に操作命令を出力する。そして、このときの通信ログを分割命令列ごとに分類する。操作命令に応じた処理を実行するときにユーザエージェント40から送信されたリクエストと、リクエストを受けて所定のアプリケーション処理を行ったサーバ60からのレスポンスは、通信ログ取得装置50によって通信ログとして記録される。通信ログ取得・分類手段12は、分割命令列を再生し、このとき通信ログ取得装置50から取得した通信ログを再生した分割命令列に対応付け、記憶手段14に格納する。これを分割命令列ごとに繰り返すことにより、分割命令列ごとに分類された通信ログが得られる。具体的には、通信ログと、このときに再生された分割命令列とを対応付け、その対応関係をログ分類表23に登録する。上記の例で、「ページが要求したものかをチェックする」命令を区切り命令とし、分割命令列を実行すると、「アイコンをクリック」から区切り命令までの処理で発行されたリクエストと、レスポンスとが通信ログとして記録される。こうして、分割命令列と、これに対応する通信ログとの対応関係が、ログ分類表23に登録される。
自動テスト生成手段13は、ログ分類表23に基づいて、テスト核を生成するテスト対象のリクエストに対応する通信ログを抽出する。例えば、テスト核を通信ログに含まれるリクエストの各フォームパラメータについて1つずつ生成する場合には、テスト対象のリクエストは、フォームパラメータを含むリクエストになる。そして、抽出された通信ログに基づいて、リクエストの改変を含むテスト手順を記述したテスト核を生成する。例えば、リクエストの各フォームパラメータについて、その値を無効な値に改変する手順が生成される。さらに、テスト核を分割命令列と組み合わせ、分割命令列とテスト核とを協働して実行させる自動テストを生成する。
記憶手段14には、命令列分割手段11によって分割された命令列の区分を示した命令列分割表22、分割命令列と通信ログとを対応付けたログ分類表23などの情報が記憶される。
このような構成のテスト生成装置10の動作及びアプリケーションテスト生成方法について説明する。
テスト生成装置10は、処理が開始されると、ユーザエージェント40への操作命令の出力を指示する命令列21を取得する。命令列分割手段11は、区切り命令と命令列の命令とを照合し、一致する区切り命令を検出する。そして、検出された区切り命令で命令列を分割する。区切り命令は、サーバ60の対応処理が区切られる命令、例えば、ユーザエージェント40がリクエストをしてレスポンスを受けた後に状態が安定したことを示唆する命令が予め設定される。分割した命令列に関する情報は、命令列分割表22として記憶手段14に格納される。
通信ログ取得・分類手段12は、命令列分割表22に基づいて、分割命令列単位で命令列を再生し、ユーザエージェント40への操作命令を出力する。ユーザエージェント40は、操作命令に応じてリクエストをサーバ60に送信する。サーバ60は、リクエストに応じたアプリケーション処理を行い、レスポンスを返す。このときのリクエストとレスポンスは、通信ログ取得装置50が、通信ログとして記録している。通信ログ取得・分類手段12は、分割命令列再生時の通信ログを通信ログ取得装置50から取得し、分割命令列に対応付け、その対応関係をログ分類表23に登録する。分割命令列ごとに、分割命令列の再生と、そのときの通信ログの取得とログ分類表23への登録を行うことにより、ログ分類表23には、分割命令列ごとに分類された通信ログの情報が登録される。
自動テスト生成手段13は、ログ分類表23に基づいてテスト核を生成するテスト対象のリクエストに対応する通信ログを抽出する。そして、抽出した通信ログに基づいて、リクエストの改変を含むテスト手順を指示したテスト核を生成する。テスト核は、分割命令列と組み合わせられ、分割命令列とテスト核とを協働して実行させる自動テスト24が生成される。例えば、テスト核が生成されたリクエストを含む分割命令列が実行されるとき、このテスト核も実行させるように対応付けられる。リクエストにテスト核が生成されていない分割命令列では、テスト核は実行させない。
これにより、再現とテスト核とを組み合わせた自動テスト24が生成される。自動テスト24が実行されると、命令列21に設定された命令列が分割命令列単位で順次再生される。このとき、命令列にテスト核が対応付けられていなければ、再現のみが実行される。すなわち、命令列に基づいてユーザエージェント40へ操作指示を行い、ユーザの操作を自動的に再現する作業のみが行われる。そして、命令列にテスト核が対応付けられていれば、再現とともにテスト核が実行される。例えば、再現によって再生された操作命令に応じてユーザエージェント40が送信したテスト対象のリクエストを横取りし、横取りしたリクエストをテスト核で改変した後、サーバ60へ送信することができる。
このように、テスト生成装置10によれば、再現とテスト核とを協働させることの可能なアプリケーションテストを自動生成することが可能となる。また、生成されたアプリケーションテストを使ったテストでは、テスト対象のリクエストが発生するときのみテスト核を実行させ、サーバ60の動作確認を行うことが可能となる。
以下、ユーザエージェント40がWebブラウザであり、サーバ60がWebアプリケーションであるアプリケーションテスト生成を例にとり、実施の形態を説明する。
図2は、実施の形態のシステムのハードウェア構成を示した図である。
テスト生成装置100は、ネットワーク700を介して、テスト対象のアプリケーションを搭載するサーバ600に接続する。
テスト生成装置100のハードウェア構成について説明する。テスト生成装置100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス107を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、及び通信インタフェース106が接続されている。
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションのプログラムが格納される。グラフィック処理装置104には、モニタ108が接続されており、CPU101からの命令に従って画像をモニタ108の画面に表示させる。入力インタフェース105には、キーボード109aやマウス109bが接続されており、キーボード109aやマウス109bから送られてくる信号を、バス107を介してCPU101に送信する。通信インタフェース106は、ネットワーク700に接続されており、ネットワーク700を介してサーバ600との間でデータの送受信を行う。
このようなハードウェア構成によって、テスト生成装置100の処理機能を実現することができる。
次に、テスト生成装置100のソフトウェア構成について説明する。図3は、テスト生成装置のソフトウェア構成を示した図である。
テスト生成装置100は、テスト生成部110、Webブラウザ(以下、ブラウザとする)120、ブラウザ操作部130、ログ取得部140及び記憶部150を有し、ネットワークを介してサーバ600と接続する。
テスト生成部110は、ブラウザ操作部130を制御し、命令列に従ってブラウザ120への操作を自動再生させる。また、ログ取得部140を制御し、ブラウザ120とサーバ600との間の通信ログを取得する。そして取得した通信ログと、命令列とを協働させて実行するアプリケーションテストを自動生成する。詳細は後述する。
ブラウザ120は、サーバ600が提供するHTML(Hyper Text Markup Language)ファイルや画像ファイル、音楽ファイルなどをダウンロードし、モニタ108、あるいは音声出力装置に再生出力する。表示画面の操作入力などに応じてリクエストをサーバ600に送信し、サーバ600からのレスポンスからレイアウトを解析して表示・再生する。
ブラウザ操作部130は、ブラウザ120に対する命令列を再生し、ブラウザ120への操作命令を自動的に発生させる。ここでは、ブラウザ操作方式の自動テストを行うテストツールとして、「Selenium(セレニウム) RC」を用いるとする。
ログ取得部140は、ブラウザ120とサーバ600との間の通信を中継する中継点に設置され、その通信を横取りして通信ログとして記録する。例えば、HTTP(Hyper Text Transfer Protocol)プロキシサーバとして実装する。
記憶部150は、テスト生成部110によって生成される命令列分割表22、ログ分類表23などの情報を記憶する。
サーバ600は、Webサーバであり、HTMLファイルや画像ファイルなどの情報を蓄積しておき、ユーザエージェントのブラウザ120からの要求に応じてアプリケーションプログラムを実行する。実行結果は、レスポンスとしてブラウザ120に返す。
ここで、テスト生成部110の詳細について説明する。
命令列分割部111は、ブラウザ120への操作を自動化する命令列を解析し、ブラウザ120の状態が安定したことを示唆する命令を区切り命令として、命令列を分割する。分割した分割命令列について命令列分割表22を生成し、記憶部150に格納する。
通信ログ取得・分類部112は、命令列分割表22に基づいて、ブラウザ操作部(Selenium RC)130で命令列を再生させる。また、ログ取得部140を制御し、このときブラウザ120と、サーバ600との間で交換されるリクエスト及びレスポンスを取得させる。そして、ログ取得部140が取得したリクエスト及びレスポンスを記録した通信ログを取得し、分割命令列ごとに分類する。ここでは、分割命令列を実行させ、そのときに取得された通信ログをこの分割命令列に分類する。この処理を分割命令列ごとに繰り返し、命令列全体の通信ログを分割命令列ごとに分類する。
テスト核生成部113は、ログ取得部140が取得した通信ログの各リクエストの各フォームパラメータについて1つずつテスト核を生成する。
自動テスト生成部114は、テスト核生成部113が生成したテスト核と、再現のための命令列とを協働させて動作させる自動テストを生成する。
このようなテスト生成装置100の動作及びアプリケーションテスト生成方法について、具体例を用いて詳細に説明する。
命令列分割部111には、ブラウザ操作部(Selenium RC)130が実行する命令列が入力される。命令列は、例えば、Selenium RCの命令列表記形式であるSelenese形式で記述されている。
図4は、命令列(Selenese)の一例を示した図である。
命令列(Selenese)1000には、ブラウザ操作部(Selenium RC)130が再生するブラウザに対する操作が、Selenese形式で記述されている。Selenese形式は、要素3つが1組となって構成される。具体的には、コマンド(command)1001、ターゲット1002(target)及び値(value)1003が1つの組となり、命令列を構成している。コマンド1001は、ブラウザ操作部(Selenium RC)130に対してどう動くかを指示する命令を表している。命令の詳細を含むSeleniumについては、例えば、「Selenium 徹底入門」(笠谷真也・宮澤信吾・増井雄一郎著、WEB+DB PRESS編集部編「WEB+DB PRESS」Vol.36、技術評論社、2006年、41頁)に記載されている。
なお、図の最左欄は、行番号を表している。
例えば、行番号1の行は、コマンド1001が「open」、ターゲット1002が「/」と記述されている。これは、「URI(Uniform Resource Identifier)が『/』であるページをリクエストし、ページが読込まれるまで待つ」という意味になる。行番号2の行は、コマンド1001が「assertTitle」、ターゲット1002が「トップページ」と記述されている。これは、「現在のページのタイトルが『トップページ』でなければエラーとする」という意味になる。そして、行番号が5の行は、コマンド1001が「clickAndWait」、ターゲット1002が「//input[@value=‘ログイン’]」と記述されている。これは、「現在のページから値が『ログイン』であるvalue属性を持つinput要素を探し、それをクリックし、ページが読込まれるまで待つ」という意味になる。なお、Selenium RCは、このような操作命令を、ブラウザ120上でJavaScriptによって解釈・実行する。
このようなブラウザ命令列(Selenese)は、予めユーザによって設定されたものを読込む。ところで、有意義な自動テストを生成するためには、繰り返し何度か実行しても正常に動作する命令列になっていることが望ましい。そこで、ブラウザ命令列(Selenese)の入力の際には、そのような入力を行うように促すようにしてもよい。
命令列分割部111では、このような命令列(Selenese)1000を解析し、所定の区切り命令で分割する。分割は、ブラウザ120の状態が安定したことを示唆する命令列の後で区切って行う。ブラウザ120の状態が安定するとは、ブラウザ120の動作が時間が経っても変化しないであろう状態であることをいう。
このようにブラウザ120の状態が安定したことを示唆するコマンド(区切り命令)には、「pause」、「open」、「・・・AndWait」、「waitFor・・・」がある。「pause」は、ターゲットで指定された時間だけ待つという命令である。「open」は、ターゲットで指定されたURIのページをリクエストし、ページが読込まれるまで待つという命令である。「・・・AndWait」は、操作・・・をした後、ページが読込まれるまで待つという命令である。そして、「waitFor・・・」は、状態・・・が成立するまで待つという命令である。
命令列分割部111は、命令列(Selenese)1000のコマンド1001と、上記の区切り命令とを比較し、一致しているものがあれば、そのコマンドまでの一区切りとして命令列を分割する。例えば、上記の区切り命令「pause」、「open」、「・・・AndWait」、「waitFor・・・」を、図4の命令列(Selenese)1000に適用したとする。この場合、行番号1にコマンド「open」が検出されるので、命令列をここで分割することができる。次に、行番号5のコマンド「clickAndWait」、行番号8のコマンド「clickAndWait」、行番号11の「clickAndWait」、行番号13の「clickAndWait」が検出され、分割される。命令列をどこで分割したかという情報は、命令列分割表1100に登録される。
なお、分割の方法として、上記の区切り命令の直後で区切るのではなく、後続の連続した、操作の指示ではない命令(例えば、「assert・・・」や「verify・・・」など)の後で区切っても良い。
図5は、命令列分割表の一例を示した図である。
命令列分割表1100は、区分識別子1101及び命令列行番号1102の情報項目を有し、分割後の各区分と、命令列の行番号との対応付けを記した表である。
区分識別子1101は、分割された分割命令列を識別するため、文字「s」と、通し番号とを連結した識別子である。「s1」が最初の命令列を含む区分を識別し、順に「s2」、「s3」、・・・、「sn」と対応する命令列の番号が大きくなる(なお、nは任意の整数)。
命令列行番号1102は、区分識別子1101に対応する命令列の行番号を示している。
図5の命令列分割表1100は、上述の命令列の行番号1,5,8,11,13で命令列を分割した場合を示している。例えば、区分s1には行番号1、区分s2には行番号2〜5、区分s3には行番号6〜8、区分s4には行番号9〜11、区分s5には行番号12〜13、区分s6には行番号14、の命令列がそれぞれ対応付けられている。生成された命令列分割表1100は、記憶部150に格納される。
続いて、通信ログ取得・分類部112によって、命令列分割部111が分割した分割命令列を単位として通信ログが取得され、分割命令列ごとに分類される。
まず、ログ取得部140の動作について説明する。ログ取得部140は、ブラウザ120からサーバ600に送信されたリクエストを横取りし、通信ログに記録した後、サーバ600に送信する。同様に、サーバ600から送信されたレスポンスも横取りして通信ログに記録した後、ブラウザ120に返す。こうして取得した1組のリクエスト・レスポンスに、識別子を割り当て順次保存していく。ここでは、OSのファイルシステムにディレクトリを生成し、そのディレクトリの下に通信ログを保存する。識別子は、文字「d」と、通し番号を連結して生成するとする。「d1」が最初に取得されたログの組で、順に、「d2」、「d3」、・・・「dn」と取得されたログが蓄積される。
図6,図7は、ログ群の一例を示した図である。図6は、ディレクトリd1からd3のログ群を示している。図7は、ディレクトリd4からd9のログ群を示している。
ログ群1200a,1200bは、図4に示した命令列を実行したときに、得られた通信ログを示している。また、図6,図7の各ディレクトリに対応する上段のログはリクエスト、下段のログはレスポンスを示している。
通信ログ取得・分類部112は、命令列分割表1100に基づき、各区分の分割命令列をブラウザ操作部130で再生させ、そのときログ取得部140がログ群1200a,1200bに新たに設定したログを、当該分割命令列で発生した通信と判断する。そして、このログと、分割命令列の区分とを対応付けたログ分類表23を生成する。
具体例で説明する。
図8は、ログ分類表の一例を示した図である。ログ分類表1300aは、区分識別子1301と、ログのディレクトリ名1302とが対応付けられている。ログ分類表1300b,1300cも同様である。
(A)ログ分類表(区分s1まで)は、最初の区分s1に対応する通信ログのディレクトリ名が登録された状態を示している。
通信ログ取得・分類部112は、図5に示した命令列分割表1100の最初の区分s1の命令列(命令列番号1)をブラウザ操作部130に実行させる。ブラウザ操作部130は、区分s1に指定された、図4に示した命令列(Selenese)1000の命令列番号1の「open」コマンドを実行する。これにより、ブラウザ120は、該当するページの情報を要求するリクエストをサーバ600に送信し、サーバ600からレスポンスが返る。そのやり取りは、ログ取得部140が記録しておく。図6に示したログ群1200aのディレクトリd1が設定される。通信ログ取得・分類部112は、ディレクトリd1の通信ログを取得して記憶部150に保存する。さらに、この通信は、区分s1で発生したものとしてログ分類表1300aに登録する。ログ分類表1300aには、区分識別子s1と、ログのディレクトリ名d1とが対応付けて登録される。
(B)ログ分類表(区分s2まで)は、次の区分s2までの通信ログのディレクトリ名が登録された状態を示している。
通信ログ取得・分類部112は、上記と同様に、ブラウザ操作部130に指示し、次の区分s2の分割命令列を再生させる。そして、そのとき記録された通信ログをログ取得部140から取得する。ここでは、ディレクトリd2とd3の通信ログが取得される。取得したログ群は、区分s2で発生したものとして、ログ分類表1300bに登録する。ログ分類表1300bには、ログ分類表1300aの登録に加え、区分識別子s2と、ログのディレクトリ名d2,d3とが対応付けて登録される。
以下、同様に、ログの取得と、ログ分類表の更新を交互もしくは並行して行う。
(C)ログ分類表(最終)は、最後の区分s6まで実行されたときの通信ログのディレクトリ名が登録された状態を示している。
通信ログ取得・分類部112は、上記と同様の手順を、さらに、区分s3,s4,s5,s6と順に再生する。そして、再生に伴って取得された通信ログは随時保存していき、再生が終わったら保存されたログのディレクトリ名を区分に対応付けてログ分類表1300cに登録する。なお、再生の途中で、命令列を正常に実行できないなどのエラーが起きたときは、その旨を通知する出力を行って、処理を終了する。
こうして、分割命令列ごとに、対応するブラウザ120とサーバ600間のリクエスト・レスポンスのログが得られる。
テスト核生成部113は、ログ分類表1300cの分類ごとに、ログを抽出し、抽出されたログのテスト対象のリクエストについてテスト核を生成する。ここでのテスト対象は、リクエストに含まれるフォームパラメータであるとする。フォームパラメータを有するリクエストについては、テスト核を生成し、フォームパラメータがないリクエストについては、テスト核は生成しない。なお、フォームパラメータかどうかは、リクエスト形式等で推測する。
生成されたテスト核には、識別子を与える。例えば、テスト核の元となった通信ログのディレクトリ名と、文字「−」と、パラメータ名とを連結した文字列などとすることができる。テスト核には、リクエストの改変など、テスト核における処理の実行手順が記述される。テスト核の一例を説明する。
(1) 横取りしたリクエストが、テスト対象のフォームパラメータを有するリクエストであることをURLやメソッドで確認する。違う場合は、そのリクエスト・レスポンスを通常のプロキシサーバと同様に中継する。
(2) テスト対象のリクエストのフォームパラメータの値を文字「a」を10,001個連結した文字列に変更したリクエストを生成し、送信する。
(3) サーバ600からのレスポンスのステータスコードが500以上のとき、エラーメッセージを出力する。
(4) 改変前の元のリクエストをサーバ600に送信し、レスポンスを受信する。
(5) ブラウザ120に、そのレスポンスを提供する。
(6) テスト核の処理が完了した旨を出力する。
テスト核には、このような処理手順が、テスト装置が実行可能な形式で記述される。例えば、通信横取り方式の実装上で動作する処理(プログラム)として出力する。
この例のテスト核では、リクエストがテスト対象のリクエストであれば、フォームパラメータの値が改変され、文字「a」が10,001個付加され、サーバ600に送信する。そして、そのレスポンスのステータスコードを確認し、500以上であればエラーメッセージが出力されるという処理が行われる。このように、このテスト核は、バッファー・オーバーランの脆弱性を発見するのに役立つテスト内容となっている。また、(4)以降の処理は、このテスト自体には直接関係ないが、元と同じ(正常な)リクエストを発行することで、サーバ側の状態を安定させやすくすることができる。
このテスト核の内容を、図6に示したログ群1200aに適用した場合について説明する。
ディレクトリd1のリクエストにはフォームパラメータがないので、d1については、テスト核を生成しない。
ディレクトリd2には、フォームパラメータが3つある。リクエストのボディ(最後の行)の「action=login&user=test&password=test」に含まれる「action」、「user」、「password」である。よって、ディレクトリd2については、それぞれのパラメータについて、識別子がd2−action、d2−user、d2−passwordという計3つのテスト核が生成される。
例として、テスト核d2−actionの生成について説明する。上記(1)から(6)に示したテスト核の内容を適用すると、テスト核d2−actionは次のようになる。
(1a) 横取りしたリクエストが、「POST /session.jsp HTTP/」で始まっている場合のみ、以降の処理を進める。違う場合は、そのリクエスト・レスポンスを通常のプロキシサーバと同様に、中継する。
(2a) リクエストのフォームパラメータ「action」の値を文字「a」を10,001個連結した文字列に変更したリクエストを生成し、送信する。なお、生成したリクエストのContent−Lengthヘッダフィールドなども送信前に適切に変更しておく。
(3a) レスポンスのステータスコードが500以上のとき、エラーメッセージを出力する。
(4a) 元のリクエストを送信し、レスポンスを受信する。
(5a) ブラウザ120側へそのレスポンスを提供する。
(6a) テスト核d2−actionの処理が終了した旨を出力する。
というテスト核d2−actionが生成される。なお、(1a)は上記の(1)に対応する。(2a),(3a),(4a),(5a),(6a)についても同様である。
この例では、テスト核の内容を予め決めていた。しかし、テスト核の内容は、別途入力として受付けるとすることもできる。また、ここでは、フォームパラメータを変更するとしたが、それ以外のテスト核を生成するとしてもよい。さらに、識別子は、一例であり、生成するテスト核の内容に応じて適宜設定してよい。
こうして、テスト核が生成されると、自動テスト生成部114は、各テスト核を適当なタイミングで実行させる自動テストを生成する。
自動テストは、入力された命令列(Selenese)と、テスト核とを協働させるテストである。すなわち、再現の実施には、ブラウザ操作部(Selenium RC)130を使い、テスト核の実施には、HTTPのプロキシサーバとして実装した通信横取り装置を使う。
このような自動テストを生成するため、自動テスト生成部140は、ブラウザ操作部(Selenium RC)130で命令列(Selenese)を再生させながら、再生途中のあるタイミングでテスト核を有効化させるテスト手順を生成する。テスト核を有効化するタイミングは、例えば、テスト核に対応する区分識別子に属する命令列を再生する直前とする。
また、再生の途中、あるいは、所定のタイミングでテスト核の処理が完了したかを確認する手順を加えるとしてもよい。確認のタイミングは、例えば、テスト核に対応する区分識別子に対応する命令列を再生した直後とする。
自動テスト生成手順の一例を説明する。
<1> テスト核の識別子から、対応するログのディレクトリ名を取得する。
<2> そのディレクトリ名に対応する区分識別子を、ログ分類表1300cから取得する。
<3> その区分識別子に対応する命令列行番号を、命令列分割表1100から取得する。以下、命令列行番号のうち、区分識別子に対応する最小の番号を最小行番号、最大の番号を最大行番号と、それぞれ呼ぶ。
<4> ブラウザ操作部(Selenium RC)130と、通信横取り装置を準備・起動する処理を出力する。
<5> 命令列(Selenese)のうち、最小行番号より前の命令列(テスト対象の区分識別子より前の区分識別子に属する命令列)をブラウザ操作部(Selenium RC)130で再生する処理を出力する。
<6> 通信横取り装置でテスト核を有効化する処理を出力する。
<7> 命令列(Selenese)のうち、最小行番号から最大行番号までの命令列をブラウザ操作部(Selenium RC)130で再生する処理を出力する。
<8> 有効化したテスト核で処理が完了した旨の出力がされたことを確認する処理を出力する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力するようにする。
<9> テスト核を無効化し、命令列(Selenese)のうち最大行番号から後の命令列(テスト対象の区分識別子より後ろの区分識別子に属する命令列)をブラウザ操作部(Selenium RC)130で再生する処理を出力する。
なお、<9>の処理は、なくても意味のある自動テストとなるが、命令列(Selenese)を最後まで再生することで、サーバ側の状態を安定しやすくすることができる。
この手順で生成した自動テストは、アプリケーションの自動テストを実行する自動テスト装置の制御部にロードされ、実行される。自動テスト装置の詳細については後述する。命令列(Selenese)はSelenium RCに、テスト核は通信横取り装置に、それぞれ出力される。
例として、テスト核d2−actionに適用した場合について説明する。上記の自動テスト生成手順の内容を適用すると、テスト核d2−actionに対応する自動テストの生成手順は次のようになる。
<1a> テスト核の識別子「d2−action」から、対応するログのディレクトリ名「d2」を取得する。
<2a> そのディレクトリ名「d2」に対応する区分識別子「s2」を、ログ分類表1300cから取得する。
<3a> その区分識別子「s2」に対応する命令列行番号「2〜5」を、命令列分割表1100から取得する。よって、最小行番号は「2」、最大行番号は「5」となる。
<4a> ブラウザ操作部(Selenium RC)130と、通信横取り装置を準備・起動する処理を出力する。
<5a> 命令列(Selenese)のうち、命令列行番号「1」の命令列をブラウザ操作部(Selenium RC)130で再生する処理を出力する。
<6a> 通信横取り装置でテスト核d2−actionを有効化する処理を出力する。
<7a> 命令列(Selenese)のうち、命令列行番号「2」から「5」までの命令列をブラウザ操作部(Selenium RC)130で再生する処理を出力する。
<8a> テスト核d2−actionで処理が完了した旨の出力がされたことを確認する処理を出力する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力するようにする。
<9a> テスト核d2−actionを無効化し、命令列行番号「6」から「14」までの命令列をブラウザ操作部(Selenium RC)130で再生する処理を出力する。なお、<1a>は上記の<1>に対応する。<2a>,<3a>,<4a>,<5a>,<6a>,<7a>,<8a>,<9a>についても同様である。
ここで、命令列(Selenese)やテスト核d2−actionといったデータは、生成する自動テストに含める。
上記テスト核d2−actionに対応する自動テストの生成手順により、生成される自動テストの処理は次のようになる。
<1−4a>ブラウザ操作部(Selenium RC)130と、通信横取り装置を準備・起動する。
<2−5a>命令列(Selenese)のうち、命令列行番号「1」の命令列をブラウザ操作部(Selenium RC)130で再生する。
<3−6a> 通信横取り装置でテスト核d2−actionを有効化する。
<4−7a> 命令列(Selenese)のうち、命令列行番号「2」から「5」までの命令列をブラウザ操作部(Selenium RC)130で再生する。
<5−8a> テスト核d2−actionで処理が完了した旨の出力がされたことを確認する。完了した旨の出力がされていない場合の処理は、正しくテストできなかった可能性がある旨のエラーメッセージを出力する。
<6−9a> テスト核d2−actionを無効化し、命令列行番号「6」から「14」までの命令列をブラウザ操作部(Selenium RC)130で再生する。なお、<1−4a>は上記の<4a>で出力された処理に対応する。<2−5a>,<3−6a>,<4−7a>,<5−8a>,<6−9a>についても同様である。
なお、上記では、自動テストを外部の自動テスト装置に出力するとしていた。しかし、自動テストを内部的に生成し、その実行と結果出力を同じ装置で行うとしてもよい。
以上のように、テスト生成装置100によれば、命令列(Selenese)を用意し、入力するだけで、その命令列によりリクエストされる範囲について、テスト核を組み合わせた自動テストを作成することができるようになる。
また、その自動テストは、テスト対象のリクエストが発生すると予測されるタイミングでのみテスト核を有効化するため、テスト対象以外のリクエストについて誤ってテストしてしまうことが少ない。さらに、テスト核でテスト対象のリクエストであるかどうかをURLやメソッドで確認すれば、誤ってテストが行われる可能性をより低くすることができる。
ここで、テスト生成装置100のアプリケーションテスト生成方法の処理手順を、フローチャートを用いて説明する。これまでの説明と同様に、テスト核を生成する対象は、リクエストのフォームパラメータとする。
図9は、アプリケーションテスト生成処理の手順を示したフローチャートである。
再現テストに用いられる命令列(Selenese)1000が入力されて、処理が開始される。
[ステップS01] 入力された命令列(Selenese)1000を解析し、区切り命令で命令列を分割する命令列分割処理を行う。分割された区分を識別する区分識別子と、その区分に属する命令列の行番号とを対応付けた命令列分割表1100が設定される。命令列分割処理の詳細は後述する。
[ステップS02] ステップS01で分割された区分ごとに、ブラウザ操作部(Selenium RC)130に、当該区分の分割命令列を実行させる。そして、そのときに得られた通信ログを保存するとともに、通信ログを分割命令列ごとに分類する通信ログ取得・分類処理を行う。再生された分割命令列の区分識別子と、このとき取得された通信ログを格納するディレクトリ名とを対応付けたログ分類表1300cが設定される。通信ログ取得・分類処理の詳細は後述する。
[ステップS03] ログ分類表1300cに基づき、区分識別子で識別される区分ごとに通信ログを抽出し、この通信ログに基づいてテスト核を生成する。例えば、通信ログに記録されるリクエストのうち、フォームパラメータを有するリクエストのフォームパラメータの値を改変するなどのテスト手順をテスト核として記述する。1つのリクエストに複数のフォームパラメータが含まれるときは、すべてのフォームパラメータについてテスト核を生成する。こうして生成されたテスト核には、テスト核を識別する識別子を設定しておく。なお、テスト核は、リクエストを改変する通信横取り装置が実行可能なプログラムとして記述しておく。
[ステップS04] 命令列(Selenese)と、ステップS03で生成されたテスト核とを組み合わせた自動テストを生成する。自動テストでは、再現を行う命令列(Selenese)1000を順次実行するとともに、命令列が属する区分にテスト核が設定されていたときは、このテスト核を有効化させるというテスト手順が生成される。また、このテスト核に対応する区分に属する命令列の実行が終了したときには、テスト核を無効化する手順も設定される。
以上の処理手順が実行されることにより、命令列(Selenese)1000から、所定の範囲の命令列実行時に、テスト核によるテストが実行される自動テストが生成される。
次に、命令列分割処理と通信ログ取得・分類処理について説明する。
図10は、命令列分割処理の手順を示したフローチャートである。
命令列(Selenese)1000が入力され、処理が開始される。
[ステップS11] 命令列(Selenese)を1行読込む。最初の処理であれば、行番号1の命令列が読込まれる。それ以降の処理であれば、前回処理を行った命令列の次の行番号の命令列が読込まれる。
[ステップS12] 命令列に記述される命令(コマンド)と、区切り命令に指定される命令とを照合する。区切り命令には、ブラウザ120が安定状態となったことを示唆する命令が指定される。例えば、ある状態となるまで、あるいは必要な情報が得られるまで「待つ」という命令が該当する。Seleneseであれば、「pause」、「open」、「・・・AndWait」、「waitFor・・・」などが該当する。照合した命令列が区切り命令であれば、処理をステップS13に進める。区切り命令でなければ、処理をステップS14に進める。
[ステップS13] 命令列が区切り命令であれば、前に区切り命令が出現した次の命令列からステップS12で検出された区切り命令列までを1区分として、命令列分割表1100に登録する。命令列分割表1100には、区分を識別する区分識別子に対応付けて、この区分に分割された命令列の行番号が設定される。分割された範囲の最小の行番号と、最大の行番号とを登録するとしてもよい。
[ステップS14] 次の命令列が有るかどうかを判定する。無であれば、処理をステップS15に進める。有であれば、処理をステップS11に戻し、次の命令列の処理を行う。
[ステップS15] どこにも区分分けされていない命令列が残っているかどうかを判定する。残っているときは、処理をステップS16に進める。残っていないときは、処理を終了する。
[ステップS16] どこにも区分分けされてない命令列が残っているときは、これらをまとめ、1つの区分を設定し、命令列分割表1100に登録する。その後、処理を終了する。
以上の処理手順が実行されることにより、区切り命令で命令列が分割され、命令列分割表1100が生成される。
次に、通信ログ取得・分類処理について説明する。
図11は、通信ログ取得・分類処理の手順を示したフローチャートである。
[ステップS21] ログ取得部140を起動する。
[ステップS22] 命令列分割表1100に基づき、ブラウザ操作部(Selenium RC)130で実行する分割命令列を指定する。最初に、処理対象の区分識別子sn(nは任意の整数)として、s1を指定する。
[ステップS23] 該当する区分識別子の範囲の命令列をブラウザ操作部(Selenium RC)130に実行させる。ブラウザ操作部(Selenium RC)130が命令列(Selenese)を実行する間、ログ取得部140は、ブラウザ120とサーバ600との間で交換されるリクエスト及びレスポンスの通信ログを記録している。
[ステップS24] 区分識別子の範囲の命令列の実行が終了した後、この範囲の命令列を実行中にログ取得部140が収集した通信ログを取得する。
[ステップS25] ステップS24で取得した通信ログを記憶部150に保存する。
[ステップS26] ログ分類表1300cに、ステップS25で取得した通信ログの識別情報(通信ログのディレクトリ名)と、区分識別子とを登録する。
[ステップS27] 命令列分割表1100に次の区分が登録されているかどうか、すなわち、次の区分識別子が有るかどうかを調べる。有であれば、処理をステップS28に進める。無であれば、処理を終了する。
[ステップS28] 次の区分識別子が有るときは、処理対象の区分識別子snとして、nの値を1増加させたs(n+1)を指定する。そして処理をステップS23に戻し、次の区分についての通信ログを取得する。
以上の処理手順が実行されることにより、区分ごとに命令列が実行され、取得された通信ログを分類したログ分類表1300cが設定される。
次に、この自動テストを実行する自動テスト装置について説明する。図12は、自動テスト装置の構成を示した図である。
自動テスト装置200は、制御部210、ブラウザ220、ブラウザ操作部230及び通信横取り装置240を有し、ネットワークを介して接続するサーバ600のアプリケーションテストを実行する。
制御部210は、自動テストの実行部であり、自動テストに基づいて、ブラウザ操作部230と通信横取り装置240を制御し、サーバ600に対するアプリケーションテストを制御する。
ブラウザ220は、ブラウザ120と同様に、サーバ600が提供するHTMLファイルや画像ファイル、音楽ファイルなどをダウンロードし、モニタ108、あるいは音声出力装置に再生出力する。ブラウザ操作部230は、制御部210に従って、命令列(Selenese)251で記述される命令列を実行し、ブラウザ220への操作命令などを自動的に発生させる。ここでは、ブラウザ操作方式の自動テストを行うテストツールとして、「Selenium RC」を用いる。通信横取り装置240は、HTTPプロキシサーバとして実装される。制御部210に従って、テスト核252の処理を実行し、入力されたリクエストを改変してサーバ600に送信するなどの処理を行う。
このような自動テスト装置200の動作及び自動テスト方法について、前述のテスト核d2−actionに対応する自動テストを実行させる場合で説明する。
ブラウザ操作部(Selenium RC)230と、通信横取り装置240とが準備・起動される。
準備が整った後、ブラウザ操作部(Selenium RC)230に、命令列(Selenese)251の行番号1を入力・再生させる。通信横取り装置140は通常のプロキシサーバと同様に、リクエスト・レスポンスを中継する。
次に、制御部210は、通信横取り装置240に、テスト核d2−actionを入力し、それを有効化するよう指示する。
続いて、制御部210は、ブラウザ操作部(Selenium RC)230に、命令列(Selenese)251の行番号2から5を入力・再生させる。このとき、サーバ600に送信されるリクエストのうちテスト核d2−actionが対象とするものは、通信横取り装置240で改変された後、サーバ600に送信される。
その後、テスト核d2−actionで処理が終了した旨の出力を確認する。出力されていない場合は、正しいテストができなかった可能性がある旨のエラーメッセージを出力する。処理が終了した旨の出力がされている場合は、テスト核d2−actionを無効化し、命令列(Selenese)の行番号6以降をブラウザ操作部(Selenium RC)230に入力・再生させる。
このように、自動テスト装置200は、利用者が実行制御を行うことなく、自動でアプリケーションテストを行うことができる。
なお、上記の説明では、自動テスト装置200と、テスト生成装置100とを別装置としたが、同一の装置に搭載することもできる。例えば、自動テスト装置200にテスト生成部110を搭載し、ブラウザ操作部230と、通信横取り装置240とを接続する。テスト生成部110は、ブラウザ操作部230をブラウザ操作部130、通信横取り装置240をログ取得部140として動作させ、自動テストを生成する。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、テスト生成装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読取り可能な記録媒体に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1) ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムにおいて、
コンピュータを、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段、
として機能させることを特徴とするアプリケーションテスト生成プログラム。(1、図1)
(付記2) 前記命令列分割手段は、前記リクエストに基づいて前記アプリケーション装置から前記レスポンスを受けた後の状態が安定状態となったことを示唆する命令を前記区切り命令とする、ことを特徴とする付記1記載のアプリケーションテスト生成プログラム。
(付記3) 前記命令列分割手段は、前記リクエストに基づいて前記アプリケーション装置から前記レスポンスを受けた後の状態が安定状態となったことを示唆する命令の次の実行順の命令を前記区切り命令とする、ことを特徴とする付記1記載のアプリケーションテスト生成プログラム。
(付記4) 前記命令列分割手段は、前記アプリケーション装置から送信される前記レスポンスの受信を待つことを指示する命令を前記区切り命令とする、ことを特徴とする付記2または3記載のアプリケーションテスト生成プログラム。
(付記5) 前記命令列分割手段は、前記アプリケーション装置から送信される前記レスポンスが受信できたことを示唆する命令を前記区切り命令とする、ことを特徴とする付記2または3記載のアプリケーションテスト生成プログラム。
(付記6) 前記自動テスト生成手段は、前記分割命令列を順次再生して前記ユーザエージェントに出力させるとともに、前記分割命令列に対し前記テスト核が設定されていなかったときは、前記テスト核を実行する実行部の動作を無効とし、前記分割命令列に対し前記テスト核が設定されていたときは、前記実行部の動作を有効とする手順を前記自動テストに組み込む、ことを特徴とする付記1または2記載のアプリケーションテスト生成プログラム。
(付記7) 前記自動テスト生成手段は、前記テスト核を生成する対象のリクエストを含む前記通信ログから前記リクエストに含まれる前記アプリケーション装置のアドレス情報を含む該リクエストを特徴付ける特徴情報を抽出し、前記特徴情報と、前記ユーザエージェントが送信した前記リクエストに含まれる特徴情報とを比較し、一致したときのみ前記ユーザエージェントが送信した前記リクエストの任意の部分の改変を行う手順を前記自動テストに組み込む、ことを特徴とする付記1記載のアプリケーションテスト生成プログラム。
(付記8) 前記自動テスト生成手段は、前記リクエストを改変するテスト終了時に、改変前の前記リクエストを前記アプリケーション装置に送信し、応答を得る手順を前記テスト核に組み込む、ことを特徴とする付記1記載のアプリケーションテスト生成プログラム。
(付記9) 前記自動テスト生成手段は、前記テスト核に対応する前記命令列の実行終了時に、該テスト核の処理が終了したかどうかを判断し、終了していないときはエラーを通知する手順を前記自動テストに組み込む、ことを特徴とする付記1記載のアプリケーションテスト生成プログラム。
(付記10) ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成方法において、
コンピュータに、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手順と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手順と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手順と、
を実行させることを特徴とするアプリケーションテスト生成方法。
(付記11) ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト装置において、
前記所定のサービスの提供を受けるユーザエージェントに対し、前記アプリケーション装置に対するテスト対象のリクエストの送信及び前記リクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、前記区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段と、
前記分割命令列ごとに、前記分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信した前記リクエストと、前記リクエストに対応して前記アプリケーション装置から送信された前記レスポンスと、を通信ログとして取得し、該通信ログ取得時に再生した前記分割命令列に対応付けて記憶手段に記憶し、前記通信ログを前記分割命令列ごとに分類したログ分類表を生成する通信ログ取得・分類手段と、
前記ログ分類表から、前記テスト対象のリクエストを発生させた前記命令列を含む前記分割命令列に対応付けられている前記通信ログを抽出し、抽出された前記通信ログに基づいて前記リクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記分割命令列と前記テスト核とを協働して実行させる自動テストを生成する自動テスト生成手段と、
前記ユーザエージェントと前記アプリケーション装置との間のリクエスト及びレスポンスを中継する中継手段の動作を制御し、前記ユーザエージェントに対し、前記分割命令列を再生して前記ユーザエージェントに前記所定の処理の実行を実行させるとともに、前記テスト核が生成された前記リクエストを送信する前記分割命令列の再生時には、対応する前記テスト核に基づいて前記リクエストの横取りと改変を前記中継手段に実行させる制御手段と、
を有することを特徴とするアプリケーションテスト装置。
10 テスト生成装置
11 命令列分割手段
12 通信ログ取得・分類手段
13 自動テスト生成手段
14 記憶手段
21 命令列
22 命令列分割表
23 ログ分類表
24 自動テスト
40 ユーザエージェント
50 通信ログ取得装置
60 サーバ

Claims (5)

  1. ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成プログラムにおいて、
    コンピュータを、
    記アプリケーション装置に対するテスト対象のリクエストの送信及びリクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を、前記所定のサービスの提供を受けるユーザエージェントに対して指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段、
    割命令列ごとに、分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信したリクエストと、リクエストに対応して前記アプリケーション装置から送信されたレスポンスと、を通信ログとして記憶手段に記憶し、記憶した通信ログと該通信ログ取得時に再生した分割命令列との対応関係を示すログ分類表を生成する通信ログ取得・分類手段、
    前記記憶手段から、前記テスト対象のリクエストを含む通信ログを抽出し、抽出された通信ログに基づいて前記テスト対象のリクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記ログ分類表に基づいて、該通信ログ取得時に再生した分割命令列を特定し、該分割命令列とテスト核とを協働して実行させる手順を記述した自動テストデータを生成する自動テスト生成手段、
    として機能させることを特徴とするアプリケーションテスト生成プログラム。
  2. 前記命令列分割手段は、リクエストに基づいて前記アプリケーション装置からレスポンスを受けた後の状態が安定状態となったことを示唆する命令を前記区切り命令とする、ことを特徴とする請求項1記載のアプリケーションテスト生成プログラム。
  3. 前記自動テスト生成手段は、分割命令列を順次再生して前記ユーザエージェントに出力させるとともに、分割命令列に対しテスト核が設定されていなかったときは、テスト核を実行する実行部の動作を無効とし、分割命令列に対しテスト核が設定されていたときは、前記実行部の動作を有効とする手順を前記自動テストデータに組み込む、ことを特徴とする請求項1または2記載のアプリケーションテスト生成プログラム。
  4. ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト生成方法において、
    コンピュータ
    記アプリケーション装置に対するテスト対象のリクエストの送信及びリクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を、前記所定のサービスの提供を受けるユーザエージェントに対して指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、区切り命令ごとに前記命令列を分割して、分割命令列を生成
    割命令列ごとに、分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信したリクエストと、リクエストに対応して前記アプリケーション装置から送信されたレスポンスと、を通信ログとして記憶手段に記憶し、記憶した通信ログと該通信ログ取得時に再生した分割命令列との対応関係を示すログ分類表を生成
    前記記憶手段から、前記テスト対象のリクエストを含む通信ログを抽出し、抽出された通信ログに基づいて前記テスト対象のリクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記ログ分類表に基づいて、該通信ログ取得時に再生した分割命令列を特定し、該分割命令列とテスト核とを協働して実行させる手順を記述した自動テストデータを生成する、
    プリケーションテスト生成方法。
  5. ネットワークを介して所定のサービスを提供するアプリケーション装置のテストのためのアプリケーションテスト装置において、
    記アプリケーション装置に対するテスト対象のリクエストの送信及びリクエストに対するレスポンスの受信に応じた処理を含む所定の処理の実行を、前記所定のサービスの提供を受けるユーザエージェントに対して指示する命令から成る命令列を取得し、前記命令列の表す処理が区切れる区切り命令を前記命令列から検出し、区切り命令ごとに前記命令列を分割して、分割命令列を生成する命令列分割手段と、
    割命令列ごとに、分割命令列に基づいて前記ユーザエージェントへの指示を再生して出力し、前記ユーザエージェントが送信したリクエストと、リクエストに対応して前記アプリケーション装置から送信されたレスポンスと、を通信ログとして記憶手段に記憶し、記憶した通信ログと該通信ログ取得時に再生した分割命令列との対応関係を示すログ分類表を生成する通信ログ取得・分類手段と、
    前記記憶手段から、前記テスト対象のリクエストを含む通信ログを抽出し、抽出された通信ログに基づいて前記テスト対象のリクエストの改変を含むテスト手順を記述したテスト核を生成するとともに、前記ログ分類表に基づいて、該通信ログ取得時に再生した分割命令列を特定し、該分割命令列とテスト核とを協働して実行させる手順を記述した自動テストデータを生成する自動テスト生成手段と、
    前記ユーザエージェントと前記アプリケーション装置との間のリクエスト及びレスポンスを中継する中継手段の動作を制御し、前記ユーザエージェントに対し、分割命令列を再生して前記ユーザエージェントに前記所定の処理を実行させるとともに、テスト核に対応する該分割命令列再生する時には、テスト核に基づいてリクエストの横取りと改変を前記中継手段に実行させる制御手段と、
    を有することを特徴とするアプリケーションテスト装置。
JP2009099703A 2009-04-16 2009-04-16 アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置 Active JP5463717B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009099703A JP5463717B2 (ja) 2009-04-16 2009-04-16 アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009099703A JP5463717B2 (ja) 2009-04-16 2009-04-16 アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置

Publications (2)

Publication Number Publication Date
JP2010250583A JP2010250583A (ja) 2010-11-04
JP5463717B2 true JP5463717B2 (ja) 2014-04-09

Family

ID=43312832

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009099703A Active JP5463717B2 (ja) 2009-04-16 2009-04-16 アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置

Country Status (1)

Country Link
JP (1) JP5463717B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5640752B2 (ja) * 2011-01-11 2014-12-17 富士通株式会社 攻撃模倣テスト方法、攻撃模倣テスト装置及び攻撃模倣テストプログラム
EP2715600B1 (en) 2011-05-31 2018-08-29 EntIT Software LLC Automated security testing
WO2014087493A1 (ja) * 2012-12-04 2014-06-12 株式会社日立製作所 テストパタン作成装置と作成方法及びソフトウェア検証装置と検証方法
EP3479248A4 (en) * 2016-06-29 2019-12-18 Synopsys, Inc. AUTOMATED HTTP USER FLOW SIMULATOR
KR102635847B1 (ko) * 2016-12-27 2024-02-08 주식회사 넥슨코리아 애플리케이션 테스트 자동화 장치 및 방법
US10984438B2 (en) * 2017-07-28 2021-04-20 Ingram Micro Inc. Technologies for automatically validating the functionality of offers in a cloud service brokerage system
JP7005278B2 (ja) * 2017-10-27 2022-01-21 株式会社エヌ・ティ・ティ・データ 異常ログ検出装置、異常ログの検出方法およびプログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3987076B2 (ja) * 2005-08-03 2007-10-03 富士通株式会社 テスト支援プログラム
JP4940791B2 (ja) * 2006-07-04 2012-05-30 富士通株式会社 テスト支援プログラム、テスト支援装置、およびテスト支援方法

Also Published As

Publication number Publication date
JP2010250583A (ja) 2010-11-04

Similar Documents

Publication Publication Date Title
JP5463717B2 (ja) アプリケーションテスト生成プログラム、アプリケーションテスト生成方法及びアプリケーションテスト装置
US7099939B2 (en) HTTP transaction monitor with sequence replay capacity
US6832220B1 (en) Method and apparatus for file searching, accessing file identifiers from reference page
US20020065911A1 (en) HTTP transaction monitor with edit and replay capacity
WO2012014284A1 (ja) テストシナリオ生成方法、テストシナリオ生成システム、及び、テストシナリオ生成プログラム
JP4940791B2 (ja) テスト支援プログラム、テスト支援装置、およびテスト支援方法
US20100058118A1 (en) Storage medium recording information reacquisition procedure generation program and information reacquisition procedure generation apparatus
US20020156881A1 (en) HTTP transaction monitor with replay capacity
JPH0981445A (ja) 情報管理装置
JP2006331044A (ja) シングルサインオン実現方法
JP2012008853A (ja) ウェブアプリケーションの操作再現方法およびシステム
US20130198333A1 (en) Method and device for recording and reproducing web operation
JP4023803B2 (ja) ウェブアプリケーション開発支援装置、データ処理方法及びプログラム
US20060155807A1 (en) System and method for creating web services from an existing web site
US20060149771A1 (en) Information processing system and communication retry method
JP2016536683A (ja) ウェブブラウザにおけるイベントの実行および表示
JP2008046776A (ja) ウェブコンテンツ転送方法、コンピュータ及びプログラム
JP4788768B2 (ja) Getメソッドで長いデータを取得する方法
JP6436705B2 (ja) テスト実行装置、テスト実行方法およびコンピュータプログラム
JP2006004136A (ja) Htmlファイル処理方法及びプログラム
JP4048736B2 (ja) 障害解析支援方法および装置
JP6436704B2 (ja) テスト実行装置、テスト実行方法およびコンピュータプログラム
JP2005222130A (ja) プログラム管理方法及び実施装置並びに処理プログラム
JP6079267B2 (ja) 中継サーバ、中継プログラム及び中継方法
JP5948955B2 (ja) 中継装置、情報再現プログラム及び情報再現方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130729

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130806

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131004

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131224

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140106

R150 Certificate of patent or registration of utility model

Ref document number: 5463717

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150