Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的自动运行时性能回归测试_Java_Performance_Regression Testing_Caliper - Fatal编程技术网

Java中的自动运行时性能回归测试

Java中的自动运行时性能回归测试,java,performance,regression-testing,caliper,Java,Performance,Regression Testing,Caliper,我正在寻找自动检测代码运行时性能变化的方法。这将以与JUnit类似的方式进行操作,但它不会测试代码的功能,而是测试速度的突然变化。据我所知,目前还没有自动执行此操作的工具 因此,第一个问题是:有什么工具可以实现这一点吗? 第二个问题是:如果没有可用的工具,我需要推出自己的工具,那么需要解决哪些问题? 如果第二个问题是相关的,那么以下是我看到的问题: 可变性取决于运行它的环境 既然Java中的微基准有很大的差异,那么如何检测变化呢 如果Caliper收集结果,如何从Caliper中获取结果,以便以

我正在寻找自动检测代码运行时性能变化的方法。这将以与JUnit类似的方式进行操作,但它不会测试代码的功能,而是测试速度的突然变化。据我所知,目前还没有自动执行此操作的工具

因此,第一个问题是:有什么工具可以实现这一点吗?

第二个问题是:如果没有可用的工具,我需要推出自己的工具,那么需要解决哪些问题?

如果第二个问题是相关的,那么以下是我看到的问题:

  • 可变性取决于运行它的环境
  • 既然Java中的微基准有很大的差异,那么如何检测变化呢
  • 如果Caliper收集结果,如何从Caliper中获取结果,以便以自定义格式保存。Calible的文件缺乏

  • 我不知道有什么单独的工具可以处理这个问题,但是JUnit在-annotation中有一个可选参数,名为timeout:

    第二个可选参数timeout在以下情况下导致测试失败: 所需时间超过指定的时钟时间(以秒为单位) 毫秒)。以下测试失败:

    因此,您可以编写额外的单元测试来检查某些部分是否“足够快”。当然,您需要首先确定特定任务运行的最长时间

    -

    如果第二个问题是相关的,那么下面是我要讨论的问题 见:

  • 可变性取决于运行它的环境
  • 总是会有一些变化,但为了最小化它,我会使用Hudson或类似的自动构建和测试服务器来运行测试,因此每次的环境都是相同的(当然,如果运行Hudson的服务器也执行所有其他类型的任务,这些其他任务仍然会影响结果)。在决定测试的最长运行时间时,您需要考虑到这一点(留出一些“空间”,这样,如果测试的运行时间比平时多5%,它仍然不会马上失败)

  • 既然Java中的微基准有很大的差异,那么如何检测变化呢
  • Java中的微基准很少是可靠的,我要说的是,通过集成测试(例如处理单个http请求或任何您拥有的)来测试更大的数据块,并测量总时间。如果测试因花费太多时间而失败,请通过分析隔离有问题的代码,或者在测试运行期间测量并注销测试的各个部分的运行时间,以查看哪个部分花费的时间最多

  • 如果Caliper收集结果,如何从Caliper中获取结果,以便以自定义格式保存。口径 缺乏文件

  • 不幸的是,我对卡钳一无所知。

    看看卡钳CI,我昨天发布了2.0版作为Jenkins插件。

    我刚刚遇到了一个看起来合适的,在scala和java中工作的版本

    我看到一个问题:“有没有一个现有的图书馆已经这样做了?”。这是问题吗?这是一个问题。如果没有,我需要自己滚动,需要解决哪些问题。我将稍微修改一下这个问题。Caliper的所有内容都不足,对此我深表歉意,并承诺在未来(少量)几个月内会发生变化。如果junit从文件中读取预期时间,则junit超时可能会起作用。仍然是创建和维护所有这些测试的问题。倾向于组合基准/回归测试以避免该问题。我可能会被困在一起测试大量代码,就像你建议的那样,以避免过多的误报。这可能接近于我想要的。希望使用几乎没有配置的独立应用程序。我的目标项目不是很大,不需要持续的集成测试。
    @Test(timeout=100) public void infinity() {
       while(true);
    }