我不喜歡回答我自己的問題,但我把它放在這裏供將來參考,我的同一問題的人。
爲什麼其他第三選項是錯誤
第三選項的問題是,在1000次迭代負載測試1000 的負載測試的ID的列表與第一ID,而不是運行1000次1000次,每個ID與每個ID。我使用某種nosql分析器來證明它。
如果我的Loadtest有1000次迭代並且我的csv列表有1000個ID,那麼將使用以下解決方案執行1000次測試,每個測試都有一個ID。如果碰巧你的LoadTest有更多的迭代,比如2000,那麼在LoadTest 1001中將會從csv列表的開始處重新開始。
我的解決方案
注:該解決方案使用CSV文件。它可以很容易地適應使用另一種不同的數據源爲XML,EXCEL,在SQL Server中的表,等
正確的選項來實現,這是創建與數據源屬性的測試。例如,您創建一個包含要在測試中使用的ID的csv文件。我的CSV文件的示例:
ID
1003002-20121211120000
1004071-20121211120000
您需要添加一個的DataContext在你的測試:
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
最後,您的測試應該是這樣的:
[TestMethod,DeploymentItem("DataOrigin\\list.csv"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\list.csv", "list#csv", DataAccessMethod.Sequential)]
public void TestScenario_1_DATADRIVEN()
{
// PREPARATION
string ID = TestContext.DataRow["ID"].ToString();
string querystring = CreateQueryWithErrorDebug(ID);
// EXECUTION
string result = RunXCCQuery(querystring);
// ASSERTS
Assert.IsTrue(result.Length > 0);
Assert.IsTrue(result.Contains(ID));
}
DeploymentItem屬性複製csv文件。 DataSource屬性讀取它並遍歷它。
此行是測試從TestContext讀取的位置。在CSV文件
string ID = TestContext.DataRow["ID"].ToString();
具有n ID將導致測試運行n次,每一個ID。
我在調查中發現一些有用的鏈接:
我認爲您的解決方案不是負載測試。採用這種方法,您的1000個測試將一個接一個地運行,而不是同時運行。我對嗎? – Schaliasos 2013-02-28 09:32:14
**您是對的**,因爲我一個接一個地調用測試,所以這是一次性能測試。首先,我創建了一個單一測試,從nosql DB中檢索1個文檔,並使用LoadTesting數千次調用它。之後,爲了避免緩存命中,我必須做同樣的事情,但每次每次使用不同的ID時,文檔不會重複兩次。順便說一句,真正的數字不是1000,是150萬的請求:) – 2013-02-28 09:45:13
[負載測試](http://en.wikipedia.org/wiki/Load_testing)的目的是虛擬(併發)用戶執行請求以你的系統。你的測試結果呢?您的系統不會通過發送另外一百五十萬個請求來加載。您的服務器將不得不處理一個請求。 – Schaliasos 2013-02-28 09:51:48