我正在用C#/.NET开发软件,但我想这个问题也可以用其他编程语言来问。如何在不同的发布版本之间测试软件的性能?让我再详述一下。
在该软件的生产版本之前,我想对该软件在以前版本中提供的一组功能的性能进行比较。假设你正在讨论一个软件库项目(没有GUI),它导致了一个或多个dll的发布,如何实现这一点?有哪些最佳实践?我不可能将当前的dll与以前版本的dll进行交换,然后运行相同的测试。
我能想到的一种方法是在主分支(用于当前版本)和早期版本分支中添加相同的性能测试,然后比较性能。我认为这样做会带来一些痛苦,但这是可能的。
我能想到的另一种方法是从lest发布分支开始,存根出上次发布后添加的新代码和功能,然后运行测试。我认为这不会产生正确的结果,更何况这种做法比以前的做法更痛苦。
谢谢你的其他想法。我更喜欢C#/.NET的特定答案。
发布于 2010-12-23 05:26:15
我们有一套性能测试。这些只是NUnit测试。每个测试设置一些对象,启动一个计时器(秒表工作得很好),执行我们感兴趣的操作(例如,加载特定屏幕的数据),然后将运行时间写入CSV文件。(NUnit记录每次测试所需的时间,但我们希望排除设置逻辑,在某些情况下,设置逻辑在不同的测试中会有所不同--因此使用我们自己的计时器和日志记录更有意义。)
我们时不时地在相同的硬件和网络环境上运行这些测试。我们将结果导入到数据库中。然后,很容易构建显示趋势的图表,或者调用较大百分比变化的图表。
发布于 2010-12-23 05:25:53
如果想要实际比较不同版本之间的性能,那么您将需要一些在不同版本之间执行相同功能的测试。单元测试通常可以很好地解决这一问题。
您可以做的另一件更活跃的事情是,根据预定义的性能阈值,使用日志记录来检测代码。例如,当您在旧版本中运行代码时,您会得到一个度量。然后,将计时代码添加到您的应用程序中,以便如果同一函数在任何时间点花费的时间较长,则记录一条消息(或广播调用者可以选择记录的事件)。当然,您不希望在计时代码本身可能导致性能下降的情况下过度执行此操作。
我们在我们的应用程序中通过SQL调用来做到这一点。我们为任何一次sql调用应该花费的最大时间设置了一个阈值,如果有一个SQL调用超过了阈值,那么我们就会将其记录为一个警告。我们还使用相同的东西跟踪给定http请求中sql调用的数量。你的目标应该是随着时间的推移降低门槛。
您可以将这些测试包装在#if部分中,使其不包含在生产中,但将它们放入生产中也是非常有用的。
发布于 2010-12-23 05:25:33
您可以将测试结果追加到每个新版本的源代码管理文本文件中。这将为您提供每个版本性能的易于访问的历史记录。
您对分支和主干运行性能测试的想法本质上是相同的,但是保存结果可能会省去来回切换工作副本的工作。
https://stackoverflow.com/questions/4513814
复制相似问题