2015-10-19 58 views
4

是否有可作为JUnit测试一部分集成的Java分析器?在Junit中使用Java分析器

例如,我想有一个条件,如果测试中的某个方法使用了X%以上的CPU,则测试应该失败/通过。

或者如果某个方法运行的时间超过X分钟,它应该会失败。

我看着YourKit,JVM监控和其他建议的工具在这里,以及 运行java -Xrunhprof:cpu=samples,file=myprogram.hprof

但所有这些不提供作为测试的一部分。

我也可以从测试中调用分析器,将结果(自动)保存到csv/txt /任何其他文件,并编写一些代码来提取信息。

开源/免费工具会更好,如果这样的存在

+1

我认为你是在拍摄单元测试的范围是诚实的。也很容易受到不同硬件/架构和/或环境条件的影响。如果你必须的话,你可以坚持超时的测试:http://junit.org/apidocs/org/junit/rules/Timeout.html –

+0

我同意@ Damien的答案。 JUnit用于功能测试,而不是性能测试。无论如何,你可能会考虑运行JMeter测试。 –

+0

我最感兴趣的是看看在任何特定时间对程序的更改是否会使我的代码变得更好/最差。我的测试基于JUnits每晚运行(也许我也在这里拍摄),并且我只是想在每次运行时调用一些分析器来查看是否有更改。 – Quantico

回答

1

JProfiler的具有可用于该目的的API。在JProfiler的安装,看看api/samples/platform directory,并检查了src-profiler/TestProfiler.java

作为一个大致的轮廓,代码看起来是这样的:

Connection connection = ConnectionFactory.getLocalConnection(); 

connection.recordCpuData(true); 
// TODO execute unit test 
connection.recordCpuData(false); 

CpuHotspots cpuHotspots = connection.getCpuHotspots(null, Aggregation.METHOD, 
     ThreadStatus.RUNNING, true); 

List<ProfilingValue> hotspots = cpuHotspots.getHotspots(); 
Collections.sort(hotspots); 
// TODO analyze hot spots 

connection.close(); 

免责声明:我公司开发的JProfiler。

+0

我假设JProfiler需要许可证,或者这种功能是免费版吗? – Quantico

+1

JProfiler是一个商业产品。它有一个时间有限的评估版本,但没有免费版本。 –