VS2010 Web负载测试 - 如何将虚拟用户绑定到CSV数据源中的登录ID

时间:2014-10-08 23:05:20

标签: visual-studio-2010 load-testing

我有一个负载测试,有6个网络测试要运行,每个测试组合都有如下步骤,测试组合为“基于测试开始次数的测试组合百分比”:

  1. 登录
  2. 做某事(可能是很长的步骤)
  3. 注销
  4. 我将加载运行设置为使用150个并发用户(步骤加载模式)运行,并且我的CSV文件中有300个登录。我从另一个线程中读到,我可以通过设置数据源将“数据源”中的唯一登录ID设置为“不自动移动光标”,并使用以下代码添加自定义的预请求插件以移动数据光标: / p>

    e.WebTest.MoveDataTableCursor(DataSourceName, DataTableName, e.WebTest.Context.WebTestUserId);
    

    然而,当我开始运行负载测试时,我从移动数据表光标得到索引超出范围异常,当我查看e.WebTest.Context.WebTestUserId的值时,我看到测试运行它只是继续增长,然后超过我的csv文件中的记录总数。

    然后我将上面的代码更改为以下代码以避免异常。异常不再发生,但是我开始遇到会话丢失问题,因为当登录ID用完时,因为它再次从头开始,导致使用相同的登录ID同时运行两个测试。

     e.WebTest.MoveDataTableCursor(DataSourceName, DataTableName, e.WebTest.Context.WebTestUserId % 300);
    

    我的问题是:

    1. WebTestUserId如何增加?它不应该是虚拟用户ID吗?

    2.如何将每个虚拟用户映射到我的数据源中的登录名?

    更新 我的所有webtests都在开始时调用相同的登录测试,数据源与登录测试相关联。

1 个答案:

答案 0 :(得分:0)

数据源中有300个用户,最大用户数为150,不需要设置“不要自动移动光标”,也不需要使用e.WebTest.MoveDataTableCursor()。只需使用正常的数据驱动方法,设置数据源到Sequential的访问方法应该足够了。使用这种访​​问方法,只要虚拟用户启动新的测试用例,就会在最后一条记录之后读取CSV文件中的“下一行”行。在已经读取的文件中,下一条记录将是文件中的第一条记录。因此,在整个测试运行期间可能会多次读取该文件。

负载测试方案具有“新用户百分比”属性。这可以设置为100,表示每个测试都以新用户身份开始。

短语“唯一登录ID ”有几种可能的解释,因此需要知道您的解释才能给出准确的答案。

<强>更新

在评论中你写了“我所有的网络测试都在开始时调用相同的登录测试,数据源与登录测试相关联”。那就是问题所在。每个Web测试都从登录测试中获取相同数据的副本。

一种解决方案是将CSV文件拆分为多个文件,一个文件用于测试组合中的每个Web测试。将这些文件设置为Web测试的数据源,并且在登录测试中没有数据源。您可能需要在登录调用上设置“继承Web测试设置”属性。您可能还需要将数据源的“选择列”属性设置为“选择所有列”,以确保登录测试可以读取数据源的字段。但是,拥有多个CSV文件会导致如何在登录测试中读取正确的数据源上下文参数。

我已经使用共享登录测试进行了一些测试,发现很难。我建议每个测试都有自己的登录,即使这似乎与分解公共代码的共同目标相反。原因是使用{{DataSource1.FileName#csv.FieldName}}等字符串从上下文访问数据源值。问题是每个测试FileName#csv部分需要不同。可以使用插件将数据源中的用户名和密码复制到登录测试使用的其他上下文参数中,然后在每个主Web测试中调用该插件。另一种方式可能是在登录测试中有一个插件,它获取数据源文件名并构建用于提取数据源字段的上下文参数名称。文件名可以作为上下文参数传递,也可以在运行时从插件中的e.WebTest...字段访问该名称。

另一种方法

当测试以新用户百分比设置为100运行时,您可以更改测试组合以指定要为每个虚拟用户运行的初始化测试;这可能是登录测试。主要测试没有明确调用登录。可以通过负载测试创建向导或“编辑测试混合”命令设置初始化测试。