2013年3月21日 星期四

負載測試流程 (with Visual Studio 2010 SP1 ) (二)




負載測試流程 (with Visual Studio 2010 SP1 ) ()
作者:JB


一、 負載測試也可以搭配已寫好的單元測試,來測試多工的系統(如WCF, Web api … etc
1.          先寫好一個單元測試
2.          在測試專案加入一個負載測試
3.          在測試混合中,選擇步驟一的單元測試



二、 如果單元測試裡面的內容,有包含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,下次就會抓到下一筆資料。
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();  }
            }
}

/// <summary>
/// Test Method
/// </summary>
 [TestMethod]
public void MyTestMethod()
{
    //
使用lock TestIndex 確保每次取得不同的測試資料
                lock ( lockObj )
                {
                    _testCase = X [TestIndex];
                    TestIndex++;
                 }
                 //Test Code…
            
}


結束

沒有留言:

張貼留言