我不喜欢回答自己的问题,但我把这个放在这里是为了方便有同样问题的人参考。
为什么其他第三个选项是错误的
第三个选项的问题在于,在具有1000个ID列表的LoadTest中进行1000次迭代时,LoadTest将以第一个ID运行1000次,而不是每个ID各运行1000次。我使用了某种nosql分析器来证明这一点。
如果我的Loadtest有1000个迭代和1000个ID的csv列表,则使用以下解决方案将执行1000个测试每个测试都有一个ID。如果发生您的LoadTest有更多的迭代,比如2000,那么在LoadTest 1001将再次从csv列表的开头开始。
我的解决方案
注意:此解决方案使用csv文件。它可以很容易地适应使用另一个不同的数据源,例如xml、excel、SQL Server中的表等。
实现这一点的正确选项是创建一个具有DataSource属性的测试。例如,您可以创建一个包含要在测试中使用的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()
{
string ID = TestContext.DataRow["ID"].ToString();
string querystring = CreateQueryWithErrorDebug(ID);
string result = RunXCCQuery(querystring);
Assert.IsTrue(result.Length > 0);
Assert.IsTrue(result.Contains(ID));
}
DeploymentItem 属性会复制 csv 文件。 DataSource 属性读取它并遍历其中的内容。
这行代码是测试从 TestContext 中读取数据的地方。
string ID = TestContext.DataRow["ID"].ToString();
在CSV文件中有n个ID将导致测试运行n次,每次运行一个ID。
我在调查中发现了一些有用的链接: