免費網站與REST服務壓力測試工具

ASP.NET Web API壓力測試

在《ASP.NET MVC 4網站開發美學》上市之後,曾經有讀者問筆者:「ASP.NET Web API是否真的可以使用在真實的專案上?」答案是肯定可以。ASP.NET Web API並不是一個全新技術,而是一項整合與改良的技術,ASP.NET Web API在HTTP Service就是要提供一個輕量且高效率運作框架。

但要如何證明呢?李錩鈺博士說:「有一分證據,說一分話。」現在為各位提供可視的數據給讀者。

SuperBenchmarker

這是一支Command-line應用程式,讓我們非常簡易即可對網站或HTTP API進行壓力測試。

PM> Install-Package SuperBenchmarker

安裝套件之後,開啟專案目錄下的「\packages\SuperBenchmarker.{version} \lib」即可找到sb.exe主程式。

SuperBenchmarker參數說明

  sb.exe -u url [-c concurrency] [-n numberOfRequests] [-m method] [-t template] [-p plugin] [-f file] [-d] [-v] [-k] [-x] [-q] [-h] [-?]
 

常用的有:

  1. -u url:你要測試的網站或REST服務URI。
  2. -n N:N代表要測試的次數。預設 100。
  3. -c N:N代表同時連線數。預設 1。

-c參數是壓力測試關鍵之一,以筆者的測試經驗,一台主機最大設定值約250以下,正常是設定為200最順。-n是進行多少回測試,數字越大測試越久數據越精確。

sb.exe 範例

以下是一些測試範例:

  1. sb.exe -u http://google.com
    以預設值(-c 1 -n 100)對http://google.com進行請求測試。
  2. sb.exe -u http://google.com -n 1000 -c 10
    以同時10連線進行1000次請求測試。

有了以上SuperBenchmarker工具,讀者就可以非常方便對ASP.NET Web API或網站進行簡易的壓力測試。注意,請不要去壓測別人的網站或服務。

最後,其實我比較擔心是硬體受不受的了,而不是軟體說。

參考資料

  1. http://byterot.blogspot.tw/2013/05/superbenchmarker-ab.exe-sb.exe-apache-benchmark-load-performance-benchmark-asp-net-web-api.html
  2. https://github.com/aliostad/SuperBenchmarker/tree/master/download
  3. http://chocolatey.org/packages/SuperBenchmarker

Entity Framework的Entities類別不出現在IntelliSense

Entity Framework的Entities類別出現與不出現在IntelliSense

Action方法中正常的IntelliSense
Action方法中不正常的IntelliSense

圖一是正常我們加入ADO.NET 實體資料模型(EDMX檔案,Entity Framework)之後,在MVC的Action方法中撰寫相關資料庫程式碼時應該出現的IntelliSense提示。

圖二,這是學生在操作時發生的問題,後來我回家模擬來出,在加入Entity Framework Data Model之後,於MVC的Action方法裡的IntelliSense不會出現NorthwindEntities型別的提示。

發生原因及解決辦法

設定Windows 8.1 RTM的指紋登入

Windows 8.1無法安裝Lonovo System Update

Lenovo System Update

在Microsoft的德政之下,終於可以透過MSDN下載到Windows 8.1正式版,雖然不是第一時間,但該來的總是要來,今天就把主機重灌上到Windows 8.1正式版。安裝速度令人非常滿意,而且我很高興買的是Lenovo的筆電,因為它有一支非常好用的System Update程式,只要執行System Update之後,軟體、驅動程式…都會自動幫你下載安裝,可說是“一鍵式”之大成。對於我們這種常常東裝裝、西搞搞的人實在太方便。

不過,如果你下載System Update之後在Windows 8.1無法安裝,那必須透過指令模式來安裝(感謝Demo Fan提供)。

                systemupdate502-06-26-2013.exe -s -a /s /v"/qn"
            

安裝不會有任何訊息,你可以過一會兒查詢「應用程式列表」,安裝好就下出現下例圖示:

System Update in Windows 8.1

ThinkVantage Fingerprint Software無法安裝

透過System Update已經差不多要安裝完成之後,最後一個如第一張圖的ThinkVantage Fingerprint Software會無法安裝,如下圖:

ThinkVantage Fingerprint Software can not install in Windows 8.1
ThinkVantage Fingerprint Software install error message in windows 8.1

提升ASP.NET MVC專案安全性與效能小技巧

ASP.NET MVC專案最佳化

在討論ASP.NET MVC時,大多是針對MVC模式與MVC應用程式在討論,較少看到有人討論ASP.NET MVC專案本身,其實ASP.NET MVC專案有幾個地方可以微調整,有些可以增加安全性,有些可以增加效能。

取消Header輸出MVC專案版本

預設的ASP.NET MVC專案在一次回應請求的標頭裡包含著些ASP.NET MVC專案的版本,以 http://kkbruce.tw 為例,預設情況下的回應標頭(Response Header)為:

HTTP/1.1 200 OK
Cache-Control: public, max-age=3600
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Sat, 27 Jul 2013 17:49:36 GMT
Last-Modified: Sat, 27 Jul 2013 16:49:36 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RTpcUHJvamVjdHNca2ticnVjZS50d1xra2JydWNlLnR3XEJvb3RzdHJhcFxHZXR0aW5nU3RhcnRlZA==?=
X-Powered-By: ASP.NET
Date: Sat, 27 Jul 2013 16:49:39 GMT
Content-Length: 7699
  

由回應標頭(Response Header)中可以看出目前此網站的ASP.NET MVC 4的專案,如果某個版本ASP.NET MVC專案某一天爆發漏洞,那麼要找下手的目標是很容易的。

所有一個簡單的需求,不管我們的ASP.NET MVC專案是什麼版本,MVC 2/3/4/5…都不要在回應標頭(Response Header)顯示ASP.NET MVC專案版本,其實也很容易,只需要在 Global.asax 的 Application_Start() 透過以下設置:

Web API Client Library+Portable Library打造跨平台的Web API服務類別

Web API Client Library與Portable Library

ASP.NET Web API Client Library(HttpClient)讓我們簡單地在.NET用戶端應用程式中與RESTful HTTP Service互動。之前版本的Web API Client Library對於跨平台的支援度不是那麼好,目前Web API Client Library的下一個預覽版已經在這方面進行改良。此預覽版新增了可攜式類別庫(Portable Library)的支援,目前支援.NET Framework 4.5、Windows Store、Windows Phone 8三種應用程式類別。這些支援建構在最近發佈的可攜式HTTPClient和可攜式類別庫支援Json.NET。這樣我們就能建立單一的可攜式類別庫去讓Windows Store App、Windows Phone去呼叫Web API。

建立不同平台的專案

接下來,我們要建立三個專案,一個可攜式類別庫,透過可攜式類別庫使用Web API Client Library來呼叫RESTful HTTP Service,一個.NET Framework 4.5的主控台應用程式,一個Windows Store App,主控台應用程式與Windows Store App會透過可攜式類別庫來進行服務呼叫。

  1. 新增專案 → 可攜式類別庫專案 → 名稱:ContosoClient
  2. 進行可攜式類別庫條件設定。請設定為.NET Framework 4.5、Windows Phone 8、.NET for Windows Store App
    這是因為ASP.NET Web API Client Library不支援 xbox 360、Silverlight和Windows Phone 7.5。以下範例不進行Windows Phone 8示範,不過我們的建立的可攜式類別庫是可以支援Windows Phone 8。
  3. 加入 → 新增專案 → 主控台應用程式 → 名稱:ContosoConsole
  4. 加入 → 新增專案 → Windows市集 → 空白的應用程式(XAML) → 名稱:ContosoStore
    這裡可能會出現要求取得市集開發者授權請求,請依畫面登入取得。
  5. 透過 NuGet 為三個專案加入Microsoft.AspNet.WebApi.Client的參考。NuGet請選擇包括發行前版本
  6. 為ContosoConsole與ContosoStore專案加入對ContosoClient的參考。