如何通过单元测试最好地监控性能?
Posted
技术标签:
【中文标题】如何通过单元测试最好地监控性能?【英文标题】:How can I best monitor performance with unit tests? 【发布时间】:2010-07-23 23:53:50 【问题描述】:我已经开始为我的代码编写更多的单元测试(我应该做更长的时间),并使用 EQATEC 等代码分析器来识别瓶颈。我想知道是否有正确的方法来监控单元测试中的性能?
显然,代码分析器最适合进行优化,但我真正想要的是一种方法来确保我最近的更改不会意外影响我的性能(通过调用冗余函数等),甚至如果它没有破坏任何逻辑。
我的第一个想法是多次运行我的方法(例如,insert
或某种类型)以得出通常需要的滴答数。然后编写一个将重复方法调用的单元测试,然后是Assert(elapsedTicks < magicNumberOfTicks)
。不过,这似乎太武断了,我想知道其他开发人员在这种情况下使用了什么?
【问题讨论】:
我认为您正在寻找更多的压力测试/负载测试软件。 重点是我已经在使用单元测试来确保我的逻辑不会中断,并且我想快速知道(最好在 VS 中)我是否无意中多做了两个调用我拥有的那个递归函数,它不会破坏任何东西,但会使它变慢 400%。 使用单元测试来衡量任务的性能可能很有用,但您必须对结果持保留态度。例如,在 UT 中,可能不会出现 GC 开销之类的东西。这可能更多地适用于本机代码,但 CPU 缓存的效果可能无法反映现实。 【参考方案1】:我真的建议进行单独的回归测试和单元测试。单元测试的目的是代码信心,它会起作用吗?它们应该快速而简单。要进行真正的性能测试,您需要足够大的样本量才能使结果有价值。在单元测试中这样做会使单元测试花费太长时间,然后您可能会觉得不需要一直运行它们,因为它们花费的时间太长。
对于回归测试虽然是一个很好的工具(我知道可能有更好的工具),但是一个简单的 excel 宏就足够了。而且您还有一个额外的好处,那就是已经将数据保存在电子表格中,您可以轻松地比较许多测试的运行情况。
但是如果你仍然想在你的单元测试中进行性能测试。神奇数字的想法可能是您最好的想法,假设断言错误消息包括预期和实际时间,这将使您快速指示运行时间还有多远。
【讨论】:
【参考方案2】:Here您可能会找到您选择的有用工具。
问候。
【讨论】:
以上是关于如何通过单元测试最好地监控性能?的主要内容,如果未能解决你的问题,请参考以下文章
如何最好地对使用 IServiceGateway 调用其他内部服务的 ServiceStack 服务进行单元测试
如何最好地测试(单元测试)独立于 WL 应用程序的 WL 适配器? + Jasmine 测试:不能使用“in”运算符在 null 中搜索“SUPPORT_COOKIES”