2015年7月13日 星期一

使用 West Wind WebSurge 對 ASP.NET Web API 服務進行壓力測試

West Wind Web Surge (以下簡稱 WebSurge) 不只是用於 ASP.NET Web API 的壓力測試功能,也可以對 ASP.NET MVC, ASP.NET WebForm 或是其他網站應用服務進行簡單的壓力測試,而 Load Testing 也僅是 WebSurge 其中的一個功能,WebSurge 也有類似 Telerik Fiddler 的功能,可以針對指定的瀏覽器所發出的 Request 和接收的 Response 進行擷取,有興趣的朋友可以去 WebSurge 的官方網站裡進行瞭解。

不過這一篇文章只針對 Load Testing 這個功能作簡單的說明。

 


West Wind WebSurge

http://websurge.west-wind.com/

image

仔細看看官網首頁的 Features 列表,WebSurge 提供了相當多的功能。

WebSurge 是由大神 Rick Strahl 所開發的,這是一套開放原始碼的軟體,雖然是開源軟體但還是有區要授權的,在個人使用的情況下是可以免費使用,基本上個人使用的免費版或 Professional, Org 版本的功能都是一樣的,唯一不同的就是 Org 版本是可以在同一個組織下提供多人使用。

http://websurge.west-wind.com/pricing.aspx

免費版與付費版比較明顯的不同就在於,免費版會不定時出現提醒註冊的聲明。

image

 

對於 WebSurge 還是不清楚這是個什麼樣的工具以及有提供哪些功能,建議先看官網的功能介紹說明,

http://websurge.west-wind.com/features.aspx

如果還是覺得相當模糊的話,那麼就是看直接作者的操作影片,長度約 15 分鐘,雖然影片標題是說 Web Load Testing,但在影片裡已經將大部分的功能都操作一遍,所以透過影片就會知道 WebSurge 是在做什麼的啦~

https://www.youtube.com/watch?v=TSfWYcr6q5o

image

 

WebSurge 的下載安裝相當簡單,你可以直接從官網下載,或是自行到 Github 下載最新版本,或者是透過 chocolaty 下指令安裝。

http://websurge.west-wind.com/download.aspx

image

 

使用

上面是簡短的介紹與說明,雖然作者有提供影片給我們看,但我相信有人還是會略過影片想直接看看這個 WebSurge 到底要怎麼用,這邊以一個簡單的 ASP.NET Web API 服務做示範。

以下有三個提供資料的 Web API 以及所提供的資料內容(以下截圖所用來操作執行 Web API 的 Client 工具是 Postman

_http://localhost:35346/v1/Customers/{CustomerID}image

_http://localhost:35346/v1/Customers/ALL

image

_http://localhost:35346/v1/Customers/Paging?Start={PageIndex}&Count={PageSize}

image

 

現在要使用 WebSurge 來執行這三個 Web API,

加入新的 Request

image

填入 Web API 的連接位址

image

在下面有兩個 Button,分別為 Save 和 Test,建議先執行 Test 已確認位址是有效的,確認有效之後再儲存,

image

測試與執行結果

image

依序加入要測試的 Web API 位址

SNAGHTMLe459f74

剛才都是一個一個做測試,如果想要一次測試剛才所加入的全部 Web API 服務,可以直接執行上面的「ALL」選項,

image

執行結果,可以看到全部所有執行的結果,全部執行約執行多少時間、平均執行時間、最短執行時間、最長執行時間,個別 Request 的執行結果也會顯示。

SNAGHTMLe48b83d

 

Load Testing

上面是單次的執行,不論是針對個別的 Request 或是全部的 Request,都是只有執行一次,但如果想要做一段時間裡發出多次 Request 執行的壓力測試時,就可以使用 WebSurge 所提供的功能,

image

Time 單位是秒,Threads 可以決定開多少執行緒發出 Request,這邊不建議開太多,因為要考慮執行端環境的硬體(也就是你自己電腦 CPU 記憶體 硬碟 … etc 的等級),設定完之後就可以按下「Start」開始執行測試。

執行的時候會在 Output 裡顯示當下執行的項目,

SNAGHTMLe552d72

執行完畢

SNAGHTMLe573c1e

WebSurge 針對執行結果還有提供統計圖表,有:Requests per Second 與 Time taken per URL

image

Request per Second

SNAGHTMLe5ac2b5

Time taken per URL

SNAGHTMLe5c5069

SNAGHTMLe5b4b9c

SNAGHTMLe5c00b3

 

如果你不想要太規則地發出 Request,而是想要隨機發出 Request,可以先點選某一個 Request 之後,再到 Session Options 裡去對「RandomizeRequrests」由 False 改為 True,

image

再重新執行 Load Testing,可以看到發出的 Request 就會比較隨機而不是有序(如果你所加入的 Request 並不是很多的話,那麼就比較看不出來),

SNAGHTMLe625195

 

如果希望你所建立的一連串 Request 能夠保存下來,可以將 Session 給儲存下來,下次重新開啟 WebSurge 就可以再載入 Session 使用。

image

 

會找到 WebSurge 還真的是誤打誤撞,原本是剛好看到 Rick Strahl 的這一篇文章「Prettifying a JSON String in .NET」,然後在文章裡看到 WebSurge 的畫面,一開始還覺得這個跟 Fiddler 應該沒有什麼不同,但就在看完官網說明以及操作影片之後就發覺到這是個相當不錯的好工具。

我會把 WebSurge 當作開發 Web API 時的簡單壓力測試工具,因為使用與操作上相當簡單,如果再搭配 Visual Studio Ultimate 所內建提供的「效能與診斷」功能,將可以找到系統的瓶頸問題,或者有可以搭配一些不錯的付費診斷與檢測工具,例如 dotTrace, dotMemory, ANTS Performance Profiler or Memory Profiler, JustTrace .NET Memory and Performance Profiler 等。

不過如果要做更詳細的壓力測試,還是建議使用其他功能比較齊全的壓測工具,而 WebSurge 則是用來作為開發階段的壓測工具,畢竟開發人員對於效能與系統的負載還是要有基本的對應做法,在交付一個功能的成品之前,開發人員就要去做到基本的處理,例如驗證、安全性、效能、單元測試等,而不是等到最後要上線之前才去做。


Surge 的意思有大浪、波濤、巨湧的意思,這也是為什麼 WebSurge 的 Logo 上面有海浪標誌的主因,不過實際上應該是取用 SURGE ( Scalable URL Reference Generator ) 的意思。

另外有關 ASP.NET Web API 的壓力測試,可以使用 JMemter 或是 MicroSoft MVP - Bruce Chen 曾經在文章介紹過的 SuperBenchmaker。

KingKong Bruce記事: 免費網站與REST服務壓力測試工具

 

相關連結

http://websurge.west-wind.com/

https://www.youtube.com/watch?v=TSfWYcr6q5o

https://github.com/rickstrahl/WestwindWebSurge

http://jpkc.nwpu.edu.cn/yjsgsp/06/news/1.5.htm

West Wind WebSurge - an easy way to Load Test Web Applications - Rick Strahl's Web Log

 

以上

2 則留言:

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。