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