无需加载JMeter表格,通过Java代码生成监听器执行报告CSV文件
直接用Java代码生成JMeter监听器CSV报告
要实现不通过JMeter GUI加载结果到表格,直接生成摘要、聚合、综合监听器的CSV报告,可以借助JMeter的核心API复用监听器底层逻辑,处理结果文件并输出CSV。
步骤1:引入JMeter依赖
如果用Maven,在pom.xml中添加以下依赖(版本建议和你使用的JMeter版本保持一致):
<dependencies> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.6.3</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_components</artifactId> <version>5.6.3</version> </dependency> </dependencies>
步骤2:编写核心代码
以下代码读取指定JMeter结果文件(.jtl),分别生成三种监听器的CSV报告:
import org.apache.jmeter.reporters.AggregateReport; import org.apache.jmeter.reporters.SummaryReport; import org.apache.jmeter.reporters.SynthesisReport; import org.apache.jmeter.samplers.SampleEvent; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.save.SaveService; import org.apache.jmeter.util.JMeterUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.Collection; public class JMeterReportGenerator { public static void main(String[] args) throws Exception { // 初始化JMeter环境 JMeterUtils.loadJMeterProperties("jmeter.properties"); // 替换为你的jmeter.properties路径,可从JMeter安装目录获取 JMeterUtils.setJMeterHome("path/to/your/jmeter/home"); // 替换为JMeter安装根目录 JMeterUtils.initLocale(); // 加载JMeter结果文件 File resultFile = new File("path/to/your/testresults.jtl"); Collection<SampleResult> sampleResults = SaveService.loadSampleResults(resultFile); // 生成各类报告 generateSummaryReport(sampleResults, "summary_report.csv"); generateAggregateReport(sampleResults, "aggregate_report.csv"); generateSynthesisReport(sampleResults, "synthesis_report.csv"); } private static void generateSummaryReport(Collection<SampleResult> sampleResults, String outputPath) throws IOException { SummaryReport summaryReport = new SummaryReport(); summaryReport.setDelimiter(","); for (SampleResult result : sampleResults) { summaryReport.sampleOccurred(new SampleEvent(result, "")); } try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outputPath), StandardCharsets.UTF_8)) { summaryReport.printResults(writer); } System.out.println("摘要报告已生成:" + outputPath); } private static void generateAggregateReport(Collection<SampleResult> sampleResults, String outputPath) throws IOException { AggregateReport aggregateReport = new AggregateReport(); aggregateReport.setDelimiter(","); for (SampleResult result : sampleResults) { aggregateReport.sampleOccurred(new SampleEvent(result, "")); } try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outputPath), StandardCharsets.UTF_8)) { aggregateReport.printResults(writer); } System.out.println("聚合报告已生成:" + outputPath); } private static void generateSynthesisReport(Collection<SampleResult> sampleResults, String outputPath) throws IOException { SynthesisReport synthesisReport = new SynthesisReport(); synthesisReport.setDelimiter(","); for (SampleResult result : sampleResults) { synthesisReport.sampleOccurred(new SampleEvent(result, "")); } try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outputPath), StandardCharsets.UTF_8)) { synthesisReport.printResults(writer); } System.out.println("综合报告已生成:" + outputPath); } }
注意事项
- 确保
jmeter.properties路径和JMeter Home路径配置正确,否则会初始化失败。 - 结果文件(.jtl)需为JMeter标准格式,支持CSV或XML类型的.jtl文件。
- 若要调整CSV输出格式(如分隔符、字段顺序),可修改监听器对应属性,比如调整
setDelimiter()参数。
内容的提问来源于stack exchange,提问作者Amit Nigam
相关产品推荐
相关产品推荐

