BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル Visual Studio 2010を利用したWebシステムの負荷テスト (後編)

Visual Studio 2010を利用したWebシステムの負荷テスト (後編)

本記事の前編ではWebシステムにおける負荷テストの位置づけ、負荷テストツールに求められる機能、Visual Studio 2010を利用した負荷テストの概要について解説を行った。後編となる今回はテストプロジェクトを構成するWebパフォーマンステストとロードテストについて掘り下げるとともに、Visual Studio 2010を利用した負荷テストにおいて是非知っておいて頂きたいポイントについても解説を行う。

Webパフォーマンステスト

本項ではテストプロジェクトを構成する「Webパフォーマンステスト(~.webtest)」について解説を行いたい。
WebパフォーマンステストはWebアプリケーションに対するアクセスシナリオを定義するが、その作業の大半は「Webテストレコーダー」を利用して行う。WebテストレコーダーはInternet Explorerを起動し実際のサイト閲覧操作を行う事で発生するHTTPリクエストを自動的に記録するため、Webアプリケーションを利用するユーザーの視点からシナリオを定義する事が可能である。また Webテストレコーダーの重要な機能として「動的パラメーターの自動検出」があり、本機能によってViewState等アプリケーションから動的に生成されるパラメーターが自動抽出され後続のHTTPリクエストにバインドが行われる。

またWebパフォーマンステストでは「検証規則」の定義が可能であり、アプリケーションの正常終了/異常終了を判定する機能として有用である。Webアプリケーションでエラーが発生した場合、通常は発生したエラーに関する説明やユーザーへの指示を示す画面のレンダリングが行われるが、この場合HTTPレスポンスコードとしては200が返されるため、正常終了/異常終了の判定においてはレスポンスコード以外でエラー有無を判別する仕組みが必要となる。負荷テストといった自動化されたテストシナリオでこのようなエラーを補足する為には、正常シナリオでのレンダリング内容を定義し、テスト実施時の個々のレスポンス内容(Body)がこの条件を満たすかどうかによって正常/異常を判定する方法が有効である。Webパフォーマンステストの「検証規則」ではレスポンスに含まれるべきタグや文字列を定義することによってレスポンスの正常性検証を行う事が可能である。


[図:Webパフォーマンステストで設定可能な検証規則]

次にデータバインディングについて解説を行いたい。負荷テストにおいては固定パラメーターによるアクセスを多重化するだけでは不十分であり、テストシナリオの中でPOSTデータやQueryStringといったパラメーターを変化させたい場合がある。このような場合はデータバインディング機能を利用すると簡単に可変パラメーターの設定が可能である。データバインディングではデータベースやcsvファイル、XMLファイルをデータソースとしてSequential、Random、Uniqueといったデータ取得ルールの設定が可能である。

[図:データバインディングの設定例]

またデータバインディングの仕組みは多重化を伴う負荷テストといった用途だけではなく、アプリケーションに対する機能検証においても有効である。たとえばログインやデータ参照といったある特定のIDを入力パラメーターとする機能において、すべてのID(ユーザーID(およびパスワード)や顧客ID)を入力として順次実行しアプリケーションが正常動作することを確認する、といった機能テストの自動化としても利用できる。

さらにデータバインディングに関連してWebパフォーマンステストにおける資格情報の設定についても触れておきたい。WebパフォーマンステストではWindows統合認証や基本認証といったWeb認証の為の資格情報が設定可能であり、固定の資格情報(ユーザー、パスワード)の設定はもちろん、データバインディングによって可変な資格情報を設定する事も可能である。

[図:Web認証の資格情報の設定]

その他、Webパフォーマンステストではよりきめ細かい要件に応えられるよう各種の設定が可能である。

待ち時間と応答時間
  • Webパフォーマンステストの「待ち時間」ではHTTPレスポンスが返ってから次のHTTP リクエストが送られるまでの間隔を設定する。本設定によってユーザーがWeb ページを閲覧する時間をシミュレートすることが可能。
  • Web パフォーマンステストの「応答時間の目標」ではHTTPリクエストが送られてからそのレスポンスの最後のバイトを受信するまでの目標時間を設定する。本設定によって目標応答時間の達成について把握が可能。 
抽出規則
  • Webパフォーマンステストに抽出規則を設定する事でHTTPレスポンス(フォームフィールド、テキスト、属性、ヘッダー、非表示フィールド)から文字列を抽出し、変数(コンテキストパラメーター)に値を格納する。コンテキストパラメーターは後続のHTTPリクエストにおけるパラメーター(POSTデータやQueryString)としての利用、ループや条件のパラメーターとしての利用が可能。
ループ、条件
  • Webパフォーマンステストのシナリオ(一連のHTTPリクエスト)に対してループや条件(実行条件)を設定する。ループや条件の判断に使用するパラメーターとしては、特定のCookie有無やCookieの値、HTTPレスポンスコード、コンテキストパラメーターが利用可能。

Webパフォーマンステストでテストシナリオ(一連のHTTPリクエスト)の定義を行ったあとはこれを実行してみよう。Webパフォーマンステストを実行すると定義にしたがってHTTPリクエストの送信とレスポンスの記録が行われる。

[図:Webパフォーマンステストの実行]

ロードテスト

次に「ロードテスト(~.loadtest)」について解説を行いたい。
ロードテストはWebパフォーマンステストを包含し多重化を伴う負荷テストとして実行する事が可能である。ロードテストやその配下に定義するシナリオに対して設定する主な内容は以下のとおりである。ロードテストはウィザード形式によって作成されるため、主要な設定内容については概ね理解しやすい。

ロードパターン
  • どの程度の負荷をかけるのか、実行ユーザー数によってそのレベルを設定する。ロードパターンは「持続ロード」「ステップロード」「ゴール志向」のいずれかを指定する。「持続ロード」は負荷テストの間、指定されたユーザー数を持続するロードパターンであり、負荷テストにおける接続ユーザー数の目標がはっきりしている場合に適している。一方「ステップロード」は時間の経過と共に指定された値ずつユーザー数が増加するロードパターンであり、多重度の変化に伴うパフォーマンス分析やエラー分析を行う場合、システムの性能限界を分析する場合に適している。「ゴール志向」はクライアントやサーバーのパフォーマンスカウンタ値をもとにしてユーザー数の調整を行うロードパターンである。
テストミックス
  • 負荷テストに含めるWeb パフォーマンステストとそれぞれのテストの実行比率を設定する。

ネットワークミックス

  • ネットワーク帯域の種類と比率を設定し、クライアントが利用するネットワーク環境をシミュレートする。
ブラウザミックス
  • ブラウザの種類の組み合わせと比率を設定し、クライアントが利用するブラウザ環境をシミュレートする。
カウンターセット
  • ロードテストの中でパフォーマンスカウンタの取得を行うコンピューター(サーバーやクライアント)を指定する。
実行設定
  • 負荷テストを実行する期間を実行時間またはイテレーション(テストの反復回数)によって設定する。加えてパフォーマンスカウンタの取得間隔も設定する。

ロードテストを実行するとVisual Studio画面上にパフォーマンスカウンタや実行状況の概要などリアルタイムな情報が表示される。実行ユーザー数、ページの応答時間、発生エラーの有無、サーバーリソースの状況など着目したいカウンタを表示させながら負荷テストを進める事が可能である。

[図:ロードテストの実行]

テストが終了するとテスト結果の概要が表示される。通常はエラーの発生有無や各ページのレスポンス時間について確認を行うことになる。

[図:ロードテストの実行結果]

また、負荷テストで発生する個々のリクエストやレスポンスの詳細を確認したい場合がある。このような場合はロードテストの実行設定で「タイミングの詳細ストレージ」および「完了したテストのログ頻度を保存」(英語表記では「Save Log Frequency for Completed Tests」)の設定を行う事によって詳細なロギングが可能である。


[図:ロードテストでの詳細なロギング設定]

ロギングされたデータは仮想ユーザークティビティチャートからテストログをクリックする事で表示できる。

[図:リクエスト内容、レスポンス内容の表示]

テストエージェントの設定

本項ではテストエージェントの設定の中で知っておくと便利な機能である「IPスイッチング」について解説を行いたい。
IPスイッチング機能は負荷テストの中で事前に定義したIPアドレスプールをクライアントのアドレスとして利用する機能であるが、これはサーバーシステムの構成でハードウェアロードバランサーやNLB(Network Load Balancing:Windows Serverのネットワーク負荷分散機能)といった負荷分散アーキテクチャが利用されている場合に有用な機能と言える。負荷分散のアフィニティ(トラフィックの分散ルール)がクライアントのソースIPアドレスをもとに行われる場合、負荷テストクライアントが同一のIPアドレスを使用している限りはサーバーサイドでのトラフィックの分散が行われず、特定のWebサーバーへのリクエストが集中するといった状況に陥ってしまう。このような場合はクライアントのIPアドレスを可変としてHTTPリクエストを発生させる仕組みが必要であり、テストエージェントのIPスイッチング機能が役に立つ。IPスイッチングを利用する場合、エージェントに対する設定(テストエージェントに対するIPアドレスプールの設定)に加えロードテストに対する設定(IPスイッチングの有効化)が必要である。


[図:テストエージェントでのIPスイッチング設定]


[図:ロードテストシナリオでのIPスイッチングの有効化]

Visual Studio 2010 Load Test Feature Pack について

最後にVisual Studio 2010 Load Test Feature Packについて触れておきたい。
Visual Studio 2010 Ultimateのみを利用した負荷テスト(ローカル実行)においては250ユーザー(仮想ユーザ)までのシミュレーションかつ負荷の生成に使用するCPUコアが1つといった制限があり、これを超えるユーザーのシミュレーションやリモートクライアントからの負荷生成を行う場合にこれまでは(2011年3月までは)別途ライセンスパック(Visual Studio Load Test Virtual User Pack 2010)の購入が必要であった。
これに対して2011年3月8日からVisual Studio 2010 Load Test Feature Packの提供が開始された。これはVisual Studio 2010 Ultimate を MSDN Subscription付きで購入すればMSDN Subscription の特典として無制限の仮想ユーザーの生成が可能になるライセンスキーが提供される、といったものである。したがってVisual Studio 2010 Ultimate with MSDNであれば追加のライセンス購入が不要となり、追加投資無しでより大規模な負荷テストを実施する事が可能となった。Visual Studio 2010 Load Test Feature Packについては以下の情報も参照頂きたい。

[Visual Studio 2010 Load Test Feature Pack FAQ]
http://msdn.microsoft.com/en-us/vstudio/ff520697#top

おわりに

前編、後編にわたってVisual Studio 2010を利用した負荷テストについて解説を行った。これまでの内容からWebシステムの負荷テストにおける要件と課題に対し、Visual Studio 2010 が多くの機能を持って対応可能である事がご理解頂けたかと思う。機能が多く柔軟なカスタマイズが可能であるがゆえにどこから始めてよいか最初は戸惑ってしまう部分もあるかも知れないが、まずはシンプルにWebテストレコーダーを利用したWebパフォーマンステストの作成とその実行から始め、次にロードテストによる負荷テストを試してみる事をお勧めしたい。使うほどにVisual Studio 2010の持つ有効性と応用力の高さが理解できるはずだ。

[Visual Studio 開発者向け技術情報]
http://msdn.microsoft.com/ja-jp/vstudio/default.aspx
 

Visual Studio 2010を利用したWebシステムの負荷テスト (前編)
併せてご覧ください。

この記事に星をつける

おすすめ度
スタイル

BT