ロード テスト

Microsoft Azure と Visual Studio Online によってロード テストを容易にする

Charles Sterling

インターネットはビジネスを進めるうえで強力な武器になります。インターネットを使用すれば、世界最小の企業でも、超大手企業と競い合うことができます。チャンスは大きくなりますが、同時にリスクもあります。アプリケーションは常時スケジュールどおりに実行する必要があり、ダウンタイムは利益を失うことを意味します。開発チームが負荷の高い状況でのアプリケーションのパフォーマンス特性について理解を深める助けになるように、マイクロソフトは 2005 年、Visual Studio Team System と一緒にロード テスト ツールをリリースしました。

このリリース以前も、Visual Studio のロード テストはマイクロソフト社内で最も広く使用されているテスト ツールの 1 つでした。そこから、使用するツールに関係なく、なぜ世界全体では同じようにロード テストが受け入れられていないのかという疑問が生まれ調べたところ、必要なインフラストラクチャを設定および管理する手間が原因でほとんどの開発チームがロード テストを行っていないことが明らかになりました。これは回避可能なリスクです。

Visual Studio 2013 で、マイクロソフトは Visual Studio Online の一部としてクラウド ベースのロード テストをリリースしました。これにより、自動的にロード テスト インフラストラクチャをプロビジョニングしてホストするためにMicrosoft Azure を使用するという課題が解決されます。Visual Studio 2013 Update 3 では Application Insights が統合され、Visual Studio Online のクラウド ロード テストがさらに強化されました。これにより、パフォーマンス カウンター、例外、実行中に割り当てられたオブジェクトなどの内部診断が容易になります。

ロード テストの作成

Visual Studio でのロード テスト プロセスに慣れていない方は、Web パフォーマンスとロード テストのプロジェクトから開始することをお勧めします。これを行うには、[ファイル] メニューの [新しいプロジェクト] で [Web パフォーマンスとロード テストのプロジェクト] を選択して、1 つ以上の Web テストを作成します。

これらの Web パフォーマンス テストを実行するには、プロジェクトにロード テストを追加します (図 1 参照)。ソリューション エクスプローラーを開き、プロジェクト (ここでは WebLoadTestProject1 という名前) を右クリックし、[追加]、[ロード テスト] の順にクリックして、[新しいロード テスト ウィザード] の指示に従います。ロード テスト中、システムでは、ユーザー数、期間、ネットワークの種類、ウォームアップ時間、テストの配布などの情報が収集されます。もう 1 つは、データ バインドを使用して動的ロード テストを作成する方法です (「クラウド ベース ロード テストのためのデータ バインド Web テスト」参照)。

プロジェクトへのロード テストの追加
図 1 プロジェクトへのロード テストの追加

クラウド ベース ロード テストのためのデータ バインド Web テスト

静的 Web テストからアプリケーションに関する詳細なパフォーマンス情報を得られますが、動的 Web テストを行うとさらに多くの情報を得られます。このような動的ロード テストでは、実行するたびに異なる値を設定します。たとえば、"Frog" という検索条件を何千回も送信するのではなく、その他の検索条件/語句候補 ("Toad"、"Frog" など) を使用して、境界条件をテストする方が合理的です。動的テストは、データ バインドと呼ばれる高度な手法を使って実現できます。

Web テストにデータ バインドを行うには、Web テスト ツール バーでデータ ソースを Web テストに追加する必要があります。この種類の動的テストでは、データ ソースとして、XML、CSV、およびデータベースがサポートされます。XML データソースと CSV データソースの場合、ファイル全体がエージェント仮想マシンにコピーされることに注意してください。また、クラウド ベース ロード テストでは、テスト エージェントがデータ ソースに接続できる必要があります。そのため、データベース データ ソースは Microsoft Azure SQL Database で実行している必要があります。

Web テストに使用するデータ ソースのプロパティ ([自動的にカーソルを移動しない]、[ランダム]、[順次]、または [一意]) によって、テストにおけるデータ ソースの移動方法が決まります。データ ソースの追加後、クエリ文字列パラメーターの値プロパティ (前述の静的文字列 "Frog") は、ドロップダウン メニュー項目になります。これにより、テストをデータ ソースの特定の列にバインドするのが容易になります。

Azure の稼働

通常、実際の作業はロード テストの作成後に始まります。この時点で、テスト チームは実際にロード テストを実行するテスト エージェントをホストするためのコンピューターが必要になります。たとえば、Web サイトに 5,000 人のユーザーの負荷をかける必要があり、必要なテストを実行するコンピューターごとに 500 人のユーザーをサポートできる場合、テスト チームは追加で 10 台のコンピューターを入手、プロビジョニング、および管理する必要があります。

ただし、Local.TestingSettings ファイルのオプションを使用すると、Visual Studio Online クラウド ロード テストによって、これらの作業が実行されます。既定のクラウド ロード テストでは、500 人のユーザーごとに Azure にホストされたエージェントが 1 つ自動的に起動されます。各エージェントには 2 つのコアがあります。

この動作は、[エージェント数 (コアの合計)] という [実行設定] の新しいプロパティでオーバーライドできます。現在のクラウド ロード テストの実装では、最大 10 エージェントまたは 20 コアに制限されています。また、クラウド ロード テストでは、1 コアにつき最低 25 人のユーザーが必要です。そのため、10 人のユーザーのみの負荷に対して [エージェント数 (コアの合計)] プロパティを 10 に設定すると、クラウド ロード テストでは 1 エージェントのみが割り当てられ、次のようなメッセージが表示されてそのことが通知されます。

"このロード テストはエージェント コアを 1 つ使用して実行されます。ロード テストを最適に行うには 1 コアにつき '25' 人の仮想ユーザーが必要なため、エージェント コア数の値が '10' から '1' に変更されました。詳細についてはこちら (go.microsoft.com/fwlink/?LinkID=310093、英語) を参照してください"

5,000 人以上のユーザーが組み込まれるテストでは、ユーザーが 10 エージェントと 20 コアに分散されます。

ロード テストについて

通常、ロード テスト作業は、ロード テストによって答えが得られる次のようなことを自問することから始まります。

  • アプリケーションは期待どおりの速度か?
  • パフォーマンスが向上しているか低下しているか?
  • 負荷がかかるとコードでエラーが発生するか?

このような疑問に答えるために、Visual Studio ロード テストにはさまざまなレポートが用意されています。実行データに関するレポートは自動的に Visual Studio Online 保存され、チームのメンバーが確認できるようになります。

たとえば、Throughput (スループット) レポートを使用して、ロード テスト実行中に表示すると、アプリケーションが期待どおりに実行されているかどうかをひと目で確認できます (図 2 参照)。応答時間が想定外に短いうえに想定外のエラー数がレポートされている場合は、システム障害の可能性があります (サービスがダウンしている、サーバー名が正しくないなど)。その場合、ロード テストを中止できます。

Visual Studio Online ロード テスト レポート ページ
図 2 Visual Studio Online ロード テスト レポート ページ

従来のロード テストでは難しく、Visual Studio ロード テストで解決されたもう 1 つの側面は、チーム環境における、ロード テスト結果の共有と保存などのコラボレーションです。図 3 のロード テスト マネージャーに表示されているのは、チーム メンバーがパフォーマンス テストを実行している 2 つだけです。最後の 4 つの実行は中断されて、別の実行がキューに登録されています。何かがうまくいっていません。

ロード テスト マネージャー
図 3 ロード テスト マネージャー

アジャイル チームは通常、現在のスプリント作業によるパフォーマンスへの影響に関心があります。これに答えるために、Visual Studio には 2 種類の Excel ベースのレポートが用意されており、実行の比較と傾向の調査に役立てられます。この詳細な情報を表示するには、Visual Studio Online から実行データをダウンロードして、レポートの表示リンクをクリックします。これで、Excel で複数の実行データのセットを開いて比較するオプションのある、データのレポート ビューが開きます。

図 4 のレポートでは、Sprint2 と Sprint3 を比較しています。パフォーマンスが 4 % 遅くなっていますが、エラーの数が大幅に少なくなっていることがわかります。これは、チームにとって扱いやすいトレードオフです。

完了したロード テスト レポートの例
図 4 完了したロード テスト レポートの例

Application Insights の統合

ロード テスト中のエラーは、問題のある診断収集手法によって検出されているために、多くの場合疑問視されます。しかも、そのようなエラーは、診断収集情報が不十分なために、診断は困難か不可能です。

Visual Studio 2013 Update 2 は、Application Insights の統合により、クラウド ロード テストが強化されています。2014 年 5 月号の「Application Insights による次世代開発」(msdn.microsoft.com/magazine/dn683794.aspx) を参照してください。この運用監視ツールの統合によって、開発/運用中のアプリケーションをテストできるようになりました。また、開発チームがエラーを発見し、エラーが発見されたタイミング (1 時間前、1 日前、1 週間前) にかかわらず、エラーへの対応が容易になります。

Application Insights を使用してクラウド ロード テストに統合パフォーマンスおよび診断情報を含めるには、ロード テスト定義の [Applications] (アプリケーション) ノードを右クリックして、ロード テスト レポートに含める Application Insights コンポーネントを選択します。

まとめ

Visual Studio Online でクラウド ロード テストを行うことで、アプリケーションの設定とロード テストの作業の多くが取り除かれます。Azure を使用するとアプリケーションを簡単にサイズ変更して、パフォーマンスの低いコードを "お金で" 解決できますが、ロード テストを行わなければ、多くの場合、それにどの程度のコストがかかるか把握することは困難か不可能です。また、顧客に悪影響が及ぶ前に、調整が必要かどうか判断するのも困難です。完全なクラウド ロード テストは、ビジネスに影響する可能性のある稼働中のサイトのバグを特定するのに役立ちます。


Charles Sterling は、マイクロソフトに勤務して 20 年になります。マイクロソフトに勤務する前は、ベーリング海で海洋哺乳類を調査する海洋生物学者として、アメリカの National Marine Fisheries に勤務していました。マイクロソフトの製品マネージャーとしてオーストラリアで 6 年間過ごした後、現在は Visual Studio 開発チームのシニア プログラム マネージャーとしてレドモンドに戻っています。連絡先は chass@microsoft.com (英語のみ) です。

この記事のレビューに協力してくれたマイクロソフト技術スタッフの Manas Maheshwari に心より感謝いたします。