我正在开发一种传统的软件产品,我们不时会发货 - 或者发货,这些变化会大大降低性能。这个问题源于一些旧的设计选择,在某些原因中看似无辜的变化可能导致某些任务的数据库查询大量增加。
为了提前一点,我们希望自动运行一些基准测试作为Continous Integration构建链的一部分。
我一直在寻找以mstest / nunit属性为基础的样式实现测试的框架。
我已阅读有关该主题的各种帖子并搜索了Google并找到了一些有趣的提示(例如:.NET benchmarking frameworks)。
我似乎能够在NuGet和Google上找到的工具似乎都是较小的实验工具。在这种情况下,我可能会更好地做一些我们完全控制的事情。
问题是,任何人都有经验设置,任何人都可以推荐一个工具,或者我最好创建自己的testrunner来获得适合我们框架的东西。
基本要求是:
其他要求可能是
当我列出要求时,它感觉它可能非常具体,因此我将更好地实现我们自己的小框架。在这种情况下,我认为如下所述。
的TestRunner
TestMethods
像
这样的东西[Benchmark]
public TimeSpan Job_GetAllRows_TimeOnColdCache()
{
//Arrange
...
//Act
return Measure( () => Job.GetAllRows());
}
[Benchmark]
public int Job_GetAllJobs_CallsToDatabase()
{
//Arrange
...
Database.NumberOfQueriesExecuted = 0;
//Act
Job.DoHeavyCalculation();
return Database.NumberOfQueriesExecuted;
}
[Benchmark]
public TimeSpan Job_HeavyCalculation_AverageTimeToCalculate()
{
//Arrange
...
//Act
return Measure(Measurement.Average, 1000, () => Job.DoHeavyCalculation());
}
Measure类只是启动秒表的包装器,并且在最后执行try-finally并返回秒表经过的时间。
我希望有人对此发表评论 - 理想情况下有一个解决上述问题并准备使用的框架的经验。