2
votes

I'm running a JMeter load test from a java application with following code.

StandardJMeterEngine jmeter = new StandardJMeterEngine();

JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.loadJMeterProperties(jmeterProperties);
JMeterUtils.initLogging();
JMeterUtils.initLocale();

HTTPSampler httpSampler = new HTTPSampler();
httpSampler.setDomain(host);
httpSampler.setPort(port);
httpSampler.setPath(path);
httpSampler.setMethod("GET");
httpSampler.setName("load test");

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

ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Sample Thread Group");
threadGroup.setNumThreads(userCount);
threadGroup.setRampUp(1);
threadGroup.setSamplerController(loopController);

HashTree testPlanTree = new HashTree();
TestPlan testPlan = new TestPlan("load test");
testPlanTree.add(testPlan);
HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
threadGroupHashTree.add(httpSampler);

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

After running this script I want to get the aggregate summary values like average latency. I know the summary report can be logged in to a csv file and then I can calculate average latency by reading that file again. But I just want to know is there any way to get that aggregate values without writing and reading a csv file?

I have already referred following articles and several related questions here.

https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui http://uttesh.blogspot.com/2015/04/jmeter-load-testing-by-code-jmeter-api.html

1

1 Answers

2
votes

One approach would be creating a custome class like ResultCollector (in my case this is JmeterOutListener.java) and collect the values from there since you have the access them. You can do whatever you want in the sampleOccurred method in there.

You can decode the ResultCollector class and see it's functioanlity further.

JMeterTestFromCode.java

public class JMeterTestFromCode {

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

         String jmeterHome1 = "/rezsystem/apache-jmeter-2.11/apache-jmeter-2.11";
         File jmeterHome=new File(jmeterHome1);
         String slash = System.getProperty("file.separator");

         if (jmeterHome.exists()) {
             File jmeterProperties = new File(jmeterHome.getPath() + slash + "bin" + slash + "jmeter.properties");
             if (jmeterProperties.exists()) {
                 //JMeter Engine
                 StandardJMeterEngine jmeter = new StandardJMeterEngine();

                 //JMeter initialization (properties, log levels, locale, etc)
                 JMeterUtils.setJMeterHome(jmeterHome.getPath());
                 JMeterUtils.loadJMeterProperties(jmeterProperties.getPath());
                 JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
                 JMeterUtils.initLocale();

                 // JMeter Test Plan, basically JOrphan HashTree
                 HashTree testPlanTree = new HashTree();     

                 // HTTP Sampler
                 HTTPSampler httpSampler = new HTTPSampler();
                 httpSampler.setDomain("www.google.com");
                 httpSampler.setPort(80);
                 httpSampler.setPath("/");
                 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);

                 // Test plan
                 TestPlan testPlan = new TestPlan("MY TEST PLAN");

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

                 JmeterOutListener jmeterOutListener = new JmeterOutListener();
                 testPlanTree.add(testPlanTree.getArray()[0], jmeterOutListener);

                 // Run Test Plan
                 jmeter.configure(testPlanTree);
                 jmeter.run();

                 System.exit(0);

             }
         }

         System.err.println("jmeter.home property is not set or pointing to incorrect location");
         System.exit(1);    

    }
}

JmeterOutListener.java

public class JmeterOutListener extends AbstractListenerElement implements SampleListener,Clearable,Serializable,TestListener,Remoteable,NoThreadClone{

    public JmeterOutListener() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void testEnded() {
        // TODO Auto-generated method stub
    }

    @Override
    public void testEnded(String arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void testStarted() {
        // TODO Auto-generated method stub
    }

    @Override
    public void testStarted(String arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void testIterationStart(LoopIterationEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void clearData() {
        // TODO Auto-generated method stub
    }

    @Override
    public void sampleOccurred(SampleEvent event) {

        SampleResult sample = event.getResult();

        System.out.println("sampleOccurred().sample.getTimeStamp() : " + sample.getTimeStamp());
        System.out.println("sampleOccurred().sample.getTime() : " + sample.getTime());
        System.out.println("sampleOccurred().sample.getSampleLabel() : " + sample.getSampleLabel());
        System.out.println("sampleOccurred().sample.getResponseCode() : " + sample.getResponseCode());
        System.out.println("sampleOccurred().sample.getResponseMessage() : " + sample.getResponseMessage());
        System.out.println("sampleOccurred().sample.getThreadName() : " + sample.getThreadName());
        System.out.println("sampleOccurred().sample.isSuccessful() : " + sample.isSuccessful());

        String              message             = null;
        AssertionResult[]   results             = sample.getAssertionResults();
        if (results != null)
        {
            for (int i = 0; i < results.length; ++i) {
                message = results[i].getFailureMessage();
                System.out.println("sampleOccurred().message : " + message);
                if (message != null) {
                    break;
                }
            }
        }

        System.out.println("sampleOccurred().sample.getBytes() : " + sample.getBytes());
        System.out.println("sampleOccurred().sample.getGroupThreads() : " + sample.getGroupThreads());
        System.out.println("sampleOccurred().sample.getAllThreads() : " + sample.getAllThreads());
        System.out.println("sampleOccurred().sample.getURL() : " + sample.getURL());
        System.out.println("sampleOccurred().sample.getLatency() : " + sample.getLatency());
        System.out.println("sampleOccurred().sample.getDataEncodingWithDefault() : " + sample.getDataEncodingWithDefault());
        System.out.println("sampleOccurred().sample.getSampleCount() : " + sample.getSampleCount());
        System.out.println("sampleOccurred().sample.getErrorCount() : " + sample.getErrorCount());

    }

    @Override
    public void sampleStarted(SampleEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void sampleStopped(SampleEvent arg0) {
        // TODO Auto-generated method stub
    }

}