我们正在编写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脚本更容易。 欢呼, 戴夫
这听起来不像是适合单元测试的东西。有多种工具可以加载测试站点,但应使用单元测试来测试尽可能最小的单元以确保其按预期执行。 –
我完全同意,这不是关于单元测试。我们有一套完整的单元测试,它们很小,专注等。我们也有集成测试,配置创建测试,甚至是作为nUnit测试运行的web/UI测试,有些测试是在nCrunch下进行的(对于真正的单元和一些集成测试)和一些使用DXCore测试运行器(用于UI测试)。对我们来说,NUnit是执行代码和维护各种测试结果的便捷方式。 – Dave
如果您的测试记录足够的数据以便从中提取性能信息,NUnit可以正常工作。如果您拥有良好的日志记录功能,那么编写日志解析器并不难,因为您可以为所有运行的测试提供性能信息。 – evanmcdonnal