我想运行单个单元测试并收集其"分析"信息:每个方法调用的频率,创建了多少个特定类的实例,执行某个方法/线程需要多长时间等等.然后,我想要将此信息与某些预期值进行比较.是否有任何适用于Java的Profilers而不是让我这样做(所有这些都应该自动完成,当然没有任何GUI或用户交互)?
这就是我希望它的工作方式:
public class MyTest {
@Test
public void justTwoCallsToFoo() {
Profiler.start(Foo.class);
Foo foo = new Foo();
foo.someMethodToProfile(); // profiler should collect data here
assertThat(
Profiler.getTotalCallsMadeTo(Foo.class, "barMethod"),
equalTo(3)
);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现这可以通过 J2SE 内置的HPROF 分析工具来完成。
java -agentlib:hprof=cpu=times MyTest
Run Code Online (Sandbox Code Playgroud)
它生成一个格式如下的文本文件:
CPU SAMPLES BEGIN (total = 126) Fri Oct 22 12:12:14 2004
rank self accum count trace method
1 53.17% 53.17% 67 300027 java.util.zip.ZipFile.getEntry
2 17.46% 70.63% 22 300135 java.util.zip.ZipFile.getNextEntry
3 5.56% 76.19% 7 300111 java.lang.ClassLoader.defineClass2
4 3.97% 80.16% 5 300140 java.io.UnixFileSystem.list
5 2.38% 82.54% 3 300149 java.lang.Shutdown.halt0
....
Run Code Online (Sandbox Code Playgroud)
然后很容易解析文件并提取您感兴趣的方法。该解决方案完全免费并且内置 JSE,与其他工具相比这是一个很大的好处。
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |