Java 打印jmh基准测试的附加输出

Java 打印jmh基准测试的附加输出,java,printing,benchmarking,jmh,Java,Printing,Benchmarking,Jmh,我目前有一个JMH基准来衡量实现相同接口的各种数据结构的性能。基准测试运行良好,但我想为每个基准测试打印一些附加信息,这些信息描述了我在测试前后的数据结构状态 目前,我正在做下面的代码 @Param({“impl0”、“impl1”、“impl2”}) 字符串数据结构实现; 数据结构接口数据结构; 列出输入数据; @设置(水平试验) 公共作废设置(){ 交换机(数据结构实现){ 案例“impl0”: dataStructure=新的DataStructureImplementation0();

我目前有一个JMH基准来衡量实现相同接口的各种数据结构的性能。基准测试运行良好,但我想为每个基准测试打印一些附加信息,这些信息描述了我在测试前后的数据结构状态

目前,我正在做下面的代码

@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基准测试方法(){
//代码到基准
}
}
对象包含来自迭代的信息。您可以将其与自定义输出混合,并打印一些漂亮的报告