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 Web 负载测试

用于 Visual Studio 负载测试的 C# 线程安全随机长

Visual Studio 2010 中的负载测试执行时间

Visual Studio 2013 Web 负载测试之谜

在 Visual Studio Team Services(之前是 Visual Studio Online)上运行负载测试时出现通信错误

Visual Studio 2012 负载测试忽略步数