【问题标题】:Generic Performance Testing Framework For .NET.NET 的通用性能测试框架
【发布时间】:2011-09-28 09:11:07
【问题描述】:

我有一个用 C#/.NET 3.5 编写的客户端/服务器应用程序,我想对其进行一些性能测试。我一直在寻找一个通用框架来帮助我,但运气不佳。我想要一些可以管理一组客户端并根据某些设置为他们执行随机操作的东西。然后我还想记录一些与此相关的数据,以帮助我为我的系统计算出一些粗略的阈值,例如我可以支持 n 个用户每秒执行 x 个动作。

我会编写特定于我的应用程序的代码来执行以下任务:

  • 登录/注销客户端。
  • 向服务器发送消息以执行各种操作。
  • 记录来自服务器的确认和其他消息。
  • 测量特定于系统的统计信息。

我希望框架随后能够采用一组参数来描述测试场景,例如:

  • 在给定时间登录的客户数量。
  • 每秒为每个客户端执行给定数量的操作。

然后它将运行场景、管理和跟踪所有用户和操作并整理所有数据。 (这是我试图避免自己编码的无聊位......)理想情况下,它会内置一些通用测量值,例如发送消息和接收响应之间的时间,但如果没有,我可以自己编写代码。

我不想对我的代码进行任何分析;我总是可以在稍后运行这些测试时附加一个分析器。相反,我想对我的系统做出一些粗略的结论,即在它崩溃之前我可以扔给多少用户。 (如果有比“性能测试”更好的术语,请告诉我......压力测试可能吗?)

我意识到我在这里没有提供太多关于系统的细节。我觉得这是一个相当普遍的情况——我确信那里有很多客户端/服务器系统需要人们进行类似的测试。我发现很多基于 Web 的框架都可以做类似的事情,但它们似乎已经非常根深蒂固,并且不能轻易地适用于非基于 HTTP 的系统。

任何人都知道任何可能有帮助的事情吗?我的搜索还没有找到任何东西。我应该指出,在可预见的未来,我坚持使用 Visual Studio 2008 Professional,所以如果 2010 可以做到这一点,那对我来说是超出范围的。我想它不一定是 .NET 框架,只要我仍然可以相当轻松地插入我的 .NET 代码。

编辑要明确我的应用程序不是网站,它是通过自定义协议连接到 .NET 服务的 Windows 窗体客户端应用程序。我可以编写代码来执行相关的客户端操作,我只需要一个框架来放入它。

【问题讨论】:

  • 你在 .Net Profilers 上看过这个问题吗? stackoverflow.com/questions/3927/…
  • 我不想做分析,如果我有问题,我可以稍后再做。我更关心衡量我的系统可以容纳的用户数量。

标签: c# .net performance testing


【解决方案1】:

您要查找的关键字是“分布式测试”。

Smart Bear 有一个名为TestComplete 的产品,它支持distributed testing。我不认为它可以在一台机器上运行您的客户端的多个实例(也许可以,但我想这不是一个好主意,因为它会影响性能结果)。

他们还有一个名为 LoadUI 的开源项目,它是为与 SoapUI 集成而构建的,但是您可以将它连接到您自己的客户端测试工具。我不知道要付出多少努力。

这些是我所知道的工具,但有many more 分布式测试工具。虽然大多数确实用于基于 Web 的测试,但它们通常具有足够的可扩展性,可以简单地启动一个不同的(基于 GUI)测试框架(我最喜欢的是 QAliber),该框架在您的客户端应用程序上运行测试。

【讨论】:

  • 优秀 - 现在更容易找到东西,我知道了一个更好的术语!将看看 TestComplete - 听起来它可以从他们网站上的宣传中做我想做的事。
  • 看起来 TestComplete 对我来说可能并不理想,因为它似乎更适合记录点击等,而我需要一些客户端通过 API 进行连接。会继续寻找,但可能会重新写我自己的......仍然感谢您的回答 - 它一针见血。
【解决方案2】:

据我所知,目前不存在这样的框架(而且很可能不会存在,因为每个人的情况都如此不同)。因为“性能”对不同的人和不同的项目意味着不同的东西,所以你通常必须自己动手。值得庆幸的是,随着 .NET4 和 TPL 的出现,这变得比以往任何时候都容易。

性能测试需要涵盖三个方面:

  1. 定义“负载”
  2. 衡量“绩效”
  3. 评估结果

正如您所想象的,这两个都是完全宽松的定义。负载可以用每秒请求数、登录用户数等来衡量……性能可以用响应时间、内存使用情况来衡量……你懂的。

因此,您的第一步是定义一个“单位负载”,您可以轻松地进行扩展。例如,您可以创建一个ClientUnitLoad 类,它模拟客户端并定期对您的服务执行操作。 TPL 可以轻松扩展您的ClientUnitLoad(当然,除非您受到硬件限制)。

下一步是衡量性能。您如何衡量很大程度上取决于您要收集的指标:简单秒表在 90% 的情况下都很好,但只能衡量时间。构建自定义跟踪和指标收集基础架构绝对值得,因为您还需要在生产中使用它来验证您的系统在现实世界中是否按预期运行。

最后一步是评估您的指标。性能测试的最大问题是:a)它们很慢,b)不可靠。没有办法解决这个问题。通常,您需要大样本量(重复测试运行)和对指标进行某种统计分析以忽略异常值。然后应将处理后的结果与可配置的性能基准进行比较。

根据所需的复杂程度,该性能基准可能具有简单的接受标准(例如:响应时间低于 100 毫秒)或高级的特定标准(例如:当量登录用户数为 10 对 1)。

【讨论】:

  • 可悲的是,我试图避免写这一切! (我很懒,我知道...)鉴于您可以在其中放入特定于您的应用程序的代码的 Web 框架的数量,我希望有一个可以使用的非 Web 框架可以做很多工作我。
【解决方案3】:

我自己没有尝试过,但这可能适合您的需求。

https://browsermob.com/performance-testing

【讨论】:

  • 那只是为了测试网站,我的是一个 Windows 窗体应用程序。
【解决方案4】:

真的不能说是否有针对这种特定目的的测试框架,但也许您可以使用一个简单的控制台应用程序(因为主要思想是测试服务器性能)?您可以在不同的线程中对服务器进行多次调用,并使用例如Stopwatch 类来测量响应时间。

或者,您可以尝试通过增加调用次数来重载服务(可能在线程池用完线程之前服务会变慢?)。

【讨论】:

  • 我可以自己写一些东西来进行测量,但我希望有一个框架已经可以做到这一点。
【解决方案5】:

请查看以下链接。这可能会对您有所帮助。 http://msdn.microsoft.com/en-us/library/aa337591.aspx

我猜你甚至会在 VS2008 中获得该功能,但对于终极版。

【讨论】:

【解决方案6】:

http://blog.maartenballiauw.be/post/2008/02/code-performance-analysis-in-visual-studio-2008.aspx

在基于开发人员和基于团队的 Visual Studio 2008 中可用。我认为该功能在 Visual Studio 2010 中得到了改进。

我应该澄清一下 - 这并不为您要运行的所有测试用例提供支持。您必须自己在单独的项目中编写该逻辑,将其设置为启动项目,然后运行性能分析。

【讨论】:

  • 我还没有在寻找代码级别的分析,更一般的度量,比如“我的系统可以接受多少用户”。
【解决方案7】:

不久前我使用Microsoft Visual Studio Load Test在客户端/服务器应用程序中进行了一些性能测试

当您将单元测试添加到负载测试时,您可以锻炼性能 非基于 Web 的服务器组件

您必须将负载生成器编码为“Visual Studio 单元测试”,以便稍后您可以将它们添加到负载测试项目中。

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2010-11-12
    • 2011-04-23
    • 2010-09-05
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多