このチュートリアルでは、検出できない動的パラメーター エラーを作成するカスタム コードを含む、ASP.NET Web アプリケーションを作成します。 そのようなエラーを特定して修正する方法を学ぶことができます。
一部の Web サイトやアプリケーションは、1 つまたは複数の Web 要求で動的パラメーターを使用します。 動的パラメーターとは、ユーザーがアプリケーションを実行するたびに値が生成されるパラメーターです。 動的な値はテストが実行されるたびに異なる可能性があるため、動的パラメーターは、Web パフォーマンス テストの再生に失敗する原因となることがあります。 このため、記録された値を再生できません。 動的パラメーターの例として、セッション ID があります。 その値は、5 分から 30 分に 1 回、変更されます。
Web パフォーマンス テスト レコーダーと再生エンジンによって、最も一般的な種類の動的パラメーターが自動的に処理されます。
動的パラメーターの値は、Cookie 値で設定されます。 Web パフォーマンス テスト エンジンによって、再生中にそれらの値が自動的に処理されます。
動的パラメーターの値は、ASP.NET ビューステートなどの HTML ページ上の隠しフィールドで設定されます。 これらは Web パフォーマンス テスト レコーダーによって自動的に処理されます。 Web パフォーマンス テスト レコーダーは、テストに隠しフィールドの抽出規則を追加します。
動的パラメーターの値は、クエリ文字列またはフォーム ポスト パラメーターとして設定されます。 これらの値は、テストの完了時に動的パラメーターの検出によって処理されます。
ただし、形式によっては、自動的に処理されない動的パラメーターがあります。 これらのパラメーターを適切に処理するために、Web パフォーマンス テストで抽出規則を動的パラメーターに追加できます。 ただし、抽出ルールを追加する前に、動的パラメーターが初期化される場所を特定する必要があります。 このチュートリアルでは、模擬的な検出できないセッション ID 動的パラメーター エラーを探して修正する方法を示します。
このチュートリアルでは、次のタスクを行います。
ASP.NET Web アプリケーションを作成します。
アプリケーションにいくつかの ASP.NET ページを追加します。
アプリケーションにいくつかのコントロールを追加します。
ASP.NET コードを変更します。
C# 分離コードを追加します。
検出できない動的パラメーターの原因となる Javascript を追加します。
アプリケーションに対する新しい Web パフォーマンス テストを記録し、検出された ASP.NET 動的プロパティを確認します。
Web パフォーマンス テストを実行し、検出されない動的パラメーターがあることを確認します。
Web パフォーマンス テスト結果ビューアーで再生中にクイック検索を使用して、動的パラメーター エラーを特定します。
動的パラメーターに抽出規則を追加します。
Web パフォーマンス テスト エディターで、抽出規則を動的パラメーターにバインドします。
Web パフォーマンス テストをエラーなしで再度実行します。
必須コンポーネント
- Microsoft Visual Studio 2010 Ultimate.
Web アプリケーションの作成
Web アプリケーションを作成するには
Visual Studio 2010 Ultimate の [ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] の下の、使用するプログラミング言語を展開して、[Web] をクリックします。
Web プロジェクトの種類の一覧の [ASP.NET 空の Web アプリケーション] をクリックします。
[名前] ボックスで「DynamicParameterSample」と入力します。
[場所] ボックスで、Web アプリケーションを作成するフォルダーを指定します。
[ソリューションのディレクトリを作成] チェック ボックスをオンにします。
[OK] をクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
項目の一覧で、[Web フォーム] をクリックします。
[名前] ボックスに「Querystring.aspx」と入力し、[追加] をクリックします。
Querystring.aspx ページへの HiddenField コントロールの追加
Querystring.aspx ページに HiddenField コントロールを追加するには
ソリューション エクスプローラーで、Querystring.aspx を右クリックし、[ビュー デザイナー] をクリックします。
空のページが表示されます。
ツールボックスが表示されていない場合は、[表示] をクリックし、[ツールボックス] をクリックします。
[標準] グループから、HiddenField をページにドラッグします。
HiddenField コントロールがデザイン サーフェイスに追加されます。
ページの HiddenField をクリックし、[プロパティ] ウィンドウの [その他] カテゴリで [(ID)] の値を HiddenFieldSessionID に変更します。
[ファイル] メニューの [すべてを保存] をクリックします。
Querystring.aspx ページへのコードの追加
Querystring.aspx ページにコードを追加するには
Querystring ページの一番下で、[ソース] をクリックします。
コード エディターが開かれ、Querystring.aspx ページの ASP.NET コードが表示されます。
模擬的なセッション ID 動的パラメーターの生成に使用される、以下の強調表示されている ASP.NET および JavaScript コードを追加します。
<head runat="server"> <title>Javascript dynamic property correlation sample</title> <script type="text/javascript" language="javascript"> <!-- function jScriptQueryString() { var Hidden = document.getElementById("HiddenFieldSessionID"); var sessionId = Hidden.value; window.___location = 'JScriptQuery.aspx?CustomQueryString=jScriptQueryString___' + sessionId; } //--> </script> </head> <body> <form id="form1" runat="server"> <div> <a name="QuerystringHyperlink" href="ASPQuery.aspx?CustomQueryString=ASPQueryString___<%= Session.SessionID %>">Dynamic querystring generated by ASP.net</a> <br/> <br/> <a href="javascript:jScriptQueryString()">Dynamic querystring generated by javascript </a> </div> <asp:HiddenField ID="HiddenFieldSessionID" runat="server" /> </form> </body> </html>
Querystring ページを右クリックし、[コードの表示] を選択します。
コード エディターが開かれ、Querystring.aspx ページの Visual C# 分離コードが表示されます。
次の強調表示されたコードを Page_Load メソッドに追加します。
public partial class Querystring : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Session.Add("Key", "Value"); HiddenFieldSessionID.Value = Session.SessionID; } }
[ファイル] メニューの [すべてを保存] をクリックします。
ASPQuery.aspx ページ、コントロール、およびコードの追加
Web アプリケーションに ASPQuery.aspx ページを追加するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[Web フォーム] テンプレートをクリックし、[名前] ボックスに「ASPQuery.aspx」と入力し、[追加] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
ASPQuery.aspx ページにコントロールを追加するには
ソリューション エクスプローラーで、ASPQuery.aspx を右クリックし、[ビュー デザイナー] をクリックします。
空のページが表示されます。
ツールボックスの [標準] グループから、[Label] をページにドラッグします。
Label コントロールがデザイン サーフェイスに追加されます。
ページの Label をクリックし、[プロパティ] ウィンドウの [その他] カテゴリで [(ID)] の値を IndexLabel に変更します。
ツールボックスの [標準] グループから、[HyperLink] をページにドラッグします。
HyperLink コントロールがデザイン サーフェイスに追加されます。
ページの HyperLink をクリックし、[プロパティ] ウィンドウの [表示] カテゴリで [テキスト] の値を「戻る」に変更します。
[ナビゲーション] カテゴリで [NavigationURL] プロパティの [...] をクリックします。
[URL の選択] ダイアログ ボックスが表示されます。
[フォルダーの内容] のページの一覧で Querystring.aspx を選択し、[OK] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
ASPQuery.aspx ページに分離コードを追加するには
ASPQuery ページを右クリックし、[コードの表示] を選択します。
コード エディターが開かれ、ASPQuery.aspx ページの Visual C# 分離コードが表示されます。
次の強調表示されたコードを Page_Load メソッドに追加します。
protected void Page_Load(object sender, EventArgs e) { int index; string qstring; string dateportion; string sessionidportion; qstring = Request.QueryString["CustomQueryString"]; index = qstring.IndexOf("___"); dateportion = qstring.Substring(0, index); index += 3; sessionidportion = qstring.Substring(index, qstring.Length - index); if (sessionidportion != Session.SessionID) { Response.StatusCode = 401; IndexLabel.Text = "Failure! Invalid querystring parameter found."; } else { IndexLabel.Text += "Success. Dynamic querystring parameter was found."; } IndexLabel.Text += "<br>\r\n"; }
[ファイル] メニューの [すべてを保存] をクリックします。
JScriptQuery.aspx ページ、コントロール、およびコードの追加
Web アプリケーションに JScriptQuery.aspx ページを追加するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[Web フォーム] テンプレートをクリックし、[名前] ボックスに「JScriptQuery.aspx」と入力し、[追加] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
JScriptQuery.aspx ページにコントロールを追加するには
ソリューション エクスプローラーで、JScriptQuery.aspx を右クリックし、[ビュー デザイナー] をクリックします。
空のページが表示されます。
ツールボックスの [標準] グループから、[Label] をページにドラッグします。
Label コントロールがデザイン サーフェイスに追加されます。
ページの Label をクリックし、[プロパティ] ウィンドウの [その他] カテゴリで [(ID)] の値を IndexLabel に変更します。
ツールボックスの [標準] グループから、[HyperLink] をページにドラッグします。
HyperLink コントロールがデザイン サーフェイスに追加されます。
ページの HyperLink をクリックし、[プロパティ] ウィンドウの [表示] カテゴリで [テキスト] の値を「戻る」に変更します。
[ナビゲーション] カテゴリで [NavigationURL] プロパティの [...] をクリックします。
[URL の選択] ダイアログ ボックスが表示されます。
[フォルダーの内容] のページの一覧で Querystring.aspx を選択し、[OK] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
JScriptQuery.aspx ページに分離コードを追加するには
JScriptQuery ページを右クリックし、[コードの表示] を選択します。
コード エディターが開かれ、JScriptQuery.aspx ページの Visual C# 分離コードが表示されます。
次の強調表示されたコードを Page_Load メソッドに追加します。
protected void Page_Load(object sender, EventArgs e) { int index; string qstring; string dateportion; string sessionidportion; qstring = Request.QueryString["CustomQueryString"]; index = qstring.IndexOf("___"); dateportion = qstring.Substring(0, index); index += 3; sessionidportion = qstring.Substring(index, qstring.Length - index); if (sessionidportion != Session.SessionID) { Response.StatusCode = 401; IndexLabel.Text = "Failure! Invalid querystring parameter found."; } else { IndexLabel.Text += "Success. Dynamic querystring parameter was found."; } IndexLabel.Text += "<br>\r\n"; }
[ファイル] メニューの [すべてを保存] をクリックします。
Web アプリケーションの手動テスト
Web アプリケーションを手動でテストするには
ソリューション エクスプローラーで、Querystring.aspx を右クリックし、[スタート ページに設定] をクリックします。
Ctrl キーを押しながら F5 キーを押して、ブラウザーで Web アプリケーションを実行します。 最初のページが表示されます。
[Dynamic querystring generated by ASP.NET] リンクをクリックします。
ASPQuery.aspx ページが表示され、"Success. Dynamic querystring parameter found." というメッセージが示されます。
[戻る] リンクをクリックします。
[Dynamic querystring generated by javascript] リンクをクリックします。
JScriptQuery.aspx ページが表示され、"Success. Dynamic querystring parameter found." というメッセージが示されます。
[戻る] リンクをクリックします。
Web アプリケーションのアドレスをクリップボードかメモ帳ファイルにコピーします。 たとえば、アドレスは次のようになります。
https://localhost:<PortNumber>/Querystring.aspx
このチュートリアルの後の方で Web パフォーマンス テストを作成するときに、この URL が必要になります。
テスト プロジェクトの作成
テスト プロジェクトを作成するには
[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックします。
[新しいプロジェクトの追加] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[Visual C#] を展開し、[テスト] を選択します。
テンプレートの一覧の [テスト プロジェクト] をクリックします。
[名前] ボックスに「DynamicParameterSampleTest」と入力します。
[OK] をクリックします。
注意
既定では、Visual Studio 2010 Ultimate によって単体テスト ファイルが追加されます。 単体テスト ファイルは、このチュートリアルには必要ありません。 したがって、このファイルは削除してかまいません。 削除しなかったとしても、このチュートリアルには影響しません。
Web パフォーマンス テストの記録と ASPQuery.aspx ページの動的パラメーターの自動検出
Web パフォーマンス テストを記録するには
[テスト] メニューの [新しいテスト] をクリックします。
[新しいテストの追加] ダイアログ ボックスが表示されます。
[新しいテストの追加] ダイアログ ボックスで、[Web パフォーマンス テスト] をクリックし、テスト名を「DynamicParameterSampleApp.webtest」と入力して、[OK] をクリックします。
DynamicParameterSampleApp.webtest という新しい Web パフォーマンス テスト ファイルがプロジェクトに追加され、Web パフォーマンス テスト レコーダーが Internet Explorer の新しいインスタンスに表示されます。
ヒント
次の手順を正しく機能させるためには、表示されている順序で次の手順を実行する必要があります。
ブラウザーのアドレス バーに、「Web アプリケーションを手動でテストするには」という手順でコピーした Web アプリケーションのアドレスを入力するか貼り付けて、Enter キーを押します。
注意
Visual Studio 2010 Ultimate は、記録した Web パフォーマンス テスト URL を Web パフォーマンス テスト レコーダーに順次表示します。
[Dynamic querystring generated by ASP.NET] リンクをクリックします。
ASPQuery.aspx ページが表示され、"Success. Dynamic querystring parameter found." というメッセージが示されます。
[戻る] リンクをクリックします。
[Dynamic querystring generated by javascript] リンクをクリックします。
JScriptQuery.aspx ページが表示され、"Success. Dynamic querystring parameter found." というメッセージが示されます。
[戻る] リンクをクリックします。
Web パフォーマンス テスト レコーダーの [停止] をクリックして、記録を停止します。
ダイアログ ボックスが開き、"動的パラメーターを検出しています" というメッセージが表示されます。 このダイアログ ボックスには、受信した HTTP 応答でのパラメーターの検出状況を示すプログレス バーも表示されます。
次に、[動的パラメーターを Web テスト パラメーターに昇格] ダイアログ ボックスが表示されます。
この手順の ASPQuery ページにある CustomQueryString の動的パラメーターのために追加されたカスタム コードは自動的に検出されたので、ダイアログ ボックスの一覧に表示されます。
カスタムの Javascript コードは「Querystring.aspx ページへのコードの追加」という手順で Querystring.aspx ページに追加されたので、JScriptQuery ページにある CustomQueryString の動的パラメーターは自動的に検出されませんでした。
[OK] をクリックして、Querystring.aspx に追加された抽出規則を追加します。
Web パフォーマンス テスト エディターが開かれ、Querystring.aspx への最初の要求が完全に展開されて表示されます。 ここに、追加された抽出規則が表示されます。
ASPQuery.aspx の要求ツリーの 2 番目の要求を完全に展開し、CustomQueryString の値が抽出規則にバインドされていることを確認します。
[ファイル] をクリックし、[名前を付けて DynamicParameterSampleApp.webtest を保存] をクリックして、新しく記録された Web パフォーマンス テストを保存します。
検出されない動的パラメーター エラーを生成するための Web パフォーマンス テストの再生
Web パフォーマンス テストを再生するには
Web パフォーマンス テスト エディターでツール バーの [実行] をクリックして、Web パフォーマンス テスト結果ビューアーを表示します。
4 番目の要求がエラーで失敗しています。 4 番目の要求は JScriptQuery.aspx ページに対するものです。
エラーの原因となる動的パラメーターの特定
再生記録でクイック検索を使用するには
Web パフォーマンス テスト結果ビューアーで、4 番目の要求を右クリックします。 4 番目の要求は JScriptQuery.aspx ページに対するもので、動的パラメーターの問題のために失敗しています。 [Web テストに移動] を選択します。
Web パフォーマンス テスト エディターが表示され、JScriptQuery.aspx 要求が強調表示されます。
要求ノードを完全に展開し、" CustomQueryString=jScriptQueryString___wy0zaykqadkoscuvoiqemofm" のように、CustomQueryString の "wy0zaykqadkoscuvoiqemofm" の部分が動的に表示されることを確認します。
Web パフォーマンス テスト結果ビューアーに戻って、失敗した JScriptQuery.aspx ページを選択します。
[要求] タブをクリックします。
[生データの表示] チェック ボックスがオフになっていることを確認します。
[名前] 列に [QueryString パラメーター] が表示されるまで下へスクロールします。
[CustomQueryString] を右クリックし、[クイック検索] をクリックします。
[検索] ダイアログ ボックスで、パラメーター値が [検索する文字列] に表示されます。
この場合、Web パフォーマンス テスト エディターに表示された内容から、JScriptQuery.aspx 要求の CustomQueryString には "jScriptQueryString___wy0zaykqadkoscuvoiqemofm" という値が割り当てられており、疑わしい動的な部分は "wy0zaykqadkoscuvoiqemofm" だということがわかっています。
[検索する文字列] ドロップダウン リストで、検索文字列の疑わしい部分を削除します。 文字列は、"CustomQueryString=jScriptQueryString___" のようになります。
動的パラメーターには、エラーが存在する要求より前の要求で値が割り当てられます。 そのため、[上へ検索] チェック ボックスをオンにして、[次を検索] をクリックし、[要求] パネルで先行する Querystring.aspx の要求が強調表示されるまで検索を続けます。 [次を検索] を 3 回クリックすると、その状態になります。
この図や、前に実装した Javascript からわかるように、クエリ文字列パラメーター CustomQueryString には " jScriptQueryString___" という値が割り当てられており、その後に var sessionId からの戻り値が連結されています。
function jScriptQueryString() { var Hidden = document.getElementById("HiddenFieldSessionID"); var sessionId = Hidden.value; window.___location = 'JScriptQuery.aspx?CustomQueryString=jScriptQueryString___' + sessionId; }
これで、エラーが発生する場所がわかり、sessionId の値を抽出する必要があることもわかりました。 しかし、抽出される値はただのテキストなので、sessionId の実際の値が表示される文字列を探して、さらにエラーを特定する必要があります。 コードを調べると、var sessionId は、HiddenFieldSessionID によって返される値と等しいことがわかります。
HiddenFieldSessionID を選択して右クリックし、[クイック検索] をクリックします。
[検索] ダイアログ ボックスで [上へ検索] チェック ボックスをオフにし、[現在の要求] を選択します。
[次を検索] をクリックします。
以下の行で、HiddenFieldSessionID の最初の一致が強調表示されます。 それに割り当てられている値も確認できます。
<input type="hidden" name="HiddenFieldSessionID" id="HiddenFieldSessionID" value="0rvcxknlabd30xnbrjtuy11u" />
返された値が元の Web パフォーマンス テスト記録と同じ文字列ではないことに注意してください。 この再生での値は "0rvcxknlabd30xnbrjtuy11u" であり、記録での値は "wy0zaykqadkoscuvoiqemofm" です。 値が元の記録の値と一致しないので、エラーが生成されます。
記録された再生から抽出規則を追加するには
Web テスト結果ビューアーのツール バーの [記録された結果] をクリックします。
Web パフォーマンス テストの元の記録された結果が、[DynamicParameterSampleApp[記録済み]] という別のタブに表示されます。
まだ選択されていない場合は、3 番目の要求を選択します。 前の手順で特定したのは Querystringrequest.aspx です。
[応答] タブをクリックします。 下へスクロールして、前の手順で特定した "wy0zaykqadkoscuvoiqemofm" という元の動的パラメーター値を選択します。 それを右クリックし、[抽出規則の追加] をクリックします。
Web パフォーマンス テスト エディターが開かれ、Querystring.aspx 要求内に選択された新しい抽出規則が表示されます。 新しい抽出規則には、"Param0" という値が割り当てられます。
[Microsoft Visual Studio] ダイアログ ボックスが表示され、パラメーターのバインド対象となる、抽出されたテキストのための一致が見つかったという情報が表示されます。
[はい] をクリックします。
[要求の検索と置換] ダイアログ ボックスが表示され、[検索する文字列] ドロップダウン リストには抽出されたテキストである "wy0zaykqadkoscuvoiqemofm"、[置換後の文字列] ドロップダウン リストにはパラメーターである "{{Param0}}" が表示されます。
[次を検索] をクリックします。
JScriptQuery.aspx 要求の下の QueryString パラメーターである "CustomQueryString=jScriptQueryString___wy0zaykqadkoscuvoiqemofm" が強調表示されます。
[置換] をクリックします。
JScriptQuery.aspx 要求の下の QueryString パラメーターが、新しいコンテキスト パラメーターの "CustomQueryString=jScriptQueryString___{{Param0}}" を使って更新されます。
要求ツリーで、検出された動的パラメーターと、関連付けた検出されない動的パラメーターとの間に同様の構造があることを確認します。