以下、添付図面を参照しながら、本発明を実施するための一つの形態について、説明する。
図1は、本実施形態のコンピュータネットワークシステムの構成図である。
図1に示すように、本実施形態のコンピュータネットワークシステムは、ウェブ負荷試験の対象となるウェブサーバ装置10と、そのウェブ負荷試験のためにそのウェブサーバ装置10にアクセス負荷を掛けるウェブ負荷試験装置20とからなる。両装置10、20は、互いに通信自在となるよう、ネットワークNを介して接続されている。
ウェブサーバ装置10は、周知のウェブサーバ機能が付加された汎用コンピュータである。従って、このウェブサーバ装置10は、ストレージユニット10a、CPU[Central Processing Unit]10b、メモリユニット10c、及び、通信アダプタ10d等のハードウエアを、内蔵している。このうち、ストレージユニット10aは、各種のプログラム及び各種のデータを記憶するユニットである。CPU10bは、ストレージユニット内のプログラムに従って処理を行うユニットである。メモリユニット10cは、ストレージユニットから読み出されたプログラムがキャッシュされたりCPU10bの作業領域が展開されたりするユニットである。通信アダプタ10dは、ネットワークN上の他のコンピュータとの間でデータの遣り取りをするためのユニットである。
そして、ウェブサーバ装置10のストレージユニット10aは、基本ソフトウエア11、ウェブページデータ12、及び、ウェブサーバプログラム13を、記憶している。基本ソフトウエア11は、通信アダプタ10dにおけるデータの入出力の管理や、ストレージユニット10a及びメモリユニット10cの記憶領域の管理といった基本的な機能を多くのアプリケーションソフトウエアに提供するためのソフトウエアである。ウェブページデータ12は、ウェブページを表示するためのデータであり、HTML[HyperText Markup Language]データや、画像データである。このウェブページデータ12の中には、別のウェブページへ飛ぶためのリンクを表示する情報を内部に含んでいるウェブページデータ12が含まれていても良い。ウェブサーバプログラム13は、図示せぬウェブクライアント装置からの要求に応じてウェブページデータ12を送信するためのプログラムである。具体的には、このウェブサーバプログラム13(に従ったCPU10b)は、通信アダプタ10dを通じて図示せぬウェブクライアント装置から要求を受けると、要求されたウェブページデータ12をストレージユニット10aから読み出し、通信アダプタ10dを通じて要求元のウェブクライアント装置へ送信する。
ウェブ負荷試験装置20は、ウェブ負荷試験ツールが付加されたパーソナルコンピュータである。従って、このウェブ負荷試験装置20は、液晶ディスプレイ等の表示装置20aと、キーボードやマウス等の入力装置20bと、これら装置20a,20bに接続される本体とからなる。また、その本体は、ストレージユニット20c、CPU20d、メモリユニット20e、及び、通信アダプタ20f等のハードウエアを、内蔵している。
そして、ウェブ負荷試験装置20のストレージユニット20cは、基本ソフトウエア21、ウェブブラウザ22,及び、ウェブ負荷試験ツールソフトウエア23を記憶している。基本ソフトウエア21は、ウェブサーバ装置10の基本ソフトウエア11と同等の機能を発揮するソフトウエアである。ウェブブラウザ22は、操作者からの指示に従ってウェブサーバ装置10からウェブページデータ12を取得してウェブページを表示するためのプログラムである。より具体的には、ウェブブラウザ22(に従ったCPU20d)は、ウェブページ内のリンクボタンのクリックやウェブブラウザ画面へのURL[Uniform Resource Locator]の入力などの操作者からの指示、又は、ウェブページデータ12内に記述されたイメージタグやフレームタグなどによるウェブページデータ12の取得の指示があると、その指示においてURLで指定されたウェブページデータ12の送信を要求するリクエストメッセージをウェブサーバ装置10へ送信し、そのウェブサーバ装置10からレスポンスメッセージを受信して、そのレスポンスメッセージのボディ内のウェブページデータ12に基づいて、ウェブページを表示装置20aに表示する。
ウェブ負荷試験ツールソフトウエア23は、パーソナルコンピュータをウェブ負荷試験装置として機能させるためのプログラム及びデータである。このウェブ負荷試験ツールソフトウエア23は、シナリオ作成モジュール23a及び負荷シミュレータ23bを、含んでいる。
シナリオ作成モジュール23aは、ウェブ負荷試験のために負荷シミュレータ23bが生成する後述の仮想プロキシサーバに対して与えられるシナリオを作成するためのモジュールプログラムである。なお、このシナリオ作成モジュール23a自身も、後述の仮想プロキシサーバを生成する機能を、有している。シナリオは、詳しくは後述するが、簡単に説明すると、仮想プロキシサーバが試験対象となるウェブサーバ装置10内のウェブページデータ12をリクエストする順番を定義したものである。このシナリオ作成モジュール23aに従ってCPU20dが実行する処理の内容については、図3乃至図6を用いて後述する。
負荷シミュレータ23bは、試験対象となるウェブサーバ装置10にアクセス負荷を掛けるためのモジュールプログラムである。より具体的には、負荷シミュレータ23b(に従ったCPU20d)は、仮想的にプロキシサーバとして機能するスレッド(シナリオ取得時の仮想プロキシサーバとウェブサーバとの間の通信を再現するスレッド)を複数生成し、それら複数の仮想プロキシサーバにシナリオを与えることによって、それら仮想プロキシサーバに対し、そのシナリオ通りにリクエストメッセージの送信とレスポンスメッセージの受信とを行わせる。また、負荷シミュレータ23bは、各仮想プロキシサーバがそのウェブサーバ装置10から受信したレスポンスメッセージそのものを保存したり、レスポンスのログを録ったりする。なお、本発明でいう仮想プロキシサーバは、シミュレーション実行時には、一般的に言われるプロキシサーバのようにウェブブラウザとウェブサーバとの通信を中継する処理を行うわけではないが、便宜上、仮想プロキシサーバと呼ぶことにする。仮想プロキシサーバが実行する処理の内容については、図8及び図9を用いて後述する。
ここで、シナリオ作成モジュール23aによる処理の内容を説明する前に、シナリオ作成モジュール23aとウェブブラウザ22と仮想プロキシサーバとの関係について説明する。
図2は、シナリオ作成時のウェブブラウザ22と仮想プロキシサーバ23cとウェブサーバ装置10との関係図である。
図2に示すように、仮想プロキシサーバ23cは、ウェブブラウザ22とウェブサーバ装置10との間でHTTP[HyperText Transfer Protocol]メッセージを中継する。より具体的には、仮想プロキシサーバ23cは、ウェブブラウザ22からウェブサーバ装置10宛のリクエストメッセージを受信すると、そのリクエストメッセージの内容をチェックし、必要に応じて加工した後、送信元に関する情報を仮想プロキシサーバ23cのものに書き換えて、ウェブサーバ装置10に送信する。また、仮想プロキシサーバ23cは、ウェブサーバ装置10からレスポンスメッセージを受信すると、そのレスポンスメッセージの内容をチェックし、必要に応じて加工した後、そのレスポンスメッセージを、ウェブブラウザ22に送信する。ここで、仮想プロキシサーバ23cは、ウェブサーバ装置10から受信したレスポンスメッセージのステータスコードが300番代であった場合には、ウェブブラウザ22にレスポンスメッセージを送信せず、ロケーションヘッダに記されたアドレス宛に再度リクエストメッセージを送信するようになっている。また、仮想プロキシサーバ23cは、ウェブサーバ装置10から受信したレスポンスメッセージのステータスコードが401番であった場合には、ウェブブラウザ22にそのレスポンスメッセージを送信し、ウェブブラウザ22からユーザ認証に係る情報を含んだリクエストメッセージを受信して、ウェブサーバ装置10にその情報を送信するようになっている。そして、仮想プロキシサーバ23cは、ウェブサーバ装置10へのリクエストメッセージの送信、及び、ウェブサーバ装置10からのレスポンスメッセージの受信を行うたびに、シナリオ作成モジュール23aへ、リクエストメッセージ及びレスポンスメッセージを引き渡すようになっている。
一方、ウェブブラウザ22は、図示せぬウェブブラウザ画面のURL入力欄にURLが入力されたり、ウェブページ上のリンクボタンがクリックされたり、ウェブページデータ12内に記述されたフレームタグやイメージタグによりウェブページデータ12の取得が指示されたりすることにより、リクエストメッセージを仮想プロキシサーバ23cに送信する。また、ウェブブラウザ22は、仮想プロキシサーバ23cからレスポンスメッセージを受信すると、そのレスポンスボディがHTMLデータや画像データであれば、図示せぬウェブブラウザ画面にウェブページや画像を表示する。ここで、ウェブブラウザ22が、インターネットエクスプローラ(マイクロソフト社商標)であれば、HTMLで記述されたウェブページデータ12のリクエストを行うごとにその旨をシナリオ作成モジュール23aに通知するコンポーネントプログラム(図示略)を、含んでいる。そのコンポーネントプログラム(図示略)は、HTMLデータ以外のウェブページデータ(例えば、画像データやスタイルシートデータ)をリクエストするときには、その種の通知を行わないようになっている。さらに、そのコンポーネントプログラム(図示略)は、HTMLデータ内に記述されているイメージタグに基づく画像データのような、ウェブページの表示を完了させるのに必要な全てのウェブページデータ12(HTMLデータを除く)を取得すると、その旨をシナリオ作成モジュール23aに通知するようにもなっている。なお、インターネットエクスプローラにおいては、HTMLデータとそれに付随するHTMLデータ以外のデータとを取得する一連の行為は、ナビゲートと称されている。本実施形態のウェブブラウザ22は、インターネットエクスプローラのように、ナビゲートが一つ行われるごとにそのナビゲートの開始通知及び終了通知を行うコンポーネントプログラムを、含んでいる。
以上のように構成されるコンピュータネットワークシステムにおいて、ウェブ負荷試験装置20のCPU20dは、ウェブ負荷試験を行おうとする操作者によって入力装置20bが操作されることにより、シナリオ作成モジュール23aの起動が指示されると、シナリオ作成モジュール23aをストレージユニット20cから読み出し、シナリオ作成モジュール23aの動作を開始させる。
図3乃至図5は、シナリオ作成モジュール23aによる処理の流れを示す図である。
シナリオ作成処理の開始後、最初のステップS101では、シナリオ作成モジュール23a(を実行したCPU20d)は、作業画面をウインドウ内に表示する。この作業画面は、シナリオ作成に関する操作を行うための画面であり、図示していないが、幾つかのボタンを含んでいる。この作業画面に含まれるボタンには、ウェブブラウザ22を利用したウェブサーバ装置10へのアクセスを開始する前にクリックすべき開始ボタンと、そのアクセスを終了した後でクリックすべき保存ボタンとが、含まれている。
次のステップS102では、シナリオ作成モジュール23aは、ステップS101で表示した図示せぬ作業画面内の開始ボタンのクリックによる作成開始指示があるまで、待機する。そして、作成開始指示があると、シナリオ作成モジュール23aは、ステップS103へ処理を進める。
ステップS103では、シナリオ作成モジュール23aは、仮想プロキシサーバ23cとして動作するスレッドを生成する(図2参照)。
次のステップS104では、シナリオ作成モジュール23aは、作業画面とは別のウインドウに、ウェブブラウザ22を起動する。このように別ウインドウで起動したウェブブラウザ22により、作業者は、作業画面を意識することなく、ウェブサーバ装置10が提供するウェブページをサーフィン(閲覧)することができる。
次のステップS105では、シナリオ作成モジュール23aは、二つのテーブルをメモリユニット20e上に新規生成する。ここで生成される二つのテーブルは、ウェブブラウザ22からナビゲート開始通知とともに引き渡されるリクエストヘッダの内容の一部を記憶するためのナビゲート管理テーブル、及び、仮想プロキシサーバ23cから引き渡されるリクエストヘッダを含むリクエストメッセージを記憶するためのアクセス管理テーブルである。
図6は、ナビゲート管理テーブル31のデータ構造の一例を示す図である。
図6に示すように、ナビゲート管理テーブル31の各レコードは、「ナビゲートID」、「ソースID」、「URL」、「リクエストヘッダ」及び「リクエストデータ」の各フィールドを、有している。「ナビゲートID」フィールドは、そのナビゲート(という一つの単位)を一意に特定するための識別情報であるナビゲートIDが記録されるフィールドである。なお、本実施形態では、このナビゲートIDは、ナビゲートの順番を特定する自然数の番号となっている。「ソースID」フィールドは、そのナビゲートによるウェブページを表示する直前に表示されていたウェブページについてのナビゲートIDがソースIDとして記録されるフィールドである。すなわち、そのナビゲートの動作元となった画面を記録している意味を持つ。なお、図6では、「ソースID」フィールドに「−1」が格納されているレコードが存在しているが、これは、そのレコードにて示されるナビゲートよりも前のナビゲートが存在していないこと(すなわち、そのナビゲートが第一回目であること)を示している。「URL」フィールドは、そのナビゲートに係る最初のリクエストで指定されたURL(すなわち、HTMLで記述されたウェブページデータ12のURL)が記録されるフィールドである。「リクエストヘッダ」フィールドは、そのナビゲートに係る最初のリクエストのリクエストヘッダが記録されるフィールドである。なお、このナビゲート管理テーブル31は、ウェブブラウザ22から引き渡されるデータを管理しているものであるため、このフィールドの中に格納されるリクエストヘッダのデータ内容は、ブラウザ情報であるUser-Agentとなる。「リクエストデータ」フィールドは、そのナビゲートに係る最初のリクエストのリクエストデータが記録されるフィールドである。なお、リクエストデータは、リクエストメッセージのボディに格納されるデータである。
図7は、アクセス管理テーブル32のデータ構造の一例を示す図である。
図7に示すように、アクセス管理テーブル32の各レコードは、「アクセスID」、「ナビゲートID」、「URL」、「リクエストヘッダ」及び「リクエストデータ」の各フィールドを、有している。「アクセスID」フィールドは、仮想プロキシサーバ23cがリクエストメッセージを送信してレスポンスメッセージを受信するまでの一連の行為を一つのアクセスと勘定する場合において、そのアクセスを一意に特定するための識別情報が記録されるフィールドである。なお、本実施形態では、このアクセスIDは、アクセスの順番を特定する自然数の番号となっている。「ナビゲートID」フィールドは、そのアクセスが、ウェブブラウザ22からの或るナビゲートに係る最初のリクエストに基づくものである場合に、そのナビゲートのナビゲートIDが記録されるフィールドである。但し、そのアクセスが、或るナビゲートに係る最初のリクエストに基づくものではない場合(例えば、301番のステータスコードに基づく別URLへのアクセスである場合)、「ナビゲートID」フィールドには、結びつくナビゲートIDが無いという意味で、後述するように「−1」が記録される。「URL」フィールドは、そのアクセスに係るリクエストで指定されたURLが記録されるフィールドである。なお、このフィールドに記録されるURLは、上記のナビゲートに係るURLと異なり、HTMLで記述されたウェブページデータ12ではないデータ12のURLである場合もある。「リクエストヘッダ」フィールドは、そのアクセスに係るリクエストのリクエストヘッダが記録されるフィールドである。例えば、User-Agentに関わるデータ以外に、ホストヘッダに関わるデータなどがこの「リクエストヘッダ」フィールドに格納されることになる。「リクエストデータ」フィールドは、そのアクセスに係るリクエストのリクエストデータが記録されるフィールドである。なお、ファイルアップロード処理時のアップロードデータの内容も、この「リクエストデータ」フィールドに格納されることになる。
シナリオ作成モジュール23aは、図6及び図7に示すようなテーブル31、32を作成した後、図3のステップS106へ処理を進める。但し、この時点では、これらテーブル31、32にはレコードが1つも記録されていない。すなわち、ステップS105では、新規のテーブル31、32が生成される。
ステップS106では、シナリオ作成モジュール23aは、ステップS101で表示された図示せぬ作業画面内の保存ボタンのクリックによる保存指示があったか否かを、判別する。そして、保存指示がなかった場合、シナリオ作成モジュール23aは、ステップS106からステップS107へ処理を分岐させる。
ステップS107では、シナリオ作成モジュール23aは、ウェブブラウザ22(を実行したCPU20d)からナビゲート開始通知があったか否かを、判別する。なお、このナビゲート開始通知は、前述したように、ウェブブラウザ22がナビゲート開始前(HTMLで記述されたウェブページデータ12のリクエスト前)に送信してくる通知である。そして、ウェブブラウザ22からナビゲート開始通知がなかった場合、シナリオ作成モジュール23aは、ステップS107から処理を分岐して、ステップS106へ処理を戻す。
そして、ステップS106及びS107の処理ループの実行中、ウェブブラウザ22からナビゲート開始通知があった場合、シナリオ作成モジュール23aは、ステップS107からステップS108へ処理を進める。
ステップS108では、シナリオ作成モジュール23aは、図6のナビゲート管理テーブル31で使われていない新規のナビゲートIDを、発行する。
次のステップS109では、シナリオ作成モジュール23aは、ウェブブラウザ22からナビゲート開始通知とともに受け取ったリクエストヘッダの一部(URLとユーザエージェント情報)を、ステップS108で発行されたナビゲートIDとともに、図6のナビゲート管理テーブル31に登録する。
従って、ステップS107を実行するシナリオ作成モジュール23a(CPU20d)は、前述した第1の取得手段に相当し、ステップS108及びS109を実行するシナリオ作成モジュール23a(CPU20d)は、前述した第1の記憶手段に相当している。
次のステップS110では、シナリオ作成モジュール23aは、ステップS109でナビゲート管理テーブル31に登録したURLを、処理対象として特定する。
次のステップS111では、シナリオ作成モジュール23aは、仮想プロキシサーバ23cからリクエストメッセージが引き渡されるまで、待機する。なお、このリクエストメッセージは、仮想プロキシサーバ23cからウェブサーバ装置10に送信されるメッセージである。そして、仮想プロキシサーバ23cからリクエストメッセージを受け取ると、シナリオ作成モジュール23aは、ステップS112へ処理を進める。
ステップS112では、シナリオ作成モジュール23aは、図7のアクセス管理テーブル32で使われていない新規のアクセスIDを、発行する。
次のステップS113では、シナリオ作成モジュール23aは、ステップS111で仮想プロキシサーバ23cから受け取ったリクエストメッセージ(URL、リクエストヘッダ及びリクエストデータ)を、ステップS112で発行されたアクセスIDとともに、図7のアクセス管理テーブル32に登録する。
従って、ステップS111を実行するシナリオ作成モジュール23a(CPU20d)は、前述した第2の取得手段に相当し、ステップS112及びS113を実行するシナリオ作成モジュール23a(CPU20d)は、前述した第2の記憶手段に相当している。
次のステップS114では、シナリオ作成モジュール23aは、ステップS111で仮想プロキシサーバ23cから受け取ったリクエストメッセージ内のURLと、ステップS110で処理対象として特定したURLとを、比較する。
次のステップS115では、シナリオ作成モジュール23aは、ステップS114での比較の結果、URL同士が一致するか否かを、判別する。URL同士が一致していなかった場合、シナリオ作成モジュール23aは、ステップS115からステップS116へ処理を分岐させる。
ステップS116では、シナリオ作成モジュール23aは、ステップS113で図7のアクセス管理テーブル32に登録したリクエストメッセージのレコードの「ナビゲートID」フィールドに、「−1」を記録する。
次のステップS117では、シナリオ作成モジュール23aは、仮想プロキシサーバ23cからレスポンスメッセージが引き渡されるまで、待機する。なお、このレスポンスメッセージは、ウェブサーバ装置10から仮想プロキシサーバ23cに送信されるメッセージである。そして、仮想プロキシサーバ23cからレスポンスメッセージを受け取ると、シナリオ作成モジュール23aは、ステップS123へ処理を進める。
一方、ステップS115において、ステップS114での比較の結果、URL同士が一致していた場合、シナリオ作成モジュール23aは、ステップS118へ処理を進める。
ステップS118では、シナリオ作成モジュール23aは、ステップS109で図6のナビゲート管理テーブル31に登録したナビゲートIDを、ステップS113で図7のアクセス管理テーブル32に登録したリクエストメッセージのレコードの「ナビゲートID」フィールドに、記録する。
従って、ステップS115及びS118を実行するシナリオ作成モジュール23a(CPU20d)は、前述した対応付け手段に相当している。
次のステップS119では、シナリオ作成モジュール23aは、ステップS113で図7のアクセス管理テーブル32に登録したリクエストメッセージのリクエストヘッダで、ステップS109で図6のナビゲート管理テーブル31に登録したリクエストヘッダを、更新する。また、シナリオ作成モジュール23aは、ステップS113で図7のアクセス管理テーブル32に登録したリクエストメッセージのリクエストデータを、ステップS109で図6のナビゲート管理テーブル31に登録したナビゲートIDのレコードの「リクエストデータ」に、記録する。
次のステップS120では、シナリオ作成モジュール23aは、仮想プロキシサーバ23cからレスポンスメッセージが引き渡されるまで、待機する。なお、このレスポンスメッセージは、ウェブサーバ装置10から仮想プロキシサーバ23cに送信されるメッセージである。そして、仮想プロキシサーバ23cからレスポンスメッセージを受け取ると、シナリオ作成モジュール23aは、ステップS121へ処理を進める。
ステップS121では、シナリオ作成モジュール23aは、ステップS120で仮想プロキシサーバ23cから受け取ったレスポンスメッセージのステータスコードが300番代及び401番のうちの何れかであるか否かを、判別する。そして、レスポンスメッセージのステータスコードが300番代及び401番のうちの何れでもなければ、シナリオ作成モジュール23aは、ステップS121からステップS123へ処理を分岐させる。一方、レスポンスメッセージのステータスコードが300番代及び401番のうちの何れかであった場合、シナリオ作成モジュール23aは、ステップS122へ処理を進める。
ステップS122では、シナリオ作成モジュール23aは、ステップS120で仮想プロキシサーバ23cから受け取ったレスポンスメッセージのロケーションヘッダの中のURLを、処理対象として特定する。その後、シナリオ作成モジュール23aは、ステップS123へ処理を進める。
ステップS123では、シナリオ作成モジュール23aは、ウェブブラウザ22からナビゲート終了通知があったか否かを、判別する。なお、このナビゲート終了通知は、前述したように、ウェブブラウザ22がナビゲート終了後(HTMLで記述されたウェブページデータ12とそれに付随するHTMLデータ以外のデータを全て取得した後)に送信してくる通知である。そして、ウェブブラウザ22からナビゲート終了通知がなかった場合、シナリオ作成モジュール23aは、ステップS123から処理を分岐して、ステップS111へ処理を戻す。
そして、ステップS111乃至S123の処理ループの実行中、ウェブブラウザ22からナビゲート終了通知があると、シナリオ作成モジュール23aは、ステップS123からステップS106へ処理を戻す。
そして、ステップS106及びS107の処理ループの実行中、ステップS101で表示された図示せぬ作業画面内の保存ボタンのクリックによる保存指示があった場合、シナリオ作成モジュール23aは、ステップS106からステップS124へ処理を進める。
ステップS124では、シナリオ作成モジュール23aは、図7のアクセス管理テーブル32を、シナリオテーブルとしてストレージユニット20cに保存する。また、シナリオ作成モジュール23aは、図6のナビゲート管理テーブル31も、ストレージユニット20cに保存し、このナビゲート管理テーブル31をシナリオテーブル32に関連付けておく。このようにして各テーブル31、32をストレージユニット20cに保存した後、シナリオ作成モジュール23aは、図3乃至図5に係る処理を終了する。
このようにCPU20dにより実行されるシナリオ作成モジュール23aによると、操作者は、図示せぬ作業画面上の開始ボタンをクリックして、ウェブブラウザ画面上でウェブページをサーフィン(閲覧)して、図示せぬ作業画面上の保存ボタンをクリックすれば、ナビゲート管理テーブル31とシナリオテーブル32とを作成することができる。
また、ウェブ負荷試験装置20のCPU20dは、作成したナビゲート管理テーブル31とシナリオテーブル32とを用いたウェブ負荷試験を行おうとする操作者によって入力装置20bが操作されることにより、負荷シミュレータ23bの起動が指示されると、負荷シミュレータ23bをストレージユニット20cから読み出し、負荷シミュレータ23bの動作を開始させる。
負荷シミュレータ23b(に従ったCPU20d)は、まず、操作者から、入力装置20bを通じて、ウェブ負荷試験に用いるシナリオテーブル32を指定する情報を、受け付け、そのシナリオテーブル32とそれに関連するナビゲート管理テーブル31とをストレージユニット20cから読み出す。続いて、負荷シミュレータ23bは、仮想的にプロキシサーバとして機能するスレッドを、メモリユニット20e上に複数生成し、それら複数の仮想プロキシサーバ23cに対し、読み出したシナリオテーブル32及びナビゲート管理テーブル31を引き渡す。仮想プロキシサーバ23cは、これらのテーブル31、32を受けて、ウェブサーバ装置10へのアクセスを開始する。
図8及び図9は、仮想プロキシサーバ23cによるシミュレーション実行時の処理の流れを示す図である。
処理開始後、仮想プロキシサーバ23c(に従ったCPU20d)は、第1の処理ループL1を実行する。第1の処理ループL1では、仮想プロキシサーバ23cは、負荷シミュレータ23bから引き渡されたシナリオテーブル32の全てのレコードについて、一つずつ、順に、ステップS201乃至S210からなる処理を、実行する。
ステップS201では、仮想プロキシサーバ23cは、処理対象レコードの「ナビゲーションID」フィールドの値を、変数nに代入する。
次のステップS202では、変数nの代入値が「1」であるか否かを、判別する。そして、変数nの代入値が「1」であった場合、仮想プロキシサーバ23cは、ステップS202からステップS209へ処理を分岐させる。一方、変数nの代入値が「2」以上又は「−1」であった場合、仮想プロキシサーバ23cは、ステップS203へ処理を進める。
ステップS203では、仮想プロキシサーバ23cは、変数nの代入値が「−1」であるか否かを、判別する。そして、変数nの代入値が「−1」であった場合、仮想プロキシサーバ23cは、ステップS203からステップS209へ処理を分岐させる。
ステップS209では、仮想プロキシサーバ23cは、処理対象レコードの「リクエストヘッダ」及び「リクエストデータ」の各フィールドの値から、リクエストメッセージを生成し、試験対象のウェブサーバ装置10へ送信する。その後、仮想プロキシサーバ23cは、ウェブサーバ装置10からレスポンスメッセージを受信すると、ステップS210へ処理を進める。
ステップS210では、仮想プロキシサーバ23cは、ステップS208でウェブサーバ装置10から受信したレスポンスメッセージを、それにアクセスIDを対応付けて、図示せぬワークテーブルに記録する。その後、仮想プロキシサーバ23cは、第1の処理ループL1におけるこの処理対象レコードに対する処理を終了する。
一方、ステップS203において、変数nの代入値が「2」以上であった場合、仮想プロキシサーバ23cは、ステップS204へ処理を進める。
ステップS204では、仮想プロキシサーバ23cは、図6のナビゲート管理テーブル31の中から、変数nの代入値と同じ値のナビゲートIDを持つレコードを、読み出す。
次のステップS205では、仮想プロキシサーバ23cは、ステップS204で読み出したレコードの「ソースID」フィールドの値を、変数mに代入する。
次のステップS206では、仮想プロキシサーバ23cは、図7のシナリオテーブル(アクセス管理テーブル)32の中から、変数mの代入値と同じ値を「ナビゲートID」フィールドに持つレコードを、読み出す。
次のステップS207では、仮想プロキシサーバ23cは、ステップS209でレスポンスメッセージが記録される図示せぬワークテーブルから、ステップS206で読み出したレコードの「アクセスID」フィールドの値と同じアクセスIDに対応付けられたレスポンスメッセージを、取得する。
次のステップS208では、仮想プロキシサーバ23cは、ステップS207で取得したレスポンスメッセージの中から、パラメータ(パラメータ名、パラメータ値)を特定し、処理対象レコードの「リクエストヘッダ」及び「リクエストデータ」の各フィールドの値に含まれるパラメータ(パラメータ名=パラメータ値)を、その特定したパラメータで更新する。その後、仮想プロキシサーバ23cは、ステップS209へ処理を進める。
仮想プロキシサーバ23cは、図7のシナリオテーブル32の全てのレコードについて、ステップS201乃至S210からなる処理を、実行し終えると、第1の処理ループL1から離脱し、図8及び図9に係る処理を終了する。
本実施形態のコンピュータネットワークシステムが、以上に説明したように構成されるため、以下のように動作する。例えば、仮想プロキシサーバ23cが、図7のシナリオテーブル32における「アクセスID」フィールドの値が「4」であるレコードに係るリクエストメッセージを、ウェブサーバ装置10に送信する場合、その送信の直前に、仮想プロキシサーバ23cは、そのレコードの「ナビゲートID」フィールドと同じ値「2」を「ナビゲートID」フィールドに持つレコードを、図6のナビゲート管理テーブル31から特定するとともに、更に、その特定したレコードの「ソースID」フィールドと同じ値「1」を「ナビゲートID」フィールドに持つレコードを、図7のシナリオテーブル32から特定する(ステップS204〜S206)。そして、仮想プロキシサーバ23cは、特定したレコードの「アクセスID」フィールドの値「1」と同じアクセスIDに対応するレスポンスメッセージを、そのリクエストメッセージの送信前に既に受信しているレスポンスメッセージの中から取得する(ステップS207)。そして、仮想プロキシサーバ23cは、取得したレスポンスメッセージ内のレスポンスパラメータで、ウェブサーバ装置10に送信しようとするリクエストメッセージのリクエストパラメータを更新し(ステップS208)、ウェブサーバ装置10へ送信する(ステップS209)。
このように、本実施形態のウェブ負荷試験装置20により生成されたシナリオテーブル32とナビゲート管理テーブル31とによれば、仮想プロキシサーバ23cは、図7のシナリオテーブル32においてアクセスIDが「4」であるレコードと「1」であるレコードとの間に幾つかレコードが存在していても、アクセスID「4」に対応するリクエストメッセージのリクエストパラメータに対して上書きすべきパラメータを含んでいるレスポンスメッセージを、的確に特定することができる。
また、例えば、シナリオ作成時にウェブブラウザ22からファイルアップロードがあった場合でも、ナビゲート管理テーブル31には、前述したように、ウェブブラウザ22から引き渡されるブラウザ情報のデータしか登録されないため、仮想プロキシサーバ23cがこのナビゲート管理テーブル31をそのままシナリオとして使用してしまうと、ファイルアップロードが正常に行われないこととなってしまう。しかし、本実施形態によれば、ナビゲート管理テーブル31において、ウェブブラウザ22から引き渡されたデータが、仮想プロキシサーバ23cから引き渡されるデータ(アップロードデータの内容を含んだデータ)と対応付けられるので(ステップS119)、ウェブブラウザ22から引き渡されるデータのみでは再現できないファイルアップロードのような処理も、シミュレーションとして再現することが可能になる。
従って、本実施形態のウェブ負荷試験装置20によれば、ウェブ負荷試験で負荷シミュレータ23bにより生成される仮想プロキシサーバ23cがリクエストメッセージの送信とレスポンスメッセージの受信とを適切に行えるシナリオが、作成できる。