来自 Java 代码的 JMeter 测试 - 生成与 GUI 报告相匹配的 Console/File 报告

JMeter test from Java Code - Generate Console/File Reports matching GUI Reports

我 运行 来自 Java 代码的 jmx 文件,并希望获得 console/file 报告。

public static void main(String[] args) throws Exception {

    StandardJMeterEngine jmeter = new StandardJMeterEngine();

    JMeterUtils.loadJMeterProperties("path/jmeter.properties");
    JMeterUtils.setJMeterHome("path/jmeter");
    JMeterUtils.initLocale();

    SaveService.loadProperties();

    File in = new File("test.jmx");
    HashTree testPlanTree = SaveService.loadTree(in);

    Summariser summer = null;
    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
    if (summariserName.length() > 0) {
        summer = new Summariser(summariserName);
    }
    String logFile = "result.html";
    ResultCollector logger = new ResultCollector(summer);
    logger.setFilename(logFile);
    testPlanTree.add(testPlanTree.getArray()[0], logger);

    jmeter.configure(testPlanTree);
    jmeter.run();

    ReportGenerator generator = new ReportGenerator(logFile, null);
    generator.generate();
}

运行 这段代码我生成了一个 html 文件:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1632316570010,1745,Created,500,,Requests 1-1,text,false,,417,1228,1,1,https://my.url,1740,0,1371

但是例如我需要类似 GUI 的报告 - 聚合图:

我怎样才能做到这一点?

编辑: 运行 使用此代码进入空指针异常:

public static void main(String[] args) throws Exception {

    StandardJMeterEngine jmeter = new StandardJMeterEngine();

    JMeterUtils.loadJMeterProperties("bla/jmeter.properties");
    JMeterUtils.setJMeterHome("bla/apache-jmeter-5.4.1");
    JMeterUtils.initLocale();

    File reportOutputDir = new File("report-output");
    if (reportOutputDir.exists()) {
        FileUtils.forceDelete(reportOutputDir);
    }

    File results = new File("result.html");
    if (results.exists()) {
        FileUtils.forceDelete(results);
    }

    JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.classname", "org.apache.jmeter.report.dashboard.HtmlTemplateExporter");
    JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.property.output_dir","report-output\dashboard");

    SaveService.loadProperties();

    HashTree testPlanTree = new ListedHashTree();

    HTTPSampler httpSampler = new HTTPSampler();
    httpSampler.setDomain("host");
    httpSampler.setPort(443);
    httpSampler.setPath("/api/v1/stock-count/created");
    httpSampler.setMethod("POST");

    LoopController loopController = new LoopController();
    loopController.setLoops(1);
    loopController.addTestElement(httpSampler);
    loopController.setFirst(true);
    loopController.initialize();

    ThreadGroup threadGroup = new ThreadGroup();
    threadGroup.setNumThreads(10);
    threadGroup.setRampUp(1);
    threadGroup.setSamplerController(loopController);
    threadGroup.initialize();

    TestPlan testPlan = new TestPlan();
    testPlan.addThreadGroup(threadGroup);

    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
    Summariser summer = new Summariser(summariserName);
    ResultCollector logger = new ResultCollector(summer);
    logger.setFilename("result.html");

    testPlanTree.add(testPlan, logger);

    jmeter.configure(testPlanTree);
    jmeter.run();

    ReportGenerator generator = new ReportGenerator("result.html", null);
    generator.generate();
}

15:39:26.906 [main] INFO org.apache.jmeter.report.dashboard.JsonExporter - 为总体创建统计信息 15:39:26.906 [main] DEBUG org.apache.jmeter.report.dashboard.JsonExporter - 为结果创建统计信息 data:null 线程“main”中的异常 java.lang.NullPointerException 在 org.apache.jmeter.report.dashboard.JsonExporter.createStatistic(JsonExporter.java:121) 在 org.apache.jmeter.report.dashboard.JsonExporter.export(JsonExporter.java:72) 在 org.apache.jmeter.report.dashboard.ReportGenerator.exportData(ReportGenerator.java:379) 在 org.apache.jmeter.report.dashboard.ReportGenerator.generate(ReportGenerator.java:257) 在 com.nordstrom.inventory.test.api.passport.JMeterTest.main(JMeterTest.java:87)

  1. 不是“html”,是JMeter的.jtl results file in CSV格式。

  2. 如果您想查看“聚合图”- 使用 Aggregate Graph 侦听器的“浏览”按钮打开您的 result.html 文件,它将加载它并呈现图表

  3. 您可能还想考虑使用 JMeter Plugins Command Line Tool which allows generation of various tables/charts from command line (can be also done programatically if you have the .jars in your project CLASSPATH)

  4. 您可能想要生成 JMeter 的 HTML Reporting Dashboard,您就快完成了,您只需要在测试执行之前在脚本的某处添加几行:

    JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.classname", "org.apache.jmeter.report.dashboard.HtmlTemplateExporter");
    JMeterUtils.setProperty("jmeter.reportgenerator.exporter.html.property.output_dir","report-output/dashboard");
    

    然后转到 report-output\dashboard 文件夹并使用您喜欢的浏览器打开 index.html