Visual studio Visual Studio负载测试框架与控制台应用程序-奇怪的结果

Visual studio Visual Studio负载测试框架与控制台应用程序-奇怪的结果,visual-studio,testing,Visual Studio,Testing,我一直在使用VisualStudio负载测试框架对web服务进行负载测试 如果我保持测试简单,并从本地机器使用1个用户的恒定负载模式,我就能够每秒生成“x”个请求 或者,如果我使用运行相同测试的控制台应用程序,对web服务进行同步调用,那么控制台应用程序生成的负载是我使用VisualStudio负载测试框架获得的负载的两倍 如果我尝试扩展我的负载测试以使用多个测试代理8个核心,情况也是如此-VS框架不会产生接近运行多个实例的控制台应用程序的负载量 以下是我用来生成负载的两个不同的单元测试: //

我一直在使用VisualStudio负载测试框架对web服务进行负载测试

如果我保持测试简单,并从本地机器使用1个用户的恒定负载模式,我就能够每秒生成“x”个请求

或者,如果我使用运行相同测试的控制台应用程序,对web服务进行同步调用,那么控制台应用程序生成的负载是我使用VisualStudio负载测试框架获得的负载的两倍

如果我尝试扩展我的负载测试以使用多个测试代理8个核心,情况也是如此-VS框架不会产生接近运行多个实例的控制台应用程序的负载量

以下是我用来生成负载的两个不同的单元测试:

//Unit test used for load testing
[TestMethod]
public void HappyReturnCase_Test()
{
    HttpWebRequest req = WebRequest.Create("http://myurl") as HttpWebRequest;
    req.Method = "GET";
    req.GetResponse().Close();
}

//Console app version  
private static void Main(string[] args)  
{  
    for (int i = 0; i < 200000; i++)  
    {
        HttpWebRequest req = WebRequest.Create("http://myurl") as HttpWebRequest;
        req.Method = "GET";
        req.GetResponse().Close();
    }
}
你能解释一下为什么我会看到这种行为吗

提前谢谢。
Kevin

在Visual Studio中处理负载测试时,会想到一些事情

您使用的是哪种数据捕获? 是否有用于代码覆盖的工具? 您还需要记住,在VisualStudio中,您正在测试框架中调试代码,而测试框架不仅仅是调用代码。它分析结果,检查异常,记录调用代码前后的所有数据,用捕获的数据生成报告

所有这些从盒子里出来的东西,我们认为是免费的,都会对测试的性能产生影响


正如您所说,VS中每秒的请求数低于其应用程序对应的请求数,但您还需要权衡测试框架为您所做的所有其他工作。

对于控制台应用程序,没有限制您从客户端发出的请求。在VS负载测试中,还有其他因素限制了请求的数量,比如迭代的总数

例如,如果启用了测试迭代,则将在整个负载测试期间分散它们。通常,这会降低测试频率。如果设置了100个测试迭代,并且运行测试一个小时,每个测试需要30秒,那么您将少运行20个测试,因为它在一小时内均匀分布

这里还有一个回调模型。负载测试支持一个负载测试插件模型和一个请求插件模型,因此单元测试将向负载测试运行程序屈服,负载测试运行程序可能会切换到一个新的虚拟用户;即使将测试设置为1个虚拟用户,在整个测试过程中它也可能不是同一个虚拟用户。您将进行报告和日志记录,并且可能会为单元测试启动一个新的应用程序主机容器,以及一些其他活动。即使不是这样,您也没有将所有的时间都花在单元测试的上下文中

即使在单元测试中,也有其他方法在运行,如ClassInitialize、TestInitialize、设置计时器等。此外,还有一个线程池正在使用,即使只针对一个用户。有关负载测试运行程序如何运行单元测试的更多信息,请参阅。即使您将该单元测试数据绑定为运行100行数据,它也可能不会像您编写的循环那样快速运行,但它的好处是可以轻松地配置额外工作并同时运行多个单元测试

您可能需要通读性能测试快速参考指南


现在,在不运行多个用户的情况下,将恒定负载设置为1个用户并没有利用负载装配在线程池开销上的任何好处。如果您增加了用户数量,并让VS负载测试为您管理上下文切换,您将开始看到好处。另一个好处是创建一个可以轻松更改的测试组合,并收集perfmon统计信息,应用阈值规则,等等。您在console应用程序中没有真正执行任何操作。

您可以发布console应用程序中的代码,以便我们可以看到web服务是如何以编程方式调用的吗?@DaveRead代码现已发布-谢谢