自动化性能测试框架

5

有没有一个框架可以在JVM上编写自动化性能测试?

我想设定一些性能目标,并在性能低于目标时闪烁红灯(或者在控制台打印红色消息)。

我手动运行一些使用Calliper编写的基准测试,但是我希望性能测试套件像单元测试一样自动运行。

无数据库或Web服务器。


3
JUnit支持测试的定时功能,这已经足够了,您需要更高级的东西吗? - om-nom-nom
你能说出你想要的JUnit没有提供的功能吗? - Peter Lawrey
虽然JUnit对于一些足够稳定的基准测试(尽管存在JIT技巧、JVM预热、系统波动等因素)可能有效,但对于大多数微基准测试而言,它将失败(这需要像caliper这样的严格基准测试套件)。 - paradigmatic
2
如果每个提交的测量结果能够自动记录下来,那就太好了。 - ziggystar
3个回答

1

我不是性能测试专家,所以无法判断这个实现的难度,但使用JUnit规则应该是可行的。

它的工作方式类似于om-nom-nom提到的@Test注释,但您需要提供一个规则,例如对每个测试运行100次进行预热,然后运行100次并计算stdev,并在平均时间比设置的超时时间大2个stdev时失败测试。...或者规则应该是什么。

这里有一篇关于JUnit规则的文章article to JUnit Rules

基本上相同的方法也适用于ScalaTest


所以,基本上你是在测试中重新实现Caliper吗?在我看来,这个问题的真正答案是“不是”。 - Daniel C. Sobral
1
嗯...我试图以更有帮助的方式指出一些选项来表达“不”。建议不是在测试中实现它,而是在测试包装器中实现,这可以用于各种测试。 - Jens Schauder

1

自JUnit第4个版本开始,支持该功能:

import org.junit.*;

public class JunitTest4 {

    // timings below are in milliseconds
    @Test(timeout = 1000)  
    public void infinity() {
        // will fail    
        while (true);  
    }  

}

但遗憾的是,它只是基本功能,不确定您是否完全满意:您无法测量小于毫秒的东西,无法存储测试历史记录线,也无法看到您离目标有多远。


2
它似乎也没有进行正确的基准测试。Caliper可以处理计算stddev和序列功率等问题,以确定是否已经完成了足够的运行,并返回一个值以防止不正确的优化。 - Daniel C. Sobral
Caliper做的事情包括预热JIT、考虑GC等JUnit无法完成的任务。 - Louis Wasserman

0

ScalaMeter 工具包正是我在提问时正在寻找的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接