2011-09-28 63 views
9

我有一個用C#/ .NET 3.5編寫的客戶機/服務器應用程序,我想對其進行一些性能測試。我一直在尋找一個通用的框架來幫助我,但沒有多少運氣。我希望能夠管理一組客戶端,並根據一些設置爲他們執行隨機操作。我還想記錄一些與此有關的數據,以幫助我爲我的系統設計非常的粗略閾值,例如我可以支持n用戶每秒執行x動作。用於.NET的通用性能測試框架

我會寫特定的代碼,以我的應用程序來執行任務,例如:

  • 登錄/註銷的客戶端。
  • 將消息發送到服務器以執行各種操作。
  • 記錄來自服務器的確認和其他消息。
  • 衡量特定於系統的統計信息。

我希望那麼框架將能夠利用一組參數來描述一個測試場景,例如:在給定時間登錄

  • 客戶端的數量。
  • 每個客戶端每秒執行一定數量的操作。

然後它會運行場景,管理和跟蹤所有用戶和操作並整理所有數據。 (這是我試圖避免編碼自己的無聊的一點...)理想情況下,它會有一些內置的一般測量,例如,發送消息和接收響應之間的時間,但如果不是,我可以自己編碼。

我不想對我的代碼進行任何分析;我可以隨時附加一個分析器,稍後再運行這些測試。相反,我想對我的系統做出一些粗略的結論,即在休息之前可以拋出多少用戶。 (如果有更好的術語比'性能測試'請讓我知道...壓力測試可能嗎?)

我意識到我沒有給出有關係統的很多細節。它讓我覺得這是一個相當普遍的情況 - 我確信有很多客戶/服務器系統需要人們進行類似的測試。我發現很多基於web的框架可以做類似的事情,但是它們似乎很符合web的要求,並且不會輕易將它們用於基於非HTTP的系統。

任何人都知道可能有幫助嗎?我的搜索還沒有找到任何東西。我應該指出,我在Visual Studio 2008 Professional中面臨着可預見的未來,所以如果2010年可以做到這一點,那麼對我來說就是一個界限。我想它不一定是一個.NET框架,只要我仍然可以很容易地插入我的.NET代碼。

編輯爲了清楚我的應用程序不是一個網站,它是一個Windows Forms客戶端應用程序,它通過自定義協議連接到.NET服務。我可以編寫代碼來執行相關的客戶端操作,我只需要一個框架即可。

+0

你在.Net Profilers上看過這個問題嗎? http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers – TheLukeMcCarthy

+0

我不想做分析,如果我解決了問題,我可以稍後再做。我更關心測量我的系統可以使用的用戶數量。 – MrKWatkins

回答

6

您正在尋找的關鍵字是「分佈式測試」。

智能熊有一個產品叫TestComplete它支持distributed testing。我不認爲它可以在單臺機器上運行多個客戶端實例(也許可以,但我想這不是一個好主意,因爲它會影響性能結果)。

他們也有一個名爲LoadUI的開源項目,它是爲了與SoapUI集成而構建的,不過您可能可以將它連接到您自己的客戶端測試工具。我不知道這會花費多少努力。

這些是我所知道的工具,但有many more分佈式測試工具。儘管大多數網站都是基於Web的測試,但它們通常具有足夠的可擴展性,足以啓動在您的客戶端應用程序上運行測試的不同(基於GUI的)測試框架(我的最愛是QAliber)。

+0

優秀 - 現在更容易找到東西我知道更好的術語!看看TestComplete - 聽起來像它可以做我想從他們的網站blurb想要的。 – MrKWatkins

+0

它看起來像TestComplete可能不是我的理想,因爲它似乎更適合r ecording點擊和類似的,而我需要一些客戶端通過API連接。將繼續尋找,但可能會回落到寫我自己的...仍然謝謝你的答案 - 它擊中了頭上的指甲。 – MrKWatkins

1

請檢查以下鏈接。這可能會對您有所幫助。 http://msdn.microsoft.com/en-us/library/aa337591.aspx

我猜即使在VS2008中,你也會得到這個功能,但是對於終極版。

+0

您發送的鏈接僅用於網站性能測試 - 我的應用程序不是網站。 – MrKWatkins

+0

檢查了這一點,如果這有助於.http://msdn.microsoft.com/en-us/library/ms243153.aspx這裏是使用框架的示例:http://blogs.msdn.com/b/edglas /archive/2006/02/06/525614.aspx –

+1

我沒有終極版。 :( – MrKWatkins

1

真的不能說,如果有這樣一個特定目的的測試框架,但可能(因爲其主要思想是,以測試服務器的性能),你可以使用一個簡單的控制檯應用程序?您可以在不同的線程中多次調用服務器,並使用例如Stopwatch類來測量響應時間。或者,你可以嘗試通過增加調用次數來重載服務(在線程池用完線程之前服務可能會減速)。

+0

我可以寫一些東西來做我自己的測量,但我希望有一個框架,已經這樣做 – MrKWatkins

4

據我所知,這樣一個框架目前不存在(並且很可能它不會存在,因爲每個人的情況都不一樣)。因爲「表演」對不同的人和不同的項目意味着不同的東西,所以你通常不得不推出自己的東西。謝天謝地,隨着.NET4和TPL的出現,這變得比以前更容易了。

有三個方面的性能測試需要覆蓋:

  1. 定義 「裝載」
  2. 辦法 「性能」
  3. 評估結果

你可以想像,這兩個這些都是完全鬆懈的定義。負載可以按每秒請求數,登錄用戶數等進行度量......性能可以在響應時間,內存使用量......中獲得圖片。

因此,您的第一步是定義一個「單位負載」,您可以輕鬆擴展。例如,您可以創建一個ClientUnitLoad類,它模擬客戶端並定期對您的服務執行操作。 TPL可以很容易地擴展你的ClientUnitLoad(當然,除非你受到硬件限制的約束)。

下一步是測量性能。您如何嚴格測量取決於您要收集的指標:簡單秒錶功能可以很好地處理90%的情況,但只能測量時間。構建自定義跟蹤和指標收集基礎架構絕對是值得的,因爲您還需要它在生產環境中驗證您的系統在現實世界中的預期性能。

最後一步是評估您的指標。性能測試最大的問題是:a)速度慢,b)不可靠。 Theres沒有辦法解決這個問題。一般來說,您需要大量樣本量(重複測試運行)和對指標進行某種統計分析以忽略異常值。處理後的結果應該與可配置的性能基準進行比較。

根據所需的複雜程度,該績效基準可能有簡單的接受標準(如:Repsonse時間低於100ms)或高級的特定標準(如:Repsonse時間不會降低超過10%登錄用戶的數量是10比1)。

+0

可悲的是這一切我想以避免寫作!(我懶惰,我知道...)鑑於可以放入特定於您的應用程序的代碼的Web框架的數量,我希望有一個非Web框架使用,可以做很多我的腿部工作 – MrKWatkins

1

http://blog.maartenballiauw.be/post/2008/02/code-performance-analysis-in-visual-studio-2008.aspx

可在開發者和團隊爲本的Visual Studio 2008年。我覺得功能已在Visual Studio 2010中得到了改善,雖然。

我應該澄清 - 這不支持所有你想運行的測試用例。您必須自己在一個單獨的項目中編寫該邏輯,將其設置爲啓動項目,然後運行性能分析。

+0

我並不是在尋找代碼級別分析,更常用的測量,比如「我的系統可以有多少用戶」 – MrKWatkins

0

我已經做了一些性能測試前一陣子在使用Microsoft Visual Studio Load Test

當你添加單元測試,負載測試客戶端/服務器應用程序,你鍛鍊非基於Web服務器的性能 組件

你必須爲「Visual Studio的單元測試」編寫你的負載生成器,這樣以後就可以將它們添加到負載測試項目。