2012-07-17 12 views
2

我正在使用Visual Studio 2010來測試ASP .NET Web服務。我希望能夠爲請求/秒設置一個相當低的目標(比如說20),並以很高的精度(比如+/- 2%)實現它。我正在使用類別爲ASP.NET Apps v4.0.30319的perfmon counter'Requests/Sec'。使用Visual Studio基於目標的加載模式來實現每秒一致的請求

我的Web測試持續時間變化很大,負載測試使用戶數量不斷變化。當我查看結果圖時,RPS在0和60之間,並持續上下。

有沒有什麼方法可以設置VS從控制器的立場開始一個常數rps。甚至是一個固定的測試/秒。

也許一個計數器可以讓我測量每秒發起的請求而不是請求/秒,所以時間上的變化沒有什麼區別。

回答

1

要做到這一點,唯一的方法是使用多個線程 - 如果所有請求都必須等待,並且您沒有使用異步IO,則可能使用多個線程 - 可能高達RPS * ConnectionTimeout

你可以作弊和使用ThreadPool(但請注意,它不作任何保證:調度)。如果你使用.Net 4,還有Task Parallel Library

對於〜20 RPS,我懷疑ThreadPool精度的缺乏會成爲一個問題。隨着你獲得更高的RPS,這將會改變。

如果您想DIY,請注意很難做到正確。一個簡單的實現是有一個主要工作線程啓動新的線程爲每個連接...

Private ShutdownRequested As Boolean = False 
Public Sub StartLoad(RPS As Integer) 
    ShutdownRequested = False 
    Dim MainThread As New Threading.Thread(Sub() Worker(RPS)) 
    MainThread.Start() 
End Sub 

Public Sub StopLoad() 
    ShutdownRequested = True 
End Sub 


Private Sub Worker(RPS As Integer) 
    While Not ShutdownRequested 
     Threading.Thread.Sleep(CInt(1/RPS * 1000)) 
     Dim Worker As New Threading.Thread(Sub() OpenAConntection()) 
    End While 
End Sub 

一個更好的辦法是使用異步IO機制described here,因爲它允許用數量有限的連接數線程。

This article也可能有興趣重新:線程

相關問題