2008-10-15 66 views
2

我必須對性能/負載測試一堆相互依賴的服務。他們都使用net.tcp,大多數使用雙工合同和內部排隊。 [使用鎖定手動操作的POCO隊列類(syncRoot){if(queue.Empty)Thread.Wait(); }]爲WCF服務定義SLA

這裏的方法,我想出來的:

  1. 確定WCF服務是性能測試
  2. 確定的初步認識性能計數器爲每個服務
  3. 標識邏輯啓動點是將採取通過服務正在測試
  4. 自動生成單元測試使用VS.Net每個服務
  5. 編寫特定的功能測試(對於考試執行我可以拿一個用例 - 「下訂單」 - 編寫測試,使所有相關服務的調用,並通常幾乎所有需要的功能excercise)
  6. 使用跟蹤文件從運行#5生成單元測試[使用來自CodePlex的WCF負載測試](這在某種程度上似乎是在調試環境中重新生成用戶錯誤的理想工具。免責聲明:未使用該工具。從閱讀項目DESC)展示
  7. 以上可以進行調整以自動產生的輸入數據
  8. 介紹變化到輸入端,以便不同的代碼路徑是從性能計數器瑞典克朗(SEK)
  9. 登錄數據
  10. 分析使調用的測試並找出瓶頸

問題:

  1. 有沒有更好的方法嗎?
  2. 對於使用內部隊列的服務,使用std性能計數器測量性能時出現問題。我可能需要定製計數器?
  3. 如果#1爲真,是否有辦法引入客戶計數器而不更改被測試服務的代碼?
  4. 我應該關心功能測試的結果嗎?
  5. 有沒有辦法[非侵入式]實現WCF服務的SLA? (我認爲如果我的計數器有足夠的數據,例如請求服務,發生異常,響應時間等,我應該能夠驗證我的SLA - 在5分鐘內爲每個請求提供200,000個請求,響應時間爲2秒 - 我的問題可能是我是否可以指定我的SLA,並且產品/工具可以完成場景背後的所有管道工作併爲我提供一個列表答案?我知道......我知道......我是在做白日夢:))
  6. 另外:什麼是在WCF服務內部排隊請求的最佳方法?

回答

1

哇......標題絕對是冰山一角!希望我在這裏根據我的反應沒有任何偏見! :)的WCF服務

  1. 性能測試可以做許多不同的方法:使用測試工具,如微軟團隊測試,Borland的絲綢表演,Mercury LoadRunner的,或像LoadGen或自定義的測試工具。我的首選是嘗試採用你在創建某種功能單元測試,然後將數據提供到該測試中的方法,同時使用測試工具啓動該測試的多個併發實例(虛擬'用戶') 。大多數商業測試工具的工具確實有助於這種類型的測試,因此很難在這裏出錯。維護測試用例和測試數據以支持測試應用程序通常會產生最大的挑戰。

  2. WCF沒有任何與性能相關的內置計數器。那實際上是一個盲點。當然,你可以看到服務器有多少連接,但這是粗略的信息,你可能想知道哪些服務正在服務這些請求。有傳聞稱,作爲爲WCF/WF提供豐富託管環境的一部分,微軟的「都柏林」將包括演示託管服務的性能計數器。我們將不得不等待,看看實際發生了什麼。

  3. 如果我需要在不影響現有代碼庫的情況下測試WCF服務,我會考慮可以從WCF行爲中獲得多少里程,以便將其應用於該服務。這種自定義行爲可能會出現您想要的性能計數器。

  4. 是的。我會關心功能測試的結果(意思是性能?)。需要注意的是,可能會有一些可以忽略的啓動(JIT)。我可能會考慮剖析功能測試的執行情況以獲取執行指標 - 但在性能運行期間,我不打開代碼性能分析。

  5. 對於SLA的再次定製行爲可能是答案。您可以將運營指標記錄到數據庫中,然後報告。像Amberpoint和SOA Software這樣的商業產品也將爲此提供支持(包括性能計數器)。

  6. 將請求排隊到wcf服務?我馬上想到net.msmq綁定,特別是如果你想要使請求持久。