1、建立測試程式
選用enyim用戶端
<configSections>
<sectionGroup name="enyim.com">
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching"/>
</sectionGroup>
</configSections>
<enyim.com>
<memcached protocol="Binary">
<servers>
<add address="127.0.0.1" port="11211"/>
</servers>
<socketPool minPoolSize="10" maxPoolSize="200" connectionTimeout="00:00:05" deadTimeout="00:00:30"/>
</memcached>
</enyim.com>
代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//using Tempus.Framework.Cache.MemCached;
using System.Data.Sql;
using System.Data.SqlClient;
using Enyim.Caching;
using Enyim.Caching.Memcached;
using Enyim.Caching.Configuration;
namespace TestMemcached
{
public partial class memcached : System.Web.UI.Page
{
static MemcachedClient mc = new MemcachedClient();
protected void Page_Load(object sender, EventArgs e)
{
if (!ConnectMemCached())
{
ConnectDB();
}
}
private bool ConnectMemCached()
{
try
{
string result;
object user;
if (mc.TryGet("User", out user)) //測試緩存中是否存在key的值
{
result = (string)user;
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
}
}
private void ConnectDB()
{
string constr = "data source=localhost;initial catalog=Test;user id=sa;pwd=sa";
SqlConnection conn = new SqlConnection(constr);
conn.Open();
string sql = "Select * From XDCM2007_Users Where UserId=18";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
Users user = new Users();
while (dr.Read())
{
user.userName = dr["UserName"].ToString();
user.RealName = dr["RealName"].ToString();
}
dr.Close();
conn.Close();
mc.ExecuteStore(StoreMode.Add, "User", user.userName, DateTime.Now.AddMonths(1));
}
public class Users
{
public int userId { get; set; }
public string userName { get; set; }
public string RealName { get; set; }
}
}
}
2、Microsoft Web Application Stress Tool 壓力測試工具
安裝并啟動WAS,程式運作時會打開“Cteate new script”對話框,即建立一個新的腳本視窗(如圖1),如果運作WAS沒有打開該視窗可以單擊WAS主程式視窗工具欄上第一個按鈕“New Script”即可。
為了使測試更加準确,更加接按真實效果,需要對錄制的測試腳本進行一些設定。
去除靜态幹擾
由于網頁是由圖檔、文字以及其它動态源碼組成的,而一般的靜态内容消耗的帶寬并不是很大,是以我們可以将其排除在外。在腳本中選中指向圖像、文字以及其它靜态檔案項目前的灰色按鈕,然後單擊工具欄上的“Delete”按鈕将其删除(圖4)
設定并發數
然後在單擊“New Recorded Script”下的“Settings”标簽,其中“Concurrent Connections”是設定并發連接配接數的,其下面的“Stress level (threads)”和 “Stress multiplier(sockets perthread)” 分别設定對目标伺服器的壓力及負載程度的,其中Level是用戶端所産生的線程數目,一個線程可以産生多個Socket并發請求,是以将兩者的數值相乘,所獲得的數字就是用戶端同時連接配接的并發數(圖5)。
時間設定
時間設定包括“Test Run Time”(測試運作時間)和“Request Delay”(停止響應)以及“Suspend”(挂起時間)三項。其中測試運作時間是以日、小時、分鐘和秒來設定的,建議該項時間不宜太短,如果設定的并發數較多,那麼時間應該按比較增長,以便産生足夠多的請求;而停止時間是指連接配接時超出這個時間即作逾時處理;在挂起時間處部分為Warmup和Cooldown兩項,一般可以設定為兩三分鐘為宜,這樣做的目的是避免測試開始和結束時資料的變形,影響測試的準确性。
指定帶寬瓶頸
“Bandwith”是指定帶寬瓶頸的,即選擇通路該網站大多數使用者所使用的帶寬。例如通路該網站的絕大部分使用者是撥号,那麼可以選擇56K。
四、開始測試
做好基本的設定工作後,就可以在左側選中建立的腳本“New Recorded Script”項,然後單擊工具欄上的“Run Script”按鈕,或者打開“Scripts”菜單下的“Run”指令,這樣就開始測試了。測試過程中會以進度條的方式實時顯示,待進度條結束我們即可進行測試結果分析了
現在我們就可以打開測試報告來檢視測試結果了。單擊“View”菜單,選擇“Reports”,在打開的視窗左側會按時間顯示所有測試報告。根據時間選擇本次測試報告,在視窗右側即可檢視具體内容。
在測試報告中最重要的部分就是“Socket Errors”部分和“Result Codes”部分。其中Socket Errors部分共分為Connect、Send 、Recv和Timeouts。其中Connect表示用戶端不能與伺服器取得連接配接的次數;Send表示用戶端不能正确發送資料到伺服器的次數;Recv表示用戶端不能正确從伺服器接次的次數;Timeouts表示逾時的線程數目。由此我們可以如果這四個數值都比較小,甚至為0則說明我們的伺服器是經得起考驗的;如果數值居高不下,甚至接近設定的并發數,那麼則要好好的檢查你的伺服器了(圖6)。