Reputation: 313
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
Upvotes: 3
Views: 1053
Reputation: 9134
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
}
}
Upvotes: 2