ロードテスト
ロードテストは、単体テストやWebテストで作成したテストケースに対して負荷をかけ、そのシナリオのパフォーマンスを調べるための機能を提供しています。単体テストのテストケースを利用してロードテストを行う場合には、例えばデータベースアクセスを伴うコンポーネントをテストして、データベースサーバーのみのパフォーマンスを計測したり、レセプトのような複雑なビジネス処理を行うコンポーネントをテストして、アプリケーションサーバーのみのパフォーマンスを計測したりといったことを行うことができます。Webテストのテストケースを利用してロードテストを行う場合には、Webアプリケーション全体のスループットなどを計測することができます。
では、ロードテストの中身についてみていきたいと思います。次の図8、図9はそれぞれ単体テスト、Webテストを利用して構成されたロードテストの例です。
1つのロードテストは大きく、シナリオ、カウンタセット、実行設定の3つで構成されていることが分かります。
シナリオ
シナリオとは、このロードテストで実施されるテストケースとその環境を設定しているものです。設定内容は大きく4つに分かれ、テストミックス、ブラウザミックス、ネットワークミックス、ロードパターンがあります。
テストミックスは、1つのロードテスト内で実施されるテストケースの設定を行います。例えば図8ではふたつのテストケースを利用しそれぞれが半分ずつ実行される設定になっています。
ブラウザミックスはロードテスト中にどのようなブラウザからサーバーに対してアクセスされているかをエミュレートするものです。図9ではすべてのクライアントがInternet Explorer 6を利用するよう設定していますが、他にもInternet Explorer 5.5やNetscape 6などを選択することもできます。
ネットワークミックスはクライアントからサーバーまでのネットワーク帯域をエミュレートするものです。図9ではすべてのクライアントがLAN経由でアクセスすることを設定していますが、他にもDial-upやCable/DSLなどを選択することもできます。
最後にロードパターンはロードテスト中に負荷をどのようにかけるかを設定します。図8、図9ともステップロードパターンを設定していますが、この場合は段階的に接続ユーザー数が増えていくような設定になります。他にも常に一定の負荷をかける持続ロードパターン、計測値がある一定値になるまで継続するゴール指向ロードパターンがあります。これらをさまざまに組み合わせることでより現実の利用に近い状態を作り上げることができ、より現実に近いパフォーマンスの計測を行うことができます。
カウンタセット
カウンタセットはWindowsのパフォーマンスカウンタに定義されているさまざまなカウンタを任意の名前を付けたカテゴリとして作成しているものです。標準では、ASP.NETやIIS、LoadTestといったものが用意されており、ASP.NETに関係するパフォーマンスカウンタの一式、IISに関係するパフォーマンスカウンタの一式などが定義されています。VSTTのロードテストはロードテスト実行中に現在のテストに関係するWindows OSが動作している端末のパフォーマンスカウンタの値を取得してくる機能を持っており、その際に取得してくるパフォーマンスカウンタの一式をここで定義しているといった感じです。カウンタセットは独自に定義することもでき、自由自在な組み合わせを作成することができます。
実行設定
実行設定はテストの実行方法と、どの端末でどのパフォーマンスカウンタを取得するかを設定するものです。実行方法はどの程度の時間にわたって継続するかや、パフォーマンスカウンタのサンプリング速度を決めます。端末に対するパフォーマンスカウンタの設定は、端末ごとにカウンタセットを割り当てることで行います。1つのロードテストには、複数定義することができ、場合に応じて使い分けることも可能です。ただし実行時に一度に利用できるものは1つだけです。
ロードテストは実際にテストを行うまでに実にさまざまな設定が必要となり、組み合わせや設定内容についてもある程度理解している必要があります。より現実の利用状況に近い内容をより正確に把握するためには、その設定を行うためにある程度の代償が必要だということは理解しておいてください。ただし、一度設定ができてしまえば何度でも繰り返し実行してアプリケーションの最新のパフォーマンス状況が確認できるため、そのメリットを享受できる機会は多くあると思います。
設定が終わったロードテストを実行すると、次の図10のような結果を得ることができます。
LoadTestの実行にかかわる情報や実行前に設定した端末のパフォーマンスカウンタの値などさまざまなデータをグラフで表示して内容を確認することができます。また、LoadTestの実行結果における詳細データはSQL Serverデータベースに保存されるように設定することができ、Visual Studioの画面上で時間軸を任意の幅に設定して詳細を確認したり、SQLクエリを利用してカスタムレポートを作成したりすることも可能です。