「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
負荷テストとは? †
負荷テストの概要図 †
単純に、Webアプリケーションだけに対して負荷をかけることもできるが、
以下のようにネットワーク機器など含めた本番稼働構成に対する性能検証も可能。
この場合、単純なリクエスト-レスポンス間の時間測定だけするのではなく、
各サーバーや機器のパフォーマンス カウンタなどのパフォーマンス情報を収集し、
ボトルネックが無いか?などを調査する必要がある。
負荷テストのスクリプト作成 †
負荷テストでは、以下のような実行毎に変わる値を
- 実行タイミング次第で可変となる値。
- ランダム値が使用されていて可変となる値。
- ログインユーザ毎に可変となる値。
正規表現などを使用して抜いて引き継ぐ必要がある。
このような処理が必要になるため、負荷テストでは、スクリプト作成が必要になる。
このような負荷テストは、HTTPを使用するWebアプリケーションでは容易であるが、
バイナリ電文を使用するリッチクライアントの場合、型情報を取り込む必要があるので、容易ではない。
(...と言うか、実質的に汎用的な負荷ツールでの実行はサポートされていないことが殆どである)。
Webアプリケーション(+HTTP) †
HTTPはHeaderからBodyまで、全てテキスト表現となっているため、以下手順に従い、
負荷テスト・ツールを用いてスクリプトを作成し負荷テスト・シナリオを作成しやすい。
- Webアプリケーションをブラウザから操作しながら、
HTTP電文をキャプチャしてスクリプトを生成する。
- 作成したスクリプトを実行し、
アプリケーションが動作する(負荷をシミュレートできる)かを確認する。
- アプリケーションが動作しない(負荷をシミュレートできない)部分を確認し、スクリプトの修正を行う。
- 動的に変更される値の追跡を行う。
- ユーザ入力をシミュレートする。
例えば、多重ログインができないシステムであれば、
仮想ユーザごとに使用するユーザIDを変更するようにする。
- スクリプトを実行して、サーバーに負荷をかける。
- スクリプトを組合せ負荷テスト・シナリオを作成し実行する。
リッチクライアント(+バイナリ電文) †
バイナリ電文 †
- バイナリ電文はC構造体や.NETオブジェクトのバイナリ表現になっている事が多い。
- このため、バイナリ電文を使用するリッチクライアントの負荷テストは、
HTTPに特化した負荷テストツールでは実行が困難である。
- バイナリ電文の負荷テストが困難な理由は、
- 電文再送で負荷がかけられるような単純なサーバー機能でない限り、バイナリ電文は型情報が無いと上手く処理できない。
- 殆どのビジネス・アプリケーションでは、その仕組み上、単純なバイナリの電文再送では負荷をシミュレートできない事が多い。
等である。
- 結果として、バイナリ電文を使用するリッチクライアントの負荷テストは、
クライアントサイドのシミュレータやスクリプトなどを開発して負荷をシミュレートする事が多い。
回帰テストツール †
以下のような、回帰テストツールもあるが、
負荷テストは、多重実行など、回帰テストツールでの代替が難しいため、
同様にクライアントサイドのシミュレータやスクリプトを作成して再生することが多い。
3層 C/S、2層 C/S †
- 3層 C/Sの場合、
基本的にシミュレータやスクリプトを作成して負荷テストを実行する。
- P層 / B層(D層)が適切にクラス分割されていれば、
3層C/Sのようなシミュレータやスクリプトを作成しやすい。
.NETの場合 †
Webアプリケーション †
以下がポイントのもよう。
- HTTPクッキーマネージャを設定(Session利用時)
- EVENTVALIDATIONの引継を設定
EVENTVALIDATIONは、EnableEventValidation? = true の際に
生成され、PostBack?およびCallbackイベントを検証するための情報。
これにより、Response・PostBack?間で保存 → 復元される値が、
改ざんされていないかどうかをチェックするようになるので、
Response・PostBack?間で保存 → 復元される値が、
動的に変更になるような場合は、追跡する必要がある。
- CSRF(XSRF)対策用のTokenの引継を設定
- CSRF(XSRF)対策用のTokenの引継を設定
リッチクライアン †
は、前述の方法を参考にする。
Tags: :テスト