我在理解访问方法“不自动移动光标”如何用于 Web 测试数据源时遇到了一些困难。那里的文档似乎远非详尽无遗。
首先,假设有一个只有一个请求的简单 Web 测试。它使用一个名为 DS 的数据源和一个名为 StepList 的表,该表包含 5 行。
表的访问方法设置为“不自动移动光标”,并且当前测试设置在 Web 测试属性中启用了“每个数据源行运行一次”。Web 测试不是负载测试的一部分。
在这些条件下,测试运行 5 次,每行,所以它基本上自动移动光标。这是故意的吗?
现在,进入实际问题,这是本文的主题。
我上面的 StepList 表除其他外,还有一个标识列和一个 StepId 列。有问题的 Web 测试实际上是从另一个 Web 测试调用的,它应该只为在测试上下文中设置了 StepId 的表行运行。
Id StepId
1 1
2 1
3 2
4 2
5 2
为了实现这一点,我按照这里的指南编写了一个带有 PreWebTest 方法的 Web 测试插件,如下所示:
public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
string stepId = string.Empty;
if (e.WebTest.Context.ContainsKey(ContextParameterName))
{
stepId = e.WebTest.Context[ContextParameterName].ToString();
}
while (e.WebTest.Context["DS.StepList.StepId"].ToString() != stepId)
{
e.WebTest.MoveDataTableCursor("DS", "StepList");
}
}
仅当 stepId 的值为“2”时,上面的代码似乎才能在示例表上正常工作。如果为“1”,则 MoveDataTableCursor 会引发 WebTestEndOfDataException 异常:“AccessMethod Unique 的数据源表中没有更多的数据行”。
我尝试捕获异常并停止网络测试,但这不起作用,因为测试似乎永远不会结束。