c# - 如何在 Web 测试插件中调用 MoveDataTableCursor 来浏览表中有限的行集?

标签 c# visual-studio-2010 .net-4.0 webtest

我很难理解“不自动移动光标”访问方法如何适用于 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

为了实现这一目标,我遵循了 here 中的指南并使用 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 的数据源表中不再有数据行”。

我 try catch 异常并停止网络测试,但这不起作用,因为测试似乎永远不会结束。

最佳答案

回答您的第一个问题:“不自动移动光标”设置仅适用于负载测试中的运行,这就是为什么在您使用的 Web 测试期间光标仍然自动移动设置“每个数据源行运行一次”。当然,后一个设置仅适用于网络测试运行。

您收到 WebTestEndOfDataException 的原因是:

  1. Visual Studio 测试引擎实现“每个数据源行运行一次”的方式包括以下事实:所有五个测试都只有一个数据游标;即在所有 5 次测试之间都会记住光标的状态。
  2. 每次测试迭代都会自动递增数据光标。
  3. 您的插件在这 5 个测试中推进数据游标,必然在 5 个测试完成之前耗尽可用行

让测试工作的最简单方法是手动设置迭代次数,而不是使用“每个数据源行运行一次”。例如,数据中只有两行有效,因此将迭代次数设置为 2。但是,这也是一个糟糕的解决方案,因为您必须手动计算行数并更改值。

下一个最佳方法是更改​​您的 WebTestPlugin,使其所做的只是检查 DS.StepList.StepId 的值,如果它与所需的值不匹配,则执行 WebTest.Stop() 。这样,不需要的迭代将立即终止。然而,它们仍然会浪费时间并增加视觉困惑。

如果父测试应始终运行,并且仅应跳过被调用的测试,则将“调用 WebTest”包装在“字符串比较”条件规则中,该规则检查 DS.StepList.StepId 的值stepId 上下文参数,因此只有在 StepId 正确时才调用子测试。

关于c# - 如何在 Web 测试插件中调用 MoveDataTableCursor 来浏览表中有限的行集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704992/

相关文章:

c# - 如何在c# mysql中创建表的表

c# - 用C#编写一个递减数组

c# - 从触发的事件中提取数据

visual-studio-2010 - 如何在 Visual Studio 2010 上恢复或防止意外的 UNDO/REDO 操作

visual-studio - 用Visual Studio 2010编译后执行exe文件或bat文件

c# - .NET 项目的 Sonar 运行程序异常

c# - 在 C# 中是否有更好的方法来编写此 bool 值评估

xml - XSLT 中对列表的值替换

c# - 是否可以创建具有两个同名属性的类型?

.net-4.0 - TPL - MaxDegreeOfParallelism 和 MaximumConcurrencyLevel 之间的区别