Java 打印jmh基准测试的附加输出
我目前有一个JMH基准来衡量实现相同接口的各种数据结构的性能。基准测试运行良好,但我想为每个基准测试打印一些附加信息,这些信息描述了我在测试前后的数据结构状态 目前,我正在做下面的代码Java 打印jmh基准测试的附加输出,java,printing,benchmarking,jmh,Java,Printing,Benchmarking,Jmh,我目前有一个JMH基准来衡量实现相同接口的各种数据结构的性能。基准测试运行良好,但我想为每个基准测试打印一些附加信息,这些信息描述了我在测试前后的数据结构状态 目前,我正在做下面的代码 @Param({“impl0”、“impl1”、“impl2”}) 字符串数据结构实现; 数据结构接口数据结构; 列出输入数据; @设置(水平试验) 公共作废设置(){ 交换机(数据结构实现){ 案例“impl0”: dataStructure=新的DataStructureImplementation0();
@Param({“impl0”、“impl1”、“impl2”})
字符串数据结构实现;
数据结构接口数据结构;
列出输入数据;
@设置(水平试验)
公共作废设置(){
交换机(数据结构实现){
案例“impl0”:
dataStructure=新的DataStructureImplementation0();
打破
案例“1”:
dataStructure=新的DataStructureImplementation1();
打破
案例“impl2”:
dataStructure=新的DataStructureImplementation2();
打破
违约:
抛出新的IllegalArgumentException();
}
setUpDataStructure();
inputData=readInputDataFromFile();
System.out.println(dataStructure.getStateRepresentation());
}
@拆卸(水平试验)
公共无效拆卸(){
System.out.println(dataStructure.getStateRepresentation());
}
@基准
@职业期间的运营(1000000)
公共无效查询数据结构(黑洞bh){
用于(字符串基准:inputData)
消费(数据结构查询(数据));
}
问题是
System.out.println
的输出与JMH的输出混淆。有没有办法避免这种情况,并在JMH完成试验报告后运行我的打印语句?另一种方法是将其写入一个文件,然后进行合并,但最好得到一个不需要手动合并的报表。没有现成的方法可以从@Setup和@Teardown方法中积累一些自定义格式的输出,并将其附加到最终报表中
一种方法是将所需的输出附加到文件中,并在所有基准测试完成后打印其内容
不过,您需要使用类来运行测试
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class BenchmarkTestWithMoreOutput {
public static void main(String[] args) throws RunnerException {
// This is just a very basic setup just to get an idea
Options opt = new OptionsBuilder()
.include(BenchmarkTestWithMoreOutput.class.getSimpleName())
.forks(2)
.build();
Collection<RunResult> results = new Runner(opt).run();
// Now print your file content.
// It will be printed after the default JMH report
}
@Benchmark
public int benchmarkMethod() {
// code to benchmark
}
}
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(时间单位毫秒)
具有更多输出的公共类基准测试{
公共静态void main(字符串[]args)引发RunnerException{
//这只是一个非常基本的设置,只是为了得到一个想法
Options opt=新选项生成器()
.include(BenchmarkTestWithMoreOutput.class.getSimpleName())
.福克斯(2)
.build();
收集结果=新运行程序(opt).run();
//现在打印文件内容。
//它将在默认JMH报告之后打印
}
@基准
公共int基准测试方法(){
//代码到基准
}
}
对象包含来自迭代的信息。您可以将其与自定义输出混合,并打印一些漂亮的报告