在 Visual Studio 2010 Ultimate 裡,其實不用特別安裝 Visual Studio Agent 2010 就能進行負載壓力測試 (也只有 Visual Studio 2010 Ultimate 才能使用負載壓力測試功能),不過若真要進行大流量的負載壓力測試,一台主機可能過於單薄,這時我們就需要安裝 Visual Studio Agent 2010 的 Test Controller 與多台 Test Agent 透過多台主機一起對 測試中系統 (System Under Tests) 進行負載壓力測試,如此一來才能真正看出系統在高壓之下是否還能符合效能需求以及是否能夠穩定運作。Visual Studio Agent 2010 的安裝設定有許多注意事項,在本篇文章裡我將會搭配文章與錄影的方式讓第一次使用 Visual Studio Agent 2010 的人能夠快速且正確的將環境建立起來。
第一步:瞭解運行架構與與規劃測試設備(test rig)
一般來說壓力測試環境的配置會規劃成類似如下圖的架構,Machine 1 與 Machine 2 就是 開發人員主機,安裝 Visual Studio 2010 Ultimate 這個版本才能使用 Visual Studio 2010 內建的負載壓力測試功能。
在開發環境內會有一台 測試控制器主機 (Test Controller),也就是下圖的 Machine 3 的地方,這台主機的目的是用來接收開發人員主機所要求的測試命令(透過 Visual Studio 2010 進行操作),然後指揮所有的 測試代理程式主機 (Test Agent) 進行壓力負載測試。在 Test Controller 會收集 Test Agent 所收集到的所有測試數據並將最終的測試結果寫入資料庫 (LoadTest2010),最後將測試結果的報表顯示在 開發人員主機 的 Visual Studio 2010 視窗裡。
建議的主機規劃:
- 開發人員主機
- 安裝 Visual Studio 2010 Ultimate 才能發動負載壓力測試
- 測試控制器主機 ( 安裝一台即可 )
- 安裝 SQL Server 2008 Express 與 Visual Studio Test Controller 2010
- 資料庫與控制器主機可以安裝在一起!且安裝 SQLEXPRESS 版即可。
- 測試代理程式主機 ( 可安裝多台,以提供更大的壓力測試能力 )
- 安裝 Visual Studio Test Agent 2010
- 可以安裝多台測試代理程式主機
- 如果要進行較大規模的壓力測試,只要新增測試代理程式主機即可!
注意:若要從 MSDN 訂閱下載,請下載 Visual Studio Agents 2010 (x86 and x64) - DVD (Chinese-Traditional) 這一項才找的到 Test Controller 與 Test Agent 進行安裝。
第二步:安裝 Visual Studio Agent 2010 到各主機
建議將安裝的 Windows Server 2008 作業系統的 使用者帳戶控制設定(UAC) 給關閉,以免遇到許多非預期的錯誤。另外,安裝時也有許多注意事項,我都錄成影片了,各位要注意看:
1. 安裝 SQL Server 2008 Express Edition
2. 安裝 Visual Studio Test Controller 2010 ( 會連同安裝 .NET Framework 4.0 過程會重開機一次 )
- 插入 Visual Studio Agents 2010 光碟
- 安裝 Visual Studio Test Controller 2010
- 安裝完成後,立即設定測試控制器
- 勾選「設定以進行負載測試」會直接在指定的 SQL Server 建立資料庫與相關表格
- 注意: 設定完成後的組態摘要會顯示一則警示訊息「如果您要使用測試控制器來進行負載測試,必須使用可以存取 測試中系統 (System Under Tests) 上的效能計數器的帳戶」,如果要這麼做的話,測試控制器的服務帳戶可以切換成有權限的帳戶。
- 若在網域環境下,也可以在 測試中系統 (System Under Tests) 將 Load Controller 的電腦帳戶加入到 Performance Monitor Users 群組裡即可,這樣就可以繼續使用預設的網路服務帳戶來執行該服務。
備註: 建立壓力測試測試結果的資料庫的 T-SQL 置於以下目錄,因此你也可以自己手動建立資料庫:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\loadtestresultsrepository.sql
請注意:當你安裝好 Visual Studio Test Controller 2010 之後會發現在 Microsoft Visual Studio Test Controller 2010 組態工具 裡所看到的「授權虛擬使用者總數」為 0,沒有任何虛擬使用者可用也代表著你將無法使用 Visual Studio Agent 2010 幫你進行任何負載壓力測試。
任何 Visual Studio Ultimate with MSDN 訂戶都能夠免費獲得「無限數量 (Unlimited)」個虛擬使用者授權,因此只要 MSDN Subscription 網站即可查到虛擬使用者授權的序號,請參考本文最後的「補充說明」部分有詳細解說。
注意! 在以前如果虛擬使用者人數不夠的話需要先購買 Visual Studio Load Test Virtual User Pack 2010 才能增加虛擬使用者授權的數量,但從 3/8 開始已經完全無此限制了!(完全無人數上限)
以下是「管理虛擬使用者授權」的操作步驟圖示:
安裝授權識別碼進去後,就會看到授權虛擬使用者人數增加了:
覺得 1,000 人不夠用嗎?修改「授權計數」就可以增加虛擬使用者數目的總數了,完全沒有上限!簡直就是佛心來著的,如下圖我將授權計數改成 10 就會有 10,000 個虛擬使用者授權了!
3. 安裝 Visual Studio Test Agent 2010 ( 會連同安裝 .NET Framework 4.0 過程會重開機一次 )
- 插入 Visual Studio Agents 2010 光碟
- 安裝 Visual Studio Test Agent 2010
- 安裝完成後,立即設定測試代理程式
- 測試代理程式的執行身份必須有本機管理者權限
- 直接向測試控制器進行註冊
備註: 安裝過程中會安裝一個網路模擬驅動程式,這個網路驅動程式可讓這台 Test Agent 擁有動態切換 IP 位址的能力,這可以讓一台 Test Agent 就可以模擬許多不同的 IP 來進行負載壓力測試。因為像是 Microsoft NLB 這類負載平衡技術就會識別來源 IP 是否隸屬於同一網段,如果測試的來源 IP 都一樣的話,會導致所有負載都會導向到同一台伺服器,那這就無法測出該系統真實的壓力承受能力了。也因為如此,測試代理程式的執行身份必須有本機管理者權限才有辦法動態切換 IP 位址。
第三步:在 Visual Studio 2010 中指定 Test Controller 的位址 (以工作群組為例)
若要從 Visual Studio 2010 連接至 Test Controller,最先要考慮的問題就是 身份識別 (Identity) 的問題,假設我的開發人員主機登入的帳號為 will,那麼在沒有網域(工作群組)的情況下,你就要在 測試控制器主機 (Test Controller) 上也建立一個同名的帳號,而且密碼也要跟你 開發人員主機 上 will 帳號的密碼一模一樣才行。如果是有網域的環境下,那麼設定上就真的會簡單許多。
接著你必須將這個新建立的 will 帳號加入到如下圖的三個群組裡,這三個 TeamTest 相關群組各有不同的用途,你可以看情況將帳號加入到這幾個群組中:
- TeamTestControllerAdmins
- 這個群組的成員可以執行測試、檢視/刪除結果、建立環境和管理測試控制器/代理程式。
- TeamTestControllerUsers
- TeamTestAgentService
- 這個群組的成員可以連接到 Microsoft Visual Studio Test Controller 2010 服務。
在進行壓力測試之前,要先透過以下步驟進行設定,讓你的 Visual Studio 2010 先連上 Test Controller,請參考下圖進行設定:
在 Controller 的欄位輸入 Test Controller 的 IP 或電腦名稱,輸入完後按下 Enter 即可:
如果上述步驟都有正確安裝與設定的話,就會立即看到至少一個 Test Agents 已連線,而且會處於 Ready 的狀態,這就代表你的 Visual Studio 2010 已經正確與 Test Controller 連線了。如果沒有連線成功的話,通常都是因為 Windows 防火牆阻擋了 Port 6901 的關係,只要適當設定防火牆即可。
只要你的 Visual Studio 2010 已經能與 Test Controller 進行連線,那麼後續關於 網站效能測試 (Web Performance Testing) 或 負載壓力測試 (Load and Stress Testing) 的操作可以參考 邊做邊學 Visual Studio 2010 軟體測試、除錯及品質管理 (Software Testing、Debugging and Quality Assurance) 裡的教學影片進一步學習與操作。
第四步:設定測試專案的測試設定檔,指定使用 Test Controller 進行測試
預設的測試專案要做負載壓力測試時都會用本機來進行壓力測試,而且同時測試的虛擬使用者人數上限為 250 人 (也就是同時最多只能有 250 條連線的意思),若要改用遠端的 Test Controller 與 Test Agents 幫你進行負載壓力測試,必須參考以下步驟進行調整。
開啟測試專案的 Local.testsettings 檔案:
切換到 角色 (Roles) 頁籤,並且把 測試執行方法 (Test execution method) 切換到 遠端執行 (Remote execution) 選項:
這時你就可以從右側的 控制器 (Controller) 欄位透過下拉選單的方式選取你在第三步所建立的控制器:
最後點選 套用 (Apply) 即可儲存設定:
這時只要執行負載壓力測試,就會開始改用 Test Controller 幫你控制 Test Agent 進行負載壓力測試:
以下就是我在進行負載壓力測試時利用 TCPView 工具在 Test Agent 主機看到的網路連線狀況,這代表這台 Test Agent 已經在對我們的測試目標進行壓力測試中:
補充說明
任何 Visual Studio Ultimate with MSDN 訂戶都能夠免費獲得 1,000 個虛擬使用者授權,如果你是微軟最有價值專家或企業的 Visual Studio Ultimate with MSDN 的訂戶,可以參考以下步驟取得授權識別碼:
1. 先登入 MSDN 訂閱 網站
2. 點選 下載和產品金鑰
3. 點選我的產品金鑰
4. 找到 Visual Studio 2010 類別下有個 Visual Studio Load Test Virtual User Pack 2010 項目,這個序號就能透過 Test Controller 上的 Microsoft Visual Studio Test Controller 2010 組態工具 安裝進去。
後記
說實在的,負載壓力測試是門非常專業的領域,像我們以前有個案子,客戶請專業的壓力測試公司對我們開發的系統進行壓力測試,光是壓力測試與驗證這部分竟然就要花費上百萬,當時我還特別前去接受教育訓練學習他們的壓測軟體操作,當時他們用的是國外的專業壓測軟體並非 Visual Studio,況且當時的 Visual Studio 2005 的壓測工具並不完整,沒辦法非常精細的測試出系統各環節的效能瓶頸,不過我覺得現在的 Visual Studio 2010 壓測工具已經跟其他市場上現有的專業壓測工具不相上下,值得一試!
常見問題解答
※ 請問無法連接到 測試控制器主機 (Test Controller) 應該怎樣處理?
回答:常見的狀況是有以下幾種:
1. 防火牆 ( Port 6901 ) 阻擋了 開發人員主機 與 測試控制器主機 之間的連線
- 預設的情況下,防火牆會被自動開啟連接限制(如下圖示),如果沒開啟的話,你可以設定允許 Port 6901 進行連接即可。
2. 開發人員主機 與 測試控制器主機 兩端的權限沒有設定正確,以致於無法成功登入
※ 請問一台 PC 或是 Notebook 可以模擬出幾位虛擬使用者 (virtual user)?
回答:這要看你壓力測試主機 (Test Agent) 的硬體規格如何,一般來說一台電腦平均大約能模擬出 250 個虛擬使用者同時對測試中系統進行負載壓力測試,如果再多的話很可能會變成 Test Agent 自己本身的效能達到瓶頸(可能是 CPU、記憶體、或網路頻寬等限制造成的),如果 Test Agent 本身就已經無法施加壓力,那當然最後的負載壓力測試數據也就會失真!這也是為什麼我門在進行負載壓力測試時需要分析Test Controller 與 Test Agent 主機效能計數器的原因,如果負載過重,你就要嘗試增加 Test Agent 或降低虛擬使用者人數。
※ 請問 Visual Studio 2010 Ultimate 是否能提供試用?試用 Visual Studio 2010 Ultimate 搭配 Visual Studio Agent 2010 有什麼限制嗎?
回答:有的,你可以到以下網址下載 Visual Studio 2010 Ultimate 試用版:
另外,如果要使用 Visual Studio Agent 2010 進行負載壓力測試的話,你只能透過 Visual Studio 2010 Ultimate 試用版發動 25 次的負載壓力測試,當你執行超過 25 次負載壓力測試之後就無法再使用了。
相關連結