Arijit
Arijit

Reputation: 83

How to generate Jmeter dashboard report through java coding. ( not windows or shell command)

I have to generate Jmeter dashboard report through java coding. Below java code, I had used to generate a normal jmeter report. I have to generate a dashboard report through java.

  public class JMeterFromExistingJMX {

    public static void main(String[] argv) throws Exception {
        // JMeter Engine
        StandardJMeterEngine jmeter = new StandardJMeterEngine();
        // Initialize Properties, logging, locale, etc.
        // JMeterUtils.loadJMeterProperties
        ("/path/to/your/jmeter/bin/jmeter.properties");
        JMeterUtils.setJMeterHome("/path/to/your/jmeter");
        JMeterUtils.initLogging();// log
        JMeterUtils.initLocale();
        // Initialize JMeter SaveService
        SaveService.loadProperties();
        // Load existing .jmx Test Plan
        FileInputStream in = new 
         FileInputStream
       ("/path/to/your/jmeter/extras/Test.jmx");
        HashTree testPlanTree = SaveService.loadTree(in);
        in.close();

        // Run JMeter Test
        jmeter.configure(testPlanTree);
        jmeter.run();
    }
    }

    }

Upvotes: 3

Views: 1813

Answers (1)

Dmitri T
Dmitri T

Reputation: 168002

  1. First of all you need to produce a .jtl results file prior to generating reporting dashboard so make sure to add the following code block to your function:

    Summariser summer = null;
    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
    if (summariserName.length() > 0) {
        summer = new Summariser(summariserName);
    }
    String logFile = "/path/to/result.jtl";
    ResultCollector logger = new ResultCollector(summer);
    logger.setFilename(logFile);
    
    testPlanTree.add(testPlanTree.getArray()[0], logger);
    
  2. Then you need to set HTML Reporting Dashboard destination:

    JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, "/where/you/want/the/dashboard/to/be/generated");
    
  3. And finally you can call ReportGenerator class like:

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

Full code just in case:

import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.report.dashboard.ReportGenerator;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;

import java.io.File;

import static org.apache.jmeter.JMeter.JMETER_REPORT_OUTPUT_DIR_PROPERTY;

public class RunJMeterTest {

    public static void main(String[] args) throws Exception {
        StandardJMeterEngine jmeter = new StandardJMeterEngine();
        JMeterUtils.loadJMeterProperties("/path/to/your/jmeter/bin/jmeter.properties");
        JMeterUtils.setJMeterHome("/path/to/your/jmeter");
        JMeterUtils.initLocale();
        SaveService.loadProperties();
        HashTree testPlanTree = SaveService.loadTree(new File("/path/to/your/jmeter/bin/test.jmx"));
        Summariser summer = null;
        String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
        if (summariserName.length() > 0) {
            summer = new Summariser(summariserName);
        }
        String logFile = "/path/to/your/jmeter/bin/result.jtl";
        ResultCollector logger = new ResultCollector(summer);
        logger.setFilename(logFile);
        testPlanTree.add(testPlanTree.getArray()[0], logger);
        jmeter.configure(testPlanTree);
        jmeter.run();
        JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, "/path/to/dashboard");
        ReportGenerator generator = new ReportGenerator(logFile, null);
        generator.generate();
    }
}

References:

Upvotes: 3

Related Questions