【问题标题】:using a test runner for web performance tests使用测试运行器进行 Web 性能测试
【发布时间】:2013-12-20 18:48:10
【问题描述】:

我们正在 VS2013 上用 MVC/C# 编写一个应用程序。

我们使用 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 更改随机值,然后使用我的测试框架将该 dto 的值作为 Web 请求提交。比手动编写 JMeter 脚本要容易得多。 干杯, 戴夫

【问题讨论】:

  • 这听起来不适合单元测试。有多种工具可以对网站进行负载测试,但应使用单元测试来测试尽可能小的单元,以确保其按预期执行。
  • 我完全同意,这与单元测试无关。我们有一套完整的单元测试,它们是小型的、集中的等。我们还有集成测试、配置创建测试,甚至我们作为 nUnit 测试运行的 Web/UI 测试,其中一些在 nCrunch 下(用于真正的单元和一些集成测试)和一些使用 DXCore 测试运行器(用于 UI 测试)。对我们来说,NUnit 是一种为各种测试执行代码和断言结果的便捷方式。
  • 如果您的测试记录了足够的数据以便您从中提取性能信息,NUnit 可以正常工作。如果您有良好的日志记录,那么编写一个日志解析器来为您运行的所有测试提供性能信息并不难。
  • 我不认为日志记录会太难——困难的部分是:nUnit 正在寻找一个可以并行执行测试并允许动态增加/减少线程数的测试运行.

标签: c# unit-testing load-testing performance-testing


【解决方案1】:

虽然使用 NUnit 作为不同任务/测试的运行器是可以的,但我认为它不是性能测试的正确工具。

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

【讨论】:

    【解决方案2】:

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

    我认为真正的问题是您可以通过使用普通测试运行程序来利用多少。如果您已经在测试代码中记录了大量日志并且可以轻松调用它,那么使用 NUnit 会变得非常有吸引力。如果您没有足够的日志记录或框架来支持一些体面的负载场景,那么使用一些负载测试工具/框架可能会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多