BT

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

寄稿

Topics

地域を選ぶ

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

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

Visual Studio 2010にはシステムの負荷テストに必要とされる機能が多く含まれており非常に有用である。本記事ではVisual Studio 2010における負荷テスト機能についての解説と共に2011年3月より提供が開始されたVisual Studio 2010 Load Test Feature Packについても解説を行いたい。
なお、本記事は前編と後編に分けて解説を行う。前編となる今回はイントロダクションとしてWebシステムにおける負荷テストの位置づけ、負荷テストツールに求められる機能、Visual Studio 2010を利用した負荷テストの概要について解説する。

はじめに

システム導入プロジェクトにおいて実施される負荷テストは、これを行わないケースは稀と言ってもいいくらい重要なタスクである。利用ユーザーにストレスを感じさせないパフォーマンスをシステムに確保する事は重要な要件であり、これを確認するための手法として負荷テストが実施される事が多い。負荷テストの主な目的として以下の点が挙げられる。

  • システムキャパシティの確認 (事前に定義もしくは合意した性能要件との比較考察)
  • システム高負荷時におけるエラー発生有無の確認
  • システム高負荷時におけるパフォーマンス上の問題有無の確認

業務システムを導入する場合、システムに想定される負荷(同時実行ユーザー)やシステムに要求される応答時間(TAT:Turn Around Time)、スループット(単位時間あたりの処理性能)を性能要件としてあらかじめ定義する場合がほとんどである。システムを設計する側(または提供する側)は性能要件を満たすようにキャパシティプランニング、システムサイジング、設計を行うが、それぞれの業務要件に対して設計またはカスタマイズされていくシステムが性能要件を満たすものであるかについて机上で確認を完結させることは難しい。やはり実際に複数ユーザーからのアクセスを行うかまたは負荷テストツール等を利用してシステムキャパシティの確認を行う必要があり、このような負荷テストによってシングルユーザー環境や低負荷時には発生しにくいエラー(マルチスレッド障害等)やパフォーマンス上の問題を確認する事も可能となる。またプロジェクトの過程では詳細な業務要件に対応する為にアプリケーションロジックの改変や追加などが継続的に行われる事からもアプリケーション開発が収束してきたプロジェクトの終盤でシステムの負荷テストを行うケースが多いといえる。(製品のベンチマークを行うような評価プロジェクトはこれに限らない。)
加えて、システムが運用開始された後も負荷テストの必要性は高いと言える。アプリケーションの改変やシステムプラットフォームの更改など、メンテナンスやバージョンアップの場合においても性能要件を満たすかについて確認が必要となる。また運用環境(本番環境)においてユーザーアクセスの高負荷時に発生した問題を開発環境やテスト環境で再現(Reproduce)する場合も負荷テストの手法を採る場合が多い。

Webシステムにおける負荷テスト

WebシステムはHTTPやHTMLといったシンプルなアーキテクチャを起源とするが、今日のWebシステムではASP.NETをはじめとするアプリケーションフレームワークなど、より進化した仕組みによって実装が行われている。これに伴い今日のWebシステムの負荷テストにおいてはこれらのフレームワークや応用技術への対応が必要であり、旧来の方式では不十分であると言える。
一例としてマイクロソフトの技術で考えてみよう。ASP(Active Server Pages)を中心に開発が行われていたWebシステム黎明期においてはWAS(Web Application Stress tool)といったツールが負荷テストに利用されていたが、本ツールの持つ機能としては事前に登録された一連のHTTPリクエストをクライアントマシンから多重化して発生させるといったシンプルなものであった。当時のWebシステムにおいてはセッション(Session)によるアプリケーションの状態管理が中心であり、WASは一連のアクセスシナリオの中でCookieを保持管理することが可能であった為、当時の負荷テストツールとしては有用であったと言える。しかしながら本ツールではポストバック(ASP.NETにおけるHIDDENパラメーターを利用したアプリケーション処理の仕組み)への対応はもちろん、POSTパラメーターやGETパラメーターを可変に指定する事も難しく、昨今のWebシステムの負荷テストにおいては限定的な利用とせざるを得ないだろう。
Webシステムの負荷テストを行うにあたり、負荷テストツールに求められる機能、負荷テストを実施するうえでの課題としては以下の点が挙げられる。

  • アプリケーションセッションへの対応 (Cookieによるセッション管理機能への対応)
  • 各Web認証への対応 (フォーム認証、Basic認証、Windows認証、クライアント証明書認証)
  • ASP.NETにおけるポストバックといったHTTPレスポンスに動的に含まれるデータへの対応 (レスポンスデータの一部を次のリクエストに利用する仕組み)
  • POSTパラメーターやGETパラメーターの動的な制御
  • DBやファイルをデータソースとする可変パラメーター
  • 条件分岐やループによるアクセスシナリオの制御
  • HTTPレベルのエラーだけではなく、HTTPレスポンス内容を考慮した正常/異常の判定
  • 複数の業務シナリオを並行して発生させるトランザクションミックス
  • ブラウザキャッシング (新規アクセスユーザー、以前にアクセスしたユーザーのシミュレーション)
  • 複数クライアントからの負荷生成とコントローラーによるテストの制御
  • クライアントのIPアドレスを可変とするHTTPリクエスト
  • 個々のHTTPレスポンスデータの取得 (ロギング)
  • わかりやすい結果レポート

Visual Studio 2010 の負荷テスト機能であれば上記の要件や課題に対応した負荷テストの実施が可能である。

Visual Studio 2010 負荷テストシステムの構成

Visual Studio 2010のエディションのうち負荷テスト機能を利用できるのはVisual Studio 2010 Ultimateである。またVisual Studio 2010 UltimateはVisual Studio Test Agent 2010と組み合わせることによって負荷生成クライアントを複数とする構成が可能となる。なお Visual Studio Agents 2010はマイクロソフトサイトからダウンロード可能なソフトウェア(記事下部にリンクを掲載)であり、負荷テストの制御やテスト結果の収集を行うコントローラーとして使用するTest Controller 2010と負荷テストクライアントやパフォーマンスデータを測定するサーバーに対してインストールするTest Agent 2010で構成される。
留意点としてVisual Studio 2010 Ultimateのみを利用して負荷テストを行う場合(これは「ローカル実行」と呼ばれる)には制限があり、最大で250ユーザーまでのシミュレーションかつ負荷の生成に使用するCPUコアが1つとなっている。したがってより大きなアクセス負荷を必要とする場合にはVisual Studio Test Agent 2010を利用した複数クライアント構成が必要となる。加えて複数の負荷クライアントを構成する場合にはライセンス上の制限があり、これまではVisual Studio Load Test Virtual User Pack 2010のライセンス購入が必要だったが、こちらについては2011年3月よりVisual Studio 2010 Ultimate を MSDN Subscription付きで購入すれば追加のライセンスパックが不要となっている点に留意頂きたい(Visual Studio 2010 Load Test Feature Pack)。Visual Studio 2010 Load Test Feature Packについては本記事の後編でも解説する。

 
[図: Visual Studio Ultimate 2010による負荷テストのローカル実行]


[図:複数のクライアントを利用した負荷システム]

Visual Studio 2010 テストプロジェクトの構成

Visual Studio 2010 による負荷テストはテストプロジェクトを作成し、テストプロジェクトに対してテストシナリオや負荷テストの各種設定を行う。Webシステムの負荷テストを行うテストプロジェクトの構成として主要なものは「Webパフォーマンステスト(~.webtest)」および「ロードテスト(~.loadtest)」であり、いずれもVisual Studio 2010の「プロジェクト」メニューから追加が可能である。

 
[図:テストプロジェクトへのテストの追加]

「Webパフォーマンステスト(~.webtest)」ではテストシナリオ、つまり一連のHTTPリクエストといったアクセスシナリオの定義を行う。一方「ロードテスト(~.loadtest)」では負荷テストとして実行するための各種設定を行う。複数のWebパフォーマンステストの組み合わせで構成されるテストミックス、仮想ユーザー数つまり負荷をどの程度にするかといったロードパターン、ロード時間やイテレーション(テストの反復回数)、ブラウザやネットワークのシミュレーションといった内容をロードテストに設定する。


[図:Webパフォーマンステスト(~.webtest)]


[図:ロードテスト(~.loadtest)]

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

[Visual Studio 開発者向け技術情報]
http://msdn.microsoft.com/ja-jp/vstudio/default.aspx
[Visual Studio Agents 2010 - ISO]
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=a3216d2a-0530-4f6c-a7c9-0df37c54a902
 

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

この記事に星をつける

おすすめ度
スタイル

BT