Apache JMeter Setup on Windows

Apache JMeter is an open-source software that is used widely for performance testing and load testing of applications. It helps in analyzing and measuring the performance of web applications, databases, and other services. Here, we will walk through the process of setting up Apache JMeter on a Windows operating system.

Before diving into the setup process, let's understand why Apache JMeter is crucial. It allows testers and developers to simulate real-world scenarios, evaluate the performance of web applications under different loads, and identify potential bottlenecks. By doing so, it guarantees that an application can maintain optimal performance under anticipated user loads without any degradation.

Installing dependencies and JMeter

To begin the installation of Apache JMeter on Windows, we need to ensure that Java is installed on our system.

  1. Go to the official Oracle JDK download download pagehttps://www.educative.io/answereditor/5491801012174848.

  2. Find the version of Java that suits your needs. Click the download link of the installer file (.exe or .msi).

  3. Locate the downloaded installer file and double-click to run it.

  4. Follow the steps in the installation wizard. You might be asked to choose a destination folder for the installation and to customize the installation options.

  5. Now, ensure that Java is installed on our system. Open a command prompt and run the following command to check if Java is installed:

java -version
Downloading Java from the official website
1 of 3
  1. Now open a web browser and navigate to the official Apache JMeter download page.

  2. Locate the Binaries section and download the latest zip archive for Windows.

  3. Extract the JMeter Files by opening a command prompt window:

    1. Press the "Windows + R" keys, type the name of the file, and press the "Enter" key. Then, navigate to the directory where we downloaded the zip file.

Apache JMeter official website to download latest version
1 of 3

Note: We can use the following steps to unzip and run JMeter if you're a non-Windows user or are using the CLI.

  1. We extract the contents of the zip file using the tar command:

tar -xf apache-jmeter-5.6.2.zip # Replace with the actual file name
  1. While not strictly necessary, we may choose to add the bin directory of the JMeter installation to our system's PATH variable. This allows us to run JMeter from any command prompt without navigating to its installation directory each time. Then, we should be able to run JMeter from the command line or use the JMeter GUI by navigating to the bin directory in the unzipped JMeter folder and running:

jmeter.bat
jmeter.bat in bin folder
1 of 2
  1. We have created a demo test.jmx file as follows:

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.7" jmeter="2.12 r1636949">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${__P(host,flooded.io)}</stringProp>
<stringProp name="HTTPSampler.port">${__P(port,443)}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">${__P(protocol,https)}</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">${__P(path,/)}</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<boolProp name="HTTPSampler.image_parser">true</boolProp>
<stringProp name="HTTPSampler.concurrentPool">4</stringProp>
</ConfigTestElement>
<hashTree/>
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
<collectionProp name="CookieManager.cookies"/>
<boolProp name="CookieManager.clearEachIteration">true</boolProp>
<stringProp name="CookieManager.policy">default</stringProp>
<stringProp name="CookieManager.implementation">org.apache.jmeter.protocol.http.control.HC4CookieHandler</stringProp>
</CookieManager>
<hashTree/>
<CacheManager guiclass="CacheManagerGui" testclass="CacheManager" testname="HTTP Cache Manager" enabled="true">
<boolProp name="clearEachIteration">true</boolProp>
<boolProp name="useExpires">true</boolProp>
</CacheManager>
<hashTree/>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<intProp name="LoopController.loops">-1</intProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">${__P(threads,50)}</stringProp>
<stringProp name="ThreadGroup.ramp_time">${__P(rampup,30)}</stringProp>
<longProp name="ThreadGroup.start_time">1345498621000</longProp>
<longProp name="ThreadGroup.end_time">1345498621000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.duration">${__P(duration,30)}</stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="home_page" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.image_parser">true</boolProp>
<boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="think_time" enabled="true">
<stringProp name="ConstantTimer.delay">1000</stringProp>
<stringProp name="RandomTimer.range">5000</stringProp>
</GaussianRandomTimer>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>

Here is the slideshow of the JMeter in GUI mode.

Adding our test.jmx file to our application
1 of 3

  1. To launch JMeter in non-GUI mode (for running tests from the command line):

jmeter -n -t /path/to/your/test_plan.jmx -l result.csv
  • jmeter: The command to execute JMeter.

  • -n: Runs JMeter in non-GUI mode.

  • -t /path/to/your/test_plan.jmx: Specifies the path to our JMeter test plan file (replace /path/to/your/test_plan.jmx with the actual path to our test plan file).

  • -l result.csv: Specifies the path to the file where the test results will be saved in CSV format (replace result.csv with the desired file name and path).

This JMeter test, represented by the provided test.jmx file, simulates a performance test scenario. It includes configurations for making an HTTP GET request to a specified host, port, and path, orchestrated by a thread group of 50 users with a ramp-up time of 30 seconds, running indefinitely. Additionally, it introduces random think times between requests using a Gaussian Random Timer.

Let's try it

We have followed all the steps above. The resultant test execution is as follows:

Terminal 1
Terminal
Loading...

Conclusion

To conclude, setting up Apache JMeter on Windows involves installing Java, downloading JMeter, and configuring environment variables. Once installed, we can run tests for automated testing. This process empowers effective performance testing and analysis on Windows systems.

Unlock your potential: Apache series, all in one place!

To continue your exploration of Apache, check out our series of Answers below:

  • What is Apache Flink?
    Learn how Apache Flink enables high-throughput, low-latency stream processing for real-time analytics, event-driven applications, and machine learning.

  • What is Apache Camel?
    Learn how Apache Camel facilitates system integration using enterprise integration patterns to streamline and automate processes.

  • How to set up Apache JMeter on macOS
    Learn how to install Apache JMeter on macOS using Homebrew or downloaded files, verify Java, and run JMeter in GUI or CLI mode.

  • What is Apache NiFi?
    Learn how Apache NiFi enables real-time data integration with features like visual flow design, data provenance, flexible flow control, and robust security.

  • Apache Storm vs. Apache Kafka Stream
    Learn how Storm enables real-time, fault-tolerant processing without data storage, while Kafka Streams integrates Kafka's messaging with durability and security.

  • Apache JMeter Setup on Windows
    Learn how to install Apache JMeter on Windows using Homebrew or downloaded files, verify Java, and run JMeter in GUI or CLI mode.

Free Resources

Copyright ©2025 Educative, Inc. All rights reserved