2016-10-10 38 views
1

我正在使用Visual Studio Ultimate 2013,並有一個負載測試,使用Web測試與一些請求和Web測試插件。視覺工作室網絡測試錯誤處理

在我的PostRequest插件中,我檢查了響應的http狀態碼,並在返回超過400的hhtp代碼時在WebTest.Context參數中標記錯誤。我想要做的是在PostTransaction WebTest插件中選擇並更新數據庫表。問題是,當框架檢測到錯誤並且未調用PostTransaction插件時,測試會中止。

我已經添加了一個PostWebTest插件,我認爲在測試迭代中止時會調用它,但是當請求失敗時它從來沒有打過。如果測試成功,它確實會擊中它。我錯過了什麼?

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)將後繼續檢測到錯誤,除非測試的Stop on error屬性是true執行。處理請求的某些方面可能不會在錯誤發生後執行,但我還沒有看到任何此類情況。

請注意術語。 WPT使用「交易」作爲分組請求的一種方式。請求的上下文(右鍵單擊)菜單具有「添加事務」條目,用於選擇要包含在該事務中的測試中的一系列項目。也許你應該使用PostRequestPostPage插件而不是PostTransaction

我建議你用簡單的兩個或三個請求WPT加上一些簡單的插件,只是宣佈他們已被調用做一些實驗。例如

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

此外,還有是一個很好的解釋如何以及何時插件在第32頁打電話給Visual Studio Performance Testing Quick Reference Guide從Codeplex上的44。

聲明statusCode = e.Response.StatusCode.GetHashCode();很奇怪。 e.Response.StatusCode的值是enum,它可以通過強制轉換獲得整數值。 GetHashCode方法不打算獲取enum的數字值。該聲明會更好,因爲statusCode = (int)e.Response.StatusCode;或分配和測試(注意if在C#中使用條件語句,不If)可能會更好,因爲

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

謝謝阿德里安。 「如果」只是一個錯誤的帖子,我繼承了獲取狀態碼的代碼。我已經糾正了它,現在你正確地指出了它。我一定會關閉「Stop on Error」並在我的代碼中處理它。 –

+0

有關接受答案時的含義,請閱讀[幫助]頁面,請參閱http://stackoverflow.com/help/accepted-answer。如果您的問題沒有得到解答,請編輯它以解釋缺失的細節。 – AdrianHHH

0

感謝阿德里安。 「如果」只是一個錯誤的帖子,我繼承了獲取狀態碼的代碼。我已經糾正了它,現在你正確地指出了它。

我一定會關閉「Stop on Error」並在我的代碼中處理它。如果沒有,我會嘗試其他建議。

謝謝