<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title>Apache JMeter
          -
          Apache JMeter&trade;</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./css/new-style.css">
<link rel="apple-touch-icon-precomposed" href="./images/apple-touch-icon.png">
<link rel="icon" href="./images/favicon.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="./images/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body role="document">
<a href="#content" class="hidden">Main content</a>
<div class="header">
<!--
            APACHE LOGO
          -->
<div>
<a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="./images/asf-logo.svg" alt="Logo ASF"></a>
</div>
<!--
              PROJECT LOGO
            -->
<div>
<a href="https://jmeter.apache.org/"><img class="logo" src="./images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
<div class="clear"></div>
</div>
</div>
<div class="nav">
<ul class="menu">
<li onClick="return true">
<div class="menu-title">About</div>
<ul>
<li>
<a href="./index.html">Overview</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Download</div>
<ul>
<li>
<a href="./download_jmeter.cgi">Download Releases</a>
</li>
<li>
<a href="./changes.html">Release Notes</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Documentation</div>
<ul>
<li>
<a href="./usermanual/get-started.html">Get Started</a>
</li>
<li>
<a href="./usermanual/index.html">User Manual</a>
</li>
<li>
<a href="./usermanual/best-practices.html">Best Practices</a>
</li>
<li>
<a href="./usermanual/component_reference.html">Component Reference</a>
</li>
<li>
<a href="./usermanual/functions.html">Functions Reference</a>
</li>
<li>
<a href="./usermanual/properties_reference.html">Properties Reference</a>
</li>
<li>
<a href="./changes_history.html">Change History</a>
</li>
<li>
<a href="./api/index.html">Javadocs</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Tutorials</div>
<ul>
<li>
<a href="./usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>
<li>
<a href="./usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>
<li>
<a href="./usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>
<li>
<a href="./usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>
<li>
<a href="./usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Community</div>
<ul>
<li>
<a href="./issues.html">Issue Tracking</a>
</li>
<li>
<a href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a href="./mail.html">Mailing Lists</a>
</li>
<li>
<a href="./svnindex.html">Source Repositories</a>
</li>
<li>
<a href="./building.html">Building and Contributing</a>
</li>
<li>
<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Foundation</div>
<ul>
<li>
<a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="main" id="content">
<div class="social-media">
<ul class="social-media-links">
<li class="twitter">
<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
</li>
<li class="github">
<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
</li>
</ul>
</div>
<div class="section">
<h1>Apache JMeter&trade;</h1>
    
<p>
      The <b>Apache JMeter&trade;</b> application is open source software,
      a 100% pure Java application designed
      to load test functional behavior and measure performance.  It was
      originally designed for testing Web Applications but has
      since expanded to other test functions.
    </p>
    
<h2>What can I do with it?</h2>
    
<p>
      Apache JMeter may be used to test performance both on static and dynamic
      resources, Web dynamic applications. <br> 
      It can be used to simulate a heavy load on a server, group of servers, 
      network or object to test its strength or to analyze overall performance 
      under different load types.<br> 
    
</p>

<p>Apache JMeter features include:</p>

<ul>
    
<li>Ability to load and performance test many different applications/server/protocol types:
        <ul>
        
<li>Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, &hellip;)</li>
        
<li>SOAP / REST Webservices</li>
        
<li>FTP</li>
        
<li>Database via JDBC</li>
        
<li>LDAP</li>
        
<li>Message-oriented middleware (MOM) via JMS</li>
        
<li>Mail - SMTP(S), POP3(S) and IMAP(S)</li>
        
<li>Native commands or shell scripts</li>
        
<li>TCP</li>
        
<li>Java Objects</li>
        
</ul>
    
</li>
    
<li>Full featured Test IDE that allows fast Test Plan <b>recording (from Browsers or native applications), building and debugging</b>.</li>
    
<li>
<b><a href="usermanual/get-started.html#non_gui">CLI mode (Command-line mode (previously called Non GUI) / headless mode)</a></b> to load test from any Java compatible OS (Linux, Windows, Mac OSX, &hellip;)</li>
    
<li>A complete and <b><a href="usermanual/generating-dashboard.html">ready to present dynamic HTML report</a></b>
</li>
    
<li>Easy correlation through ability to extract data from most popular response formats, <b><a href="usermanual/component_reference.html#CSS/JQuery_Extractor">HTML</a>, <a href="usermanual/component_reference.html#JSON_Extractor">JSON </a>, 
        <a href="usermanual/component_reference.html#XPath_Extractor">XML</a> or <a href="usermanual/component_reference.html#Regular_Expression_Extractor">any textual format</a></b>
</li>
    
<li>Complete portability and <b>100% Java purity</b>.</li>
    
<li>Full <b>multi-threading</b> framework allows concurrent sampling by many threads and
        simultaneous sampling of different functions by separate thread groups.</li>
    
<li>Caching and offline analysis/replaying of test results.</li>
    
<li>
<b>Highly Extensible core:</b>
      
<ul>
        
<li>Pluggable Samplers allow unlimited testing capabilities.</li>
        
<li>
<b>Scriptable Samplers</b> (JSR223-compatible languages like <a href="http://groovy-lang.org">Groovy</a> and BeanShell)</li>
        
<li>Several load statistics may be chosen with <b>pluggable timers</b>.</li>
        
<li>Data analysis and <b>visualization plugins</b> allow great extensibility
        as well as personalization.</li>
        
<li>Functions can be used to provide dynamic input to a test or provide data manipulation.</li>
        
<li>Easy Continuous Integration through 3<sup>rd</sup> party Open Source libraries for Maven, Gradle and Jenkins.</li>
      
</ul>
    
</li>

</ul>

<h2>How do I do it?</h2>

<ul>

<li>
<a href="usermanual/index.html">Using JMeter</a> to understand how to use it</li>

<li>
<a href="usermanual/component_reference.html">Component reference</a> to have detailed information for every Test element</li>

<li>
<a href="usermanual/functions.html">Functions reference</a> to have detailed information and examples for every function</li>

<li>
<a href="usermanual/properties_reference.html">Properties reference</a> for all properties that allow you to customize JMeter</li>

<li>
<a href="api/index.html">Javadoc API documentation</a>
</li>

<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">JMeter FAQ (Wiki)</a>
</li>

<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>

<li>
<a href="building.html">Building JMeter and Add-Ons</a> for advanced usage</li>

</ul>


<h2>JMeter is not a browser</h2>

<p>
JMeter is not a browser, it works at protocol level.
As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers);
however JMeter does not perform all the actions supported by browsers.
In particular, JMeter does not execute the Javascript found in HTML pages.
Nor does it render the HTML pages as a browser does 
(it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).
</p>


<h2>Tutorials</h2>

<ul>

<li>
<a href="usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>

<li>
<a href="usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>

<li>
<a href="usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>

<li>
<a href="usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>

<li>
<a href="usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>

</ul>

<h2>Further Information About JMeter</h2>

<ul>

<li>
<a href="changes.html">Changes List</a>
</li>

<li>
<a href="issues.html">Read about existing Issues (Bugs or Enhancements) or reporting new ones (please do it !)</a>
</li>

<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>

<li>
<a href="mail.html">Mailing Lists</a>
</li>

<li>
<a href="svnindex.html">Source Repositories</a>
</li>

<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>

</ul>

</div>
<div class="share-links">
      Share this page:
      <ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2019
            , Apache Software Foundation
          </div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
</div>
<script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
</body>
</html>
