I have a Class which demonstrate a JMeter test from Java code.
The Object of the test is to set N requests per second.
I want to add a ConstantThroughputTimer to my test in order to set the max RPS(requests per second) JMeter is making.
Created one in the gui and its working well, but i want to run it from a java code.
Right now i have 2 issues :
- I don't know how to set the thread group 'loop count' forever. (see screenshot)
- I wasn't able to add the ConstantThroughputTimer to my test plan.
I've searched and i couldn't find any documentation about it , nor code example.
Any Help would be very much appreciated.
My Code:
public static void main(String[] args) {
StandardJMeterEngine jMeterEngine = new StandardJMeterEngine();
//Setting JMeter Properties
File properties = JmeterUtils.getPropertiesFile();
File home = JmeterUtils.getHomePath();
JMeterUtils.setJMeterHome(home.getPath());
JMeterUtils.loadJMeterProperties(properties.getPath());
JMeterUtils.initLocale();
//Creating HashTreeTestPlan
HashTree testPlanTree = new HashTree();
//Creating HttpSampler
HTTPSamplerProxy sampler = new HTTPSamplerProxy();
sampler.setMethod("GET");
sampler.setDomain("example.com");
sampler.setUseKeepAlive(true);
sampler.setFollowRedirects(true);
sampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
sampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());
sampler.setEnabled(true);
//Creating LoopController
LoopController loopController = new LoopController();
loopController.setContinueForever(true);
loopController.setLoops(10000);
loopController.setFirst(true);
loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName());
loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName());
loopController.initialize();
loopController.setEnabled(true);
//Creating the number of Threads (clients)
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("threadGroup");
threadGroup.setNumThreads(10);
threadGroup.setScheduler(true);
threadGroup.setRampUp(0);
threadGroup.setDuration(60);
threadGroup.setSamplerController(loopController);
threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName());
threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName());
threadGroup.setEnabled(true);
//Adding Constant Throughput Timer - This is what i want to add
ConstantThroughputTimer timer = new ConstantThroughputTimer();
timer.setProperty(TestElement.TEST_CLASS, ConstantThroughputTimer.class.getName());
timer.setName("constantTimer");
double rpsCalc = 10 * 60;
timer.setThroughput(rpsCalc);
timer.setEnabled(true);
timer.setCalcMode(2);
//NOT WORKING//
//NOT WORKING//
threadGroup.addTestElement(timer);
//Test Plan
TestPlan testPlan = new TestPlan("Test Plan");
testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());
testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel().createTestElement());
// Construct Test Plan from previously initialized elements
testPlanTree.add(testPlan);
jMeterEngine.configure(testPlanTree);
try {
jMeterEngine.runTest();
} catch (JMeterEngineException e) {
e.printStackTrace();
}
}