Повысьте эффективность тестирования производительности с помощью JMeter: подробное руководство

В мире разработки программного обеспечения обеспечение производительности и масштабируемости приложений имеет решающее значение. JMeter, мощный инструмент с открытым исходным кодом, приходит на помощь, предоставляя обширные возможности для тестирования производительности. В этой статье мы рассмотрим различные методы и примеры кода, чтобы использовать весь потенциал JMeter в ваших усилиях по тестированию производительности.

Метод 1: создание базового плана тестирования
Давайте начнем с простого примера создания плана тестирования в JMeter. В плане тестирования описываются шаги и конфигурации теста производительности.

import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.LoopIterationListener;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testelement.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
public class JMeterExample {
    public static void main(String[] args) {
        // Initialize JMeter engine
        JMeterUtils.loadJMeterProperties("path/to/jmeter.properties");
        JMeterUtils.initLocale();
        // Create Test Plan
        TestPlan testPlan = new TestPlan("My Test Plan");
        // Create Thread Group
        ThreadGroup threadGroup = new ThreadGroup(1, 1);
        threadGroup.setRampUp(5); // Ramp-up time in seconds
        // Create Loop Controller
        LoopController loopController = new LoopController();
        loopController.setLoops(10); // Number of iterations
        // Create HTTP Sampler
        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setDomain("example.com");
        httpSampler.setPath("/");
        httpSampler.setMethod("GET");
        // Create Result Collector
        ResultCollector resultCollector = new ResultCollector();
        resultCollector.setFilename("results.jtl");
        // Build the test plan
        testPlan.addThreadGroup(threadGroup);
        threadGroup.setSamplerController(loopController);
        loopController.addTestElement(httpSampler);
        testPlan.addTestElement(resultCollector);
        // Run the test plan
        StandardJMeterEngine jmeter = new StandardJMeterEngine();
        jmeter.configure(testPlan);
        jmeter.run();
    }
}

Метод 2: параметризация запросов
Чтобы моделировать реальные сценарии, нам часто необходимо отправлять запросы с динамическими данными. JMeter позволяет параметризовать ваши запросы с помощью переменных и файлов CSV.

import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.LoopIterationListener;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testelement.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
public class JMeterParameterizationExample {
    public static void main(String[] args) {
        // Initialize JMeter engine and set variables
        JMeterUtils.loadJMeterProperties("path/to/jmeter.properties");
        JMeterUtils.initLocale();
        JMeterUtils.getJMeterVariables().put("username", "testuser1");
        // Create Test Plan
        TestPlan testPlan = new TestPlan("My Test Plan");
        // Create Thread Group
        ThreadGroup threadGroup = new ThreadGroup(1, 1);
        // Create Loop Controller
        LoopController loopController = new LoopController();
        loopController.setLoops(1);
        // Create HTTP Sampler
        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setDomain("example.com");
        httpSampler.setPath("/");
        httpSampler.setMethod("POST");
        // Add request parameters
        HTTPArgument usernameArg = new HTTPArgument();
        usernameArg.setName("username");
        usernameArg.setValue("${username}");
        httpSampler.addArgument(usernameArg);
        // Create Result Collector
        ResultCollector resultCollector = new ResultCollector();
        resultCollector.setFilename("results.jtl");
        // Build the test plan
        testPlan.addThreadGroup(threadGroup);
        threadGroup.setSamplerController(loopController);
        loopController.addTestElement(httpSampler);
        testPlan.addTestElement(resultCollector);
        // Run the test plan
        StandardJMeterEngine jmeter = new StandardJMeterEngine();
        jmeter.configure(testPlan);
        jmeter.run();
    }
}

Метод 3: анализ показателей производительности
JMeter предоставляет встроенные прослушиватели и плагины для сбора показателей производительности во время выполнения теста. Давайте добавим прослушиватель для регистрации времени ответа и создания сводного отчета.

import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.visualizers.SummaryReport;
// ...
// Create Summary Report Listener
SummaryReport summaryReport = new SummaryReport();
summaryReport.setFilename("summary.csv");
summaryReport.setTestTitle("Performance Summary");
// Create Summariser
Summariser summariser = new Summariser("summary");
// Add the Summary Report Listener to the test plan
testPlan.addTestElement(summaryReport);
summariser.setDestination(summaryReport);
// ...
// Run the test plan
jmeter.configure(testPlan);
jmeter.run();

JMeter предлагает широкий спектр методов и функций, которые сделают ваши усилия по тестированию производительности более эффективными. От создания базового плана тестирования до расширенной параметризации и анализа показателей производительности — JMeter позволяет вам моделировать реальные сценарии и выявлять узкие места в ваших приложениях. Включив эти методы в рабочий процесс тестирования производительности, вы сможете обеспечить оптимальную производительность и масштабируемость вашего программного обеспечения.