2009-10-14 78 views
1

我有一個datadriven單元測試,它從一個訪問數據庫中讀取並執行數據庫中的所有行。當我將這添加到一個負載測試並使用5個併發用戶執行時,所有記錄在數據庫中執行5次。我在這裏面臨的問題是,當數據庫中有更多記錄時,測試需要更多時間來執行。有沒有辦法限制測試只執行一個數據行?VSTS加載測試每個數據行一次運行

回答

1

您是否試圖在數據庫中每行運行一次測試,然後停止?如果是這樣,你應該避免使用你的網絡測試作爲負載測試。

我想你有兩個選擇,但我沒有我的工作電腦在我面前來確認。

選項1:像您已經完成的那樣創建Web測試,包括將它連接到訪問數據庫,就像您可能已經擁有的那樣。然後將測試轉換爲編碼的網絡測試。並更改代碼,以便爲數據源中的每個記錄運行一次(換句話說,將外部循環添加到編碼的webtest中)。

選項2:編輯您的本地測試運行配置運行測試N次。從主菜單轉到測試/編輯測試運行配置,選擇您的測試配置,從左側窗格中選擇Web測試,然後將固定運行計數更改爲5.我現在無法確認,但我相信每次測試運行它將前進到下一個記錄而不是停留在第一個記錄。

0

我假設你只想在有一行數據可用時運行數據測試。

我會改變數據驅動測試讀取與原子TRANSATION存儲過程像這樣的SQL代碼:

BEGIN TRANSACTION 

DECLARE @Id UNIQUEIDENTIFIER 

SET @Id = (SELECT top 1 ID from #TestData WHERE TestRun = 0) 
SELECT top 1 * FROM #TestData WHERE ID = @Id 
UPDATE #TestData SET TestRun = 1 WHERE ID = @ID 

COMMIT TRANSACTION 

這將在每次運行測試時給你一個唯一的數據行,使測試用於負載測試。

您將不得不使用SQL Express而不是訪問,因爲我認爲它不能很好地處理併發(可以在這裏打開)。

如果您需要在負載測試中所發生的控制,考慮creating a load test plugin,讓你實現從下面的負載測試事件代碼:

  • LoadTestStarting
  • LoadTestFinished
  • LoadTestWarmupComplete
  • TestStarting
  • TestFinished
  • ThresholdExceeded
  • 心跳
  • LoadTestAborted
0

後來我想通了測試迭代在負載測試場景的屬性來控制的,你想運行每個用戶的測試次數。

在運行設置

,設置 使用測試迭代=真 測試迭代= XXX(你需要的迭代次數)

也讓每個迭代之間的停頓, 在你的方案屬性負載測試,設置下面的屬性

1)Think Profile = On 2)Think Test迭代間的思考時間= 1

相關問題