Search code examples
apijmeter

How to generate and save to file SummaryReport or any other JMeter Report


I have created simple JMeter Test and i don't know how to generate and save some kind of JMeter report(Summary Report, View results in Table e.t.c) to some file.

My code looks like this:

public class JMeterTest extends BaseScenario{ 

   
    protected void scenario() throws Exception { 
        // Engine 
        StandardJMeterEngine jm = new StandardJMeterEngine(); 
        // jmeter.properties 
        JMeterUtils.loadJMeterProperties("D:/Java Tools/JMeter/apache-jmeter-2.11/apache-jmeter-2.11/bin/jmeter.properties"); 

        HashTree hashTree = new HashTree(); 

        // HTTP Sampler 
        HTTPSampler httpSampler = new HTTPSampler(); 
        httpSampler.setDomain("192.168.67.98"); 
        httpSampler.setPort(8080); 
        httpSampler.setPath("/gks-server"); 
        httpSampler.setMethod("GET"); 

        // Loop Controller 
        TestElement loopCtrl = new LoopController(); 
        ((LoopController)loopCtrl).setLoops(1); 
        ((LoopController)loopCtrl).addTestElement(httpSampler); 
        ((LoopController)loopCtrl).setFirst(true); 

        // Thread Group 
        SetupThreadGroup threadGroup = new SetupThreadGroup(); 
        threadGroup.setNumThreads(1); 
        threadGroup.setRampUp(1); 
        threadGroup.setSamplerController((LoopController)loopCtrl); 

        TestPlan testPlan = new TestPlan("MY TEST PLAN"); 
        testPlan.setTestPlanClasspath("D:/JMeterTestPlan/test.jmx"); 

        hashTree.add("testPlan", testPlan); 
        hashTree.add("loopCtrl", loopCtrl); 
        hashTree.add("threadGroup", threadGroup); 
        hashTree.add("httpSampler", httpSampler); 

        jm.configure(hashTree); 

        //Run TEST 
        jm.run(); 
    } 
} 

Solution

  • Add the following few lines before your jm.run() statement:

    Summariser summer = null;
    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");//$NON-NLS-1$
    if (summariserName.length() > 0) {
        summer = new Summariser(summariserName);
    }
    
    String logFile = "/path/to/output/file.jtl";
    ResultCollector logger = new ResultCollector(summer);
    logger.setFilename(logFile);
    hashTree.add(hashTree.getArray()[0], logger);
    

    All the output will go to /path/to/output/file.jtl in CSV format. You can look into jmeter.properties file in /bin folder of your JMeter installation to identify which "interesting" values are required and override them appropriately.

    Available options are:

    jmeter.save.saveservice.output_format=csv
    jmeter.save.saveservice.assertion_results_failure_message=false
    jmeter.save.saveservice.assertion_results=none
    jmeter.save.saveservice.data_type=true
    jmeter.save.saveservice.label=true
    jmeter.save.saveservice.response_code=true
    jmeter.save.saveservice.response_data=false
    jmeter.save.saveservice.response_data.on_error=false
    jmeter.save.saveservice.response_message=true
    jmeter.save.saveservice.successful=true
    jmeter.save.saveservice.thread_name=true
    jmeter.save.saveservice.time=true
    jmeter.save.saveservice.subresults=true
    jmeter.save.saveservice.assertions=true
    jmeter.save.saveservice.latency=true
    jmeter.save.saveservice.samplerData=false
    jmeter.save.saveservice.responseHeaders=false
    jmeter.save.saveservice.requestHeaders=false
    jmeter.save.saveservice.encoding=false
    jmeter.save.saveservice.bytes=true
    jmeter.save.saveservice.url=false
    jmeter.save.saveservice.filename=false
    jmeter.save.saveservice.hostname=false
    jmeter.save.saveservice.thread_counts=false
    jmeter.save.saveservice.sample_count=false
    jmeter.save.saveservice.idle_time=false
    jmeter.save.saveservice.timestamp_format=ms
    jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
    jmeter.save.saveservice.default_delimiter=,
    jmeter.save.saveservice.default_delimiter=\t
    jmeter.save.saveservice.print_field_names=false
    jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report_21.xsl"?>
    jmeter.save.saveservice.base_prefix=~/
    jmeter.save.saveservice.autoflush=false
    

    See 5 Ways To Launch a JMeter Test without Using the JMeter GUI guide for details on how to run JMeter tests from Java code and more.