Performance test planning in Testing Fundamentals - Build an Automation Script
import org.apache.jmeter.config.Arguments; import org.apache.jmeter.engine.StandardJMeterEngine; import org.apache.jmeter.protocol.http.control.HeaderManager; import org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui; import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy; import org.apache.jmeter.reporters.ResultCollector; import org.apache.jmeter.samplers.SampleSaveConfiguration; import org.apache.jmeter.testelement.TestPlan; import org.apache.jmeter.threads.ThreadGroup; import org.apache.jmeter.threads.gui.ThreadGroupGui; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.collections.HashTree; public class PerformanceTestPlan { public static void main(String[] args) throws Exception { // Initialize JMeter engine StandardJMeterEngine jmeter = new StandardJMeterEngine(); // JMeter initialization (properties, log levels, locale, etc) JMeterUtils.loadJMeterProperties("/path/to/jmeter.properties"); JMeterUtils.setJMeterHome("/path/to/jmeter/home"); JMeterUtils.initLocale(); // Test Plan TestPlan testPlan = new TestPlan("Login Performance Test Plan"); // HTTP Sampler - Login request HTTPSamplerProxy loginSampler = new HTTPSamplerProxy(); loginSampler.setDomain("example.com"); loginSampler.setPort(80); loginSampler.setPath("/login"); loginSampler.setMethod("POST"); loginSampler.addArgument("username", "user1"); loginSampler.addArgument("password", "pass123"); loginSampler.setName("Login Request"); loginSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName()); loginSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName()); // Thread Group ThreadGroup threadGroup = new ThreadGroup(); threadGroup.setName("Login Users"); threadGroup.setNumThreads(1000); // 1000 users threadGroup.setRampUp(60); // ramp up in 60 seconds threadGroup.setSamplerController(new LoopController()); threadGroup.getSamplerController().setLoops(1); threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName()); threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName()); // Test Plan Tree HashTree testPlanTree = new HashTree(); HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup); threadGroupHashTree.add(loginSampler); // Result Collector ResultCollector logger = new ResultCollector(); SampleSaveConfiguration saveConfig = new SampleSaveConfiguration(); saveConfig.setTime(true); saveConfig.setLatency(true); saveConfig.setSuccess(true); saveConfig.setResponseCode(true); saveConfig.setResponseMessage(true); saveConfig.setThreadName(true); saveConfig.setDataType(true); saveConfig.setEncoding(true); saveConfig.setAssertions(true); saveConfig.setSubresults(true); saveConfig.setResponseData(false); saveConfig.setSamplerData(false); saveConfig.setRequestHeaders(false); saveConfig.setResponseHeaders(false); saveConfig.setAssertionResultsFailureMessage(true); saveConfig.setBytes(true); saveConfig.setSentBytes(true); saveConfig.setUrl(true); saveConfig.setFileName(false); saveConfig.setHostname(true); saveConfig.setThreadCounts(true); saveConfig.setSampleCount(true); saveConfig.setIdleTime(true); saveConfig.setConnectTime(true); logger.setSaveConfig(saveConfig); testPlanTree.add(testPlanTree.getArray()[0], logger); // Run Test Plan jmeter.configure(testPlanTree); jmeter.run(); } }
This code sets up a JMeter test plan programmatically to test the login feature's performance.
First, it initializes JMeter engine and loads properties.
Then, it creates a Test Plan named "Login Performance Test Plan".
An HTTP Sampler is configured to send a POST request to the login URL with username and password parameters.
A Thread Group simulates 1000 users ramping up over 60 seconds, each sending one login request.
The test plan tree organizes these elements.
A Result Collector is added to capture test results with detailed metrics.
Finally, the test plan is executed by the JMeter engine.
This setup follows best practices: parameterization can be added for credentials, assertions can be included in the sampler, and ramp-up simulates real user load.
Now add data-driven testing with 3 different sets of user credentials to simulate multiple users logging in.