負載測試流程
(with Visual Studio 2010 SP1 ) (二)
作者:JB
作者:JB
一、 負載測試也可以搭配已寫好的單元測試,來測試多工的系統(如WCF, Web api … etc)
1.
先寫好一個單元測試
2.
在測試專案加入一個負載測試
二、 如果單元測試裡面的內容,有包含initial(或結束)資料或設定的部分,建議把她們拿到其他函式。 然後在『測試混合』中的【初始化和結束測試】加上這部分,避免影響負載測試的結果。
三、 如果是要測試Concurrent (平行執行) 或
Sequential(依序執行) 的程式,請參考下表:
|
測試混合類型
|
回合設定
|
平行執行Concurrent
|
按虛擬使用者人數
(使用者人數:即要同時執行的Thread數目) |
測試反覆項目:
即要同時執行的案例數目 |
依序執行Sequential
|
按虛擬使用者人數
使用者人數:1
(只開一條Thread)
|
測試反覆項目:
總執行的案例數目 |
範例一: 平行執行某一Test Method 兩個不同案例
a. 測試混合類型:選擇 「按虛擬使用者人數」,使用者人數設定為 2
b. 回合設定:「測試反覆項目」設定為 2
範例二: 依序執行某一Test Method 兩個不同案例
a. 測試混合類型:選擇 「按虛擬使用者人數」,使用者人數設定為 1
b. 回合設定:「測試反覆項目」設定為 2
四、 如何在負載測試確保每跑一次程式(不管是Concurrent/Sequential),都是跑不同的資料?
1.
建立一個放資料的物件集合X
2.
建立一個Initial測試資料到X的函式 Init_TestData()
3.
建立要LOCK的靜態object 和 目前拜訪到的測試資料index靜態變數 :
=>在單元測試裡面的建構函式呼叫Init_TestData() 做Initial測試資料時,要Lock,避免同時做多次Intial。
=>取得測試資料時,要Lock並在取得後將測試資料index 加1,下次就會抓到下一筆資料。
=>在單元測試裡面的建構函式呼叫Init_TestData() 做Initial測試資料時,要Lock,避免同時做多次Intial。
=>取得測試資料時,要Lock並在取得後將測試資料index 加1,下次就會抓到下一筆資料。
4.
程式碼範例:
/// Contactless加值POS案例集合
private static List<資料物件> X= new List<資料物件>();
//Lock Intial建構子
private static object lockObj_Init = new object();
//Lock 測試案例index 的物件
private static object lockObj = new object();
//測試案例index For負載測試
private static int TestIndex = 0;
/// <summary>
/// 初始化測試資料
/// </summary>
private void Init_TestData ()
{
//設定測試案例給 X …
}
/// <summary>
/// 建構函式
/// </summary>
public UnitTest()
{
lock (lockObj_Init)
{
if (X.Count == 0) { this.Init_TestData(); }
/// Contactless加值POS案例集合
private static List<資料物件> X= new List<資料物件>();
//Lock Intial建構子
private static object lockObj_Init = new object();
//Lock 測試案例index 的物件
private static object lockObj = new object();
//測試案例index For負載測試
private static int TestIndex = 0;
/// <summary>
/// 初始化測試資料
/// </summary>
private void Init_TestData ()
{
//設定測試案例給 X …
}
/// <summary>
/// 建構函式
/// </summary>
public UnitTest()
{
lock (lockObj_Init)
{
if (X.Count == 0) { this.Init_TestData(); }
}
}
/// <summary>
/// Test Method
/// </summary>
[TestMethod]
public void MyTestMethod()
{
//使用lock 和TestIndex 確保每次取得不同的測試資料
}
/// <summary>
/// Test Method
/// </summary>
[TestMethod]
public void MyTestMethod()
{
//使用lock 和TestIndex 確保每次取得不同的測試資料
lock ( lockObj
)
{
_testCase = X [TestIndex];
TestIndex++;
}
//Test Code…
}
_testCase = X [TestIndex];
TestIndex++;
}
//Test Code…
}
沒有留言:
張貼留言