负载测试Web服务

时间:2013-01-31 10:09:14

标签: c# web-services load-testing

我被要求加载测试由我们的客户托管的外部Web服务。

基本上向服务发送多个Web请求,并计算服务处理它们所需的时间。尝试模拟来自不同计算机的多个不同用户访问Web服务。测试将检查web服务是否可以处理这个问题,基本上给客户端一些指标和示例....例如,它需要多长时间才能响应50个请求。

我知道这可以通过使用SoapUI / LoadUI等工具来实现。

我想知道的是,无论如何我可以使用C#编写负载测试?

目前,我有以下几点:

    [Test]
    public void TestService50Requests()
    {
        List<WebRequest> requests = CreateMultipleRequests(50); //Creates web request objects

        string timeSpan = TimeMultipleRequests(requests);

        Console.WriteLine("50 Requests runtime: " + timeSpan);
    }

    private void TimeMultipleRequests(List<WebRequest> requests)
    {
       var stopWatch = new Stopwatch();
       stopWatch.Start();

       foreach (var request in requests)
       {
            request.GetResponse();
       } 

       stopWatch.Stop();
       var timeSpan = stopWatch.Elapsed;
       return String.Format("{0:00} hours, {1:00} minutes, {2:00} seconds, {3:00} milliseconds", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10);           
    }

我认为有更好的方法吗?有任何改进建议或完全错误吗?

3 个答案:

答案 0 :(得分:3)

这实际上取决于您要测试的内容。负载测试可用于压缩(断开系统所需的并发用户数)或浸泡(延长时间段的中等负载)系统。您的代码不会向系统发送任何并发请求,因此不能将其视为模仿用户真实行为的良好测试。

有很好的工具可以实现这些目标,但它们可能成本很高。如果您有[{3}}可供使用,则Visual Studio Ultimate包含的内容非常好。您还可以查看load testing tools,这是一个可以执行类似操作的工具。

所以,我会回到给你这个要求的人那里,询问具体需要测试的内容。是系统可以处理的并发用户数,没有内存泄漏,系统可用性还是性能?

答案 1 :(得分:1)

要提供SoapUI的另一种替代方法 - 我会使用JMeter而不是尝试在C#中执行此操作。

从头版:

  

Apache JMeter功能包括:

     
      
  • 可以加载和性能测试许多不同的服务器类型:

         
        
    • SOAP
    •   
  •   

答案 2 :(得分:0)

我将解释如何在visual studio中为Web服务创建负载测试 创建负载测试项目 创建负载测试项目的第一步。要执行此操作,请执行以下步骤 步骤:

打开Visual Studio实例

通过单击“新建”&gt;创建新项目项目...

单击“测试”,然后使用C#选择“Web性能和负载测试项目”,提供任何合适的名称,然后单击“确定”。

创建项目后 使用记录器创建性能测试 第二步是创建一个性能测试,它可以使用记录器创建或直接调用HTTP请求,我们将使用记录器记录HTTP请求。 脚步: 添加性能测试左键单击您的项目并打开添加&gt;网络性能测试。

注意:将自动添加Web测试,您也可以根据需要重命名 如果记录器打开关闭,否则只需单击您的测试并单击“添加Web服务请求”。

从左窗格的属性

将本地主机发布方法更改为用户Web服务地址

在Body Properties中选择Content Type作为Text / XML,在String Body中提供您的XML。 例如。请注意使用SOAP 1.2 Request,因为我们使用.net框架工作4.0或4.5 点击确定

参数化脚本 正如我们在负载中所知,测试将模拟多个用户,因此在某些情况下,所有用户都需要一个唯一的数据集,因此对参数化请求非常重要。以下步骤需要完成 我们需要一个数据源将我们的参数与Excel或SQL Server表中的数据绑定。要执行此操作,请单击突出显示的图标创建数据源。

如果要从CSV文件中获取参数数据,请选择CS,然后选择数据库。

如果SQL Server通过执行必需的步骤并最后选择表格来创建与D.B的连接。 现在打开Web服务正文XML,并在其标记.Name文件中参数化参数类型。文件名。}}例如

{{DataSource1.test#csv.ID}}

这种方式可以参数化Web服务的所有必需参数。

添加负载测试 现在,在创建性能测试之后,您需要针对它创建负载测试。为此,请执行以下步骤。 脚步: 左键单击项目并打开

将打开一个窗口,然后单击

为您的方案命名,选择思考时间,然后单击下一步

根据您的要求和测试机器规格选择用户数。

选择测试模型

添加性能测试通过单击“加载测试”中包含的“添加”

选择您的测试

以这种方式配置负载测试并继续

执行负载测试。 完成所有配置后,只需启动加载测试

当负载测试开始后,将显示图表

生成报告 有不同的方法可以生成负载测试报告,一种是使用excel自动创建报告,另一种是准备报告您自己只需要的数据,我通常需要的是响应时间及其图表我只需报告如下所述在电子邮件形式,但它取决于需要。

你可以在link

找到一个基本的turtorial