VS2010 Web 负载测试 - 如何将虚拟用户绑定到 CSV 数据源中的登录 ID
Posted
技术标签:
【中文标题】VS2010 Web 负载测试 - 如何将虚拟用户绑定到 CSV 数据源中的登录 ID【英文标题】:VS2010 Web Load Test - How to bind virtual user to a login ID in CSV datasource 【发布时间】:2014-10-08 23:05:19 【问题描述】:我有一个要运行 6 个 Web 测试的负载测试,每个测试都有如下步骤,其中测试组合为“基于启动的测试数量的测试组合百分比”:
-
登录
做某事(可能是很长的步骤)
退出
我将加载运行设置为与 150 个并发用户一起运行(步进加载模式),并且我的 CSV 文件中有 300 个登录。我从另一个线程中读到,我可以通过将数据源设置为“不自动移动光标”来从数据源设置具有唯一登录 ID 的虚拟用户,并添加一个自定义的预请求插件以使用以下代码移动数据光标:
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】:数据源中有 300 个用户,最大用户数为 150,不需要设置“不自动移动光标”,也不需要使用e.WebTest.MoveDataTableCursor()
。只需使用正常的数据驱动方法,设置访问权限Sequential
的数据源方法就足够了。使用这种访问方法,每当虚拟用户启动一个新的测试用例时,将读取 CSV 文件中的“下一个”行,在文件中的最后一条记录之后已读取下一条记录将是文件中的第一条记录。因此,在整个测试运行过程中可能会多次读取该文件。
负载测试场景具有“新用户百分比”属性。这可以设置为 100,表示每个测试都以新用户身份开始。
短语“唯一登录 ID”有几种可能的解释,因此需要知道您的解释才能给出准确的答案。
更新
在您写的评论中“我所有的 webtests 一开始都在调用相同的登录测试,并且数据源与登录测试相关联”。那就是问题所在。每个 Web 测试都从登录测试中获取相同数据的副本。
一种解决方案是将 CSV 文件拆分为多个文件,一个文件用于测试组合中的每个 Web 测试。将这些文件设置为 web 测试的数据源,并且没有登录测试的数据源。您可能需要在登录调用上设置“继承 Web 测试设置”属性。您可能还需要将数据源的“选择列”属性设置为“选择所有列”,以确保登录测试可以读取数据源的字段。但是有多个 CSV 文件会导致登录测试中如何读取正确的数据源上下文参数的问题。
我用共享登录测试做了一些测试,发现它很困难。我建议每个测试都进行自己的登录,即使这似乎与分解出通用代码的共同目标背道而驰。原因是数据源值是从上下文中使用DataSource1.FileName#csv.FieldName
等字符串访问的。问题是每个测试的FileName#csv
部分需要不同。可以使用插件将用户名和密码从数据源复制到登录测试使用的其他上下文参数中,然后在每个主要 Web 测试中调用该插件。另一种方法可能是在登录测试中使用插件来获取数据源文件名并构建上下文参数名称以提取数据源字段。文件名可以作为上下文参数传递,也可以在运行时从插件中的e.WebTest...
字段访问文件名。
另一种方法
当测试在 新用户百分比 设置为 100 的情况下运行时,您可以更改测试组合以指定要为每个虚拟用户运行的初始化测试;那可能是登录测试。主要测试没有显式调用登录。可以通过负载测试创建向导或通过“编辑测试组合”命令设置初始化测试。
【讨论】:
这就是我开始的方式,使用“顺序”访问方法,没有自定义插件来移动光标,将测试设置为以“新用户百分比”为 100% 运行但是,我最终得到了很多会话过期问题,当我使用插件将登录 ID 写入文件然后我发现很多测试都以相同的登录 ID 开始时,似乎每个测试都有一个 CSV 文件的副本和所有从位置 0 开始。这就是为什么我然后切换到自定义插件方法。我所有的 webtests 一开始都在调用相同的登录测试,并且数据源与登录测试相关联 我的负载测试使用单个代理在本地运行。“唯一登录 ID”我的意思是我的 csv 中的登录 ID,我想要的是在测试执行期间,应该有 1:1 映射在虚拟用户和我的数据源文件中的登录 ID 之间。 @Sunny0427 请修改问题以解释您评论中添加的重要细节:“我所有的 webtests 都在开始时调用相同的登录测试,并且数据源与登录测试相关联”。跨度>以上是关于VS2010 Web 负载测试 - 如何将虚拟用户绑定到 CSV 数据源中的登录 ID的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 如何在负载测试中管理虚拟用户?
VS2010 中的 MSTest - 如何一步启动所有负载测试