我目前有一个jmh基准来衡量实现相同接口的各种数据结构的性能。这个基准工作得很好,但是我想为每个基准打印一些附加信息,这些信息描述了我在试验前后的数据结构状态。
目前,我正在做下面的代码
@Param({"impl0", "impl1", "impl2"})
String dataStructureImplementation;
DataStructureInterface dataStructure;
List<String> inputData;
@Setup(Level.Trial)
public void setUp() {
switch (dataStructureImplementation) {
case "impl0":
dataStructure = new DataStructureImplementation0();
break;
case "impl1":
dataStructure = new DataStructureImplementation1();
break;
case "impl2":
dataStructure = new DataStructureImplementation2();
break;
default:
throw new IllegalArgumentException();
}
setUpDataStructure();
inputData = readInputDataFromFile();
System.out.println(dataStructure.getStateRepresentation());
}
@TearDown(Level.Trial)
public void tearDown() {
System.out.println(dataStructure.getStateRepresentation());
}
@Benchmark
@OperationsPerInvocation(1000000)
public void queryDataStructure(Blackhole bh) {
for (String datum : inputData)
bh.consume(dataStructure.query(datum));
}
问题在于 System.out.println
与jmh的输出混淆。有没有办法避免这种情况,让我的print语句在jmh完成试验报告后运行?另一种方法是将其写入一个文件,然后进行合并,但最好得到一个不需要手动合并的报表。
1条答案
按热度按时间eagi6jfj1#
没有现成的方法可以从@setup和@teardown方法中积累一些自定义格式的输出,并将其附加到最终报告中。
一种方法是将所需的输出附加到一个文件中,并在所有基准测试完成后打印其内容。
不过,您需要使用runner类来运行测试。
runresult对象包含来自迭代的信息。你可以把它和你的自定义输出混合起来,打印一些漂亮的报告。