Visual Studio 负载测试 - 每次唯一的数据
Posted
技术标签:
【中文标题】Visual Studio 负载测试 - 每次唯一的数据【英文标题】:Visual Studio Load Testing - unique data each time 【发布时间】:2015-05-27 09:54:06 【问题描述】:我正在使用 Visual Studio Ultimate 2013 进行一些负载测试。我有一些测试数据附加到我的 web 测试中,有 10,000 行唯一数据,并且我在另一个项目中也有一个 web 测试插件,我已经引用了它。在网络测试中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.QualityTools.WebTestFramework;
using Microsoft.VisualStudio.TestTools.WebTesting;
namespace VUControl
public class VUControl : WebTestPlugin
public override void PreWebTest(object sender, PreWebTestEventArgs e)
base.PreWebTest(sender, e);
e.WebTest.MoveDataTableCursor("testdata", "strictly#csv", e.WebTest.Context.WebTestUserId);
我已将源表属性设置为“不要自动移动光标”。
负载测试设置为在云上运行,500 个用户运行 5 分钟。
在运行测试时,我成功完成了大约 9500 个测试,但我只得到了数据库中生成的大约 10 组独特的数据。
我正在测试的页面本质上是一个网站上的注册页面。
谁能告诉我为什么我只会看到 10 个随机选择的数据出现?
【问题讨论】:
除了在 web 测试项目的引用中添加插件项目,您还必须调用插件 - 使用“添加 web 测试插件...”。仅仅因为 Web 测试运行而不报告任何错误并不意味着单个测试有效。建议在测试中的几个请求中添加验证规则,以检查第一个响应中的“输入用户名和密码”之类的词。然后在后续响应中检查“登录成功”、“创建数据库记录”、“注销成功”等字样。 我会回来的。与此同时,你有机会看到这个***.com/questions/9704992/… 【参考方案1】:我猜你有 10 个负载生成器?或者最多10个线程?
在我看来,真正的问题是 MoveDataTableCursor() 方法在独立的 webtest 中有效,但在负载测试中包含相同的 web 或 API 测试时则无效。您可以通过为数据集实现行计数来解决此问题,如下所示:
// datasetRowNumber is a pointer to the row number of an in-memory copy of the dataset. Each agent has a copy of the dataset.
static int datasetRowNumber;
public override void PreWebTest(object sender, PreWebTestEventArgs e)
int totalAgentCount = e.WebTest.Context.AgentCount; // Used in a modulus operation to skip rows in the dataset
int agentID = e.WebTest.Context.AgentId; //Used in conjunction with totalAgentCount in the modulus operation
while ((datasetRowNumber++ % totalAgentCount) != (e.WebTest.Context.AgentId - 1))
// We have incremented datasetRowNumber in the line above.
// Here is where we will use it to point to the new row.
e.WebTest.MoveDataTableCursor(DSName, tableName, datasetRowNumber);
string dataValue = e.WebTest.Context["DataSource1.SampleData.PRNCode"].ToString();
// Logging. Comment this out during a load test!
// writer.WriteToLog("Value=" + dataValue + ", TotalAgentCount=" + e.WebTest.Context.AgentCount + ", AgentID=" + e.WebTest.Context.AgentId + ", Iteration=" + iteration);
以上代码是以下博客中代码的实现: https://blogs.msdn.microsoft.com/slumley/2008/03/14/description-of-access-methods-in-data-sources/。 Sean Lumley 的“访问方法描述”非常适用于 Web 测试,但是当放入负载测试时,MoveDataTableCursor() 方法无法按预期工作。
上面的代码使用了 MoveDataTableCursor() 的重载 https://blogs.msdn.microsoft.com/slumley/2010/01/04/vsts-2010-feature-data-source-enhancements中描述的微妙之处
没有 datasetRowNumber 变量,Slumley 的代码不会在负载测试中推进光标;在 Lumley 的版本中,光标前进仅在独立的 webtest 中有效。
【讨论】:
以上是关于Visual Studio 负载测试 - 每次唯一的数据的主要内容,如果未能解决你的问题,请参考以下文章
用于 Visual Studio 负载测试的 C# 线程安全随机长
在 Visual Studio Team Services(之前是 Visual Studio Online)上运行负载测试时出现通信错误