2016-10-10 13 views
1

私はVisual Studio Ultimate 2013を使用しており、多数のリクエストとWebテストプラグインでWebテストを使用する負荷テストを行っています。ビジュアルスタジオWebテストのエラー処理

私のPostRequestプラグインでは、レスポンスのhttpステータスコードをチェックしています.htpコードが400を超えると、WebTest.Contextパラメータにエラーが記録されます。私がやりたいことは、PostTransaction WebTestプラグインでこれを選択し、データベーステーブルを更新することです。問題は、フレームワークがエラーを検出し、PostTransactionプラグインが呼び出されていないときにテストが中止されることです。

私はPostWebTestプラグインを追加しました。これは、テストの反復が中止されたときに呼び出されると思っていましたが、要求が失敗したときにこれを打つことは決してありません。テストが成功するとヒットします。私は何が欠けていますか?試験のStop on error性がtrueでなければ、エラーが検出された後

public override void PostRequest(object sender, PostRequestEventArgs e) 
{ 
    ... 
    statusCode = e.Response.StatusCode.GetHashCode(); 
    If (statusCode > 400) 
    { 
     e.WebTest.Context["TransactionFailCount"] = 1; 
    } 
} 

public override void PostTransaction(object sender, PostTransactionEventArgs e) 
{ 
    int transactionFailCount = Convert.ToInt32(e.WebTest.Context["TransactionFailCount"]); 
    if (transactionFailCount > 0) 
     failCount = 1; 
    else 
     passCount = 1; 
    ... 
    base.PostTransaction(sender, e); 

} 

public override void PostWebTest(object sender, PostWebTestEventArgs e) 
{ 
    base.PostWebTest(sender, e); 
} 

おかげ

答えて

0

Webパフォーマンステスト(WPT)は実行を継続します。要求の処理のいくつかの側面はエラーの後に実行されない可能性がありますが、私はそのような場合は見ていません。

用語に注意してください。 WPTは、複数の要求をグループ化する方法として「トランザクション」を使用します。要求のコンテキスト(右クリック)メニューには、そのトランザクションに含めるテスト内のアイテムの範囲を選択する「トランザクションの追加」エントリがあります。おそらく、PostTransactionではなく、PostRequestまたはPostPageのプラグインを使用する必要があります。

単純な2つまたは3つのリクエストWPTと、単に呼び出されたことを通知する単純なプラグインを使用していくつかの実験を行うことをお勧めします。例

public override void PostRequest(object sender, PostRequestEventArgs e) 
{ 
    e.WebTest.AddCommentToResult("PostRequest called for url " + e.Request.Url); 
} 

についてさらに、いつ、どのようにプラグインがCodePlexにからページ32 Visual Studio Performance Testing Quick Reference Guideの44にするには呼ばれているのは良い説明があります。

statusCode = e.Response.StatusCode.GetHashCode();が異常です。 e.Response.StatusCodeの値はenumであり、整数値はキャスティングで取得できます。 GetHashCodeメソッドは、enumの数値を取得するためのものではありません。声明は感謝エイドリアン

statusCode = e.Response.StatusCode; 
if (e.Response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { ... } 
+0

ありがとうございました。 "If"は単に投稿のタイプミスで、私はステータスコードを取得するコードを継承しました。私はあなたが正しく指摘されている今、それを修正しました。私は確かに "エラーで停止"をオフにし、私のコードでそれを処理します。 –

+0

回答が受け入れられたら、[ヘルプ]ページを読んでください。http://stackoverflow.com/help/accepted-answerを参照してください。あなたの質問に答えられていない場合は、それを編集して不足している詳細を説明してください。 – AdrianHHH

0

として良いかもしれない(ifをC#、ないIfに条件文のために使用されていることに注意)statusCode = (int)e.Response.StatusCode;または割り当てて、テストとして良いだろう。 "If"は単に投稿のタイプミスで、私はステータスコードを取得するコードを継承しました。私はあなたが正しく指摘されている今、それを修正しました。

私は確かに "エラーで停止"をオフにし、自分のコードで処理します。それに失敗すると、あなたの他の提案を試してみましょう。

ありがとうございました