0
0
Testing Fundamentalstesting~15 mins

Performance test planning in Testing Fundamentals - Build an Automation Script

Choose your learning style9 modes available
Plan a performance test for a web application login feature
Preconditions (3)
Step 1: Identify key performance goals: response time under 2 seconds, support 1000 concurrent users
Step 2: Define test scenarios: multiple users logging in simultaneously
Step 3: Set up test data: valid user credentials for 1000 users
Step 4: Configure the performance testing tool with the login URL and test data
Step 5: Run a load test with increasing number of users from 100 to 1000
Step 6: Monitor response times, error rates, and server resource usage during the test
✅ Expected Result: The login feature should respond within 2 seconds for 1000 concurrent users with no errors and acceptable server resource usage
Automation Requirements - JMeter
Assertions Needed:
Response time is less than 2000 milliseconds
No HTTP error codes returned
Throughput meets expected user load
Best Practices:
Use parameterization for user credentials
Add assertions to validate response correctness
Use timers to simulate real user think time
Monitor server metrics during test execution
Automated Solution
Testing Fundamentals
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.

Common Mistakes - 3 Pitfalls
Hardcoding user credentials directly in the test script
Not adding assertions to check response correctness
Using zero ramp-up time for all users
Bonus Challenge

Now add data-driven testing with 3 different sets of user credentials to simulate multiple users logging in.

Show Hint