2013-12-20 68 views
0

我们正在编写VS2013上的MVC/C#应用程序。使用测试运行器进行Web性能测试

我们使用selenium web驱动进行UI测试,并且围绕它编写了一个框架,使得该过程更具说明性,程序更少。下面是一个例子

[Test, Category("UITest")] 
    public void CanCreateMeasureSucceedWithOnlyRequiredFields() 
    { 
     ManageMeasureDto dto = new ManageMeasureDto() 
     { 
      Name = GetRandomString(10), 
      MeasureDataTypeId = MeasureDataTypeId.FreeText, 
      DefaultTarget = GetRandomString(10), 
      Description = GetRandomString(100)  
     }; 

     new ManageScreenUITest<MeasureConfigurationController, ManageMeasureDto>(c => c.ManageMeasure(dto), WebDrivers).Execute(ManageScreenExpectedResult.SavedSuccessfullyMessage); 
    } 

Execute方法所采用的值的DTO,并呼吁selenium.sendKeys和一堆其他的方法来实际执行测试,提交表单,断言响应包含我们想要的。

我们对这个框架的结果感到满意,但我发现类似的东西也可以用来创建负载测试场景。

IE,我可以有另一个UI测试框架的实现,它使用HTTPWebRequest向Web服务器发出请求。

从那里,我基本上可以“抱团”我的测试,以创建方案,如:

public void MeasureTestScenario() 
{ 
    CanListMeasures(); 
    CanSearchMeasures(); 
    measureId = CanCreateMeasure(); 
    CanEditMeasure(measureId); 
} 

拼图缺少的部分是如何运行这些“场景”负载下? IE浏览器,我在测试运行后可以执行1..N个并行测试,希望能够执行诸如加速时间,每个场景之间的随机等待等。理想情况下,并发测试的计数可以在运行时配置也就是说,产生5个更多的测试线程。报告不是非常重要,因为我可以将执行时间记录为Web请求的一部分。

也许还有另一种方法,例如,使用C#来控制更传统的负载测试工具?

这种方法的真正优点是处理更复杂的屏幕,即包含对象集合的屏幕。我可以从数据库中得到一个随机的父记录,使用我现有的自动映射器代码创建嵌套的dto,让代码可以随意更改随机值,然后使用我的测试框架将该dto的值作为Web请求提交。手工编写JMeter脚本更容易。 欢呼, 戴夫

+2

这听起来不像是适合单元测试的东西。有多种工具可以加载测试站点,但应使用单元测试来测试尽可能最小的单元以确保其按预期执行。 –

+0

我完全同意,这不是关于单元测试。我们有一套完整的单元测试,它们很小,专注等。我们也有集成测试,配置创建测试,甚至是作为nUnit测试运行的web/UI测试,有些测试是在nCrunch下进行的(对于真正的单元和一些集成测试)和一些使用DXCore测试运行器(用于UI测试)。对我们来说,NUnit是执行代码和维护各种测试结果的便捷方式。 – Dave

+0

如果您的测试记录足够的数据以便从中提取性能信息,NUnit可以正常工作。如果您拥有良好的日志记录功能,那么编写日志解析器并不难,因为您可以为所有运行的测试提供性能信息。 – evanmcdonnal

回答

0

虽然使用NUnit作为不同任务/测试的跑步者是好的,但我不认为它是性能测试的正确工具。

它使用反射,它有开销,最终使用webclient等的预定义设置。使用性能测试工具会更好。您可以使用NUnit来配置/启动它:)

0

我不同意NUnit不可用,通过适当的日志记录,任何功能测试运行器都可用于性能测试。当测试代码本身提供数据时,例如何时发送请求和收到响应,何时请求页面以及何时完成加载,开销并不重要。分析日志文件并生成一些基本指标是一项非常简单的任务IMO。如果它变成了一个巨大的项目,但更有可能改变事情,我可以通过一个需要一两个小时才能完成的命令行应用程序来完成。

我认为真正的问题是您可以通过与正常的测试跑步者一起做多少事情。如果您的测试代码中已经有很多日志记录,并且可以轻松调用它,那么使用NUnit变得非常有吸引力。如果你没有足够的日志记录或一个支持一些体面负载场景的框架,那么使用一些负载测试工具/框架可能会更容易。