<!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
          -
          Issues</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>Issue tracker</h1>

<p>
JMeter uses Bugzilla for issue tracking, i.e. for reporting bugs and requesting enhancements.
</p>

<p>
Before creating a new issue, please check whether the issue has already been reported by searching Bugzilla.
It's also worth checking first on the JMeter user mailing list; others may already have a solution.
</p>

</div>
<div class="section">
<h1>Support Questions</h1>

<p>
Please do not use Bugzilla for asking questions. It is not a support forum.
Instead, please <a href="mail2.html">subscribe</a> to the JMeter user mailing list and ask there.
The user mailing list has a bigger audience and you are more likely to get an answer quickly.
</p>

</div>
<div class="section">
<h1>Known Bugs and enhancements</h1>

<ul>

<li>

<a href="http://bz.apache.org/bugzilla/buglist.cgi?query_format=specific&amp;order=relevance+desc&amp;bug_status=__open__&amp;product=JMeter&amp;content=">
Bugzilla - All open bugs and enhancements</a>

</li>

<li>

<a href="http://bz.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Regression&amp;bug_severity=Minor&amp;bug_severity=Trivial&amp;product=JMeter&amp;cmdtype=doit&amp;order=Bug+Number">
Bugzilla - Open bugs (excluding enhancements)</a>
</li>

<li>

<a href="http://bz.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;bug_severity=Enhancement&amp;product=JMeter&amp;cmdtype=doit&amp;order=Bug+Number">
Bugzilla - Enhancements only</a>

</li>

</ul>

</div>
<div class="section">
<h1>Requesting an enhancement</h1>

<p>
In most cases it is worth starting a discussion on the mailing list first.
Bugzilla is good for tracking progress and supplying patches, but is unwieldy for longer discussions.
</p>

<p>
If you have not already done so, you need to register an account first, using the "<span class="code">New Account</span>" link at the top of the
main Bugzilla page: <a href="https://bz.apache.org/bugzilla/">https://bz.apache.org/bugzilla/</a>.
</p>

<p>
Make sure you read and understand the information on the account creation page before signing up.
</p>

<p>
Once logged in, click "<span class="code">File a bug</span>" and select JMeter from the list
Please set the severity to "<span class="code">enhancement</span>".
</p>

<p>
Please make sure that you describe the enhancement in sufficient detail. If necessary provide an example use-case.
</p>

<p>
If you are providing a code patch, also provide a test case, and documentation on how to use the new feature (ideally as a documentation patch).
</p>

</div>
<div class="section">
<h1>Raising an Issue</h1>

<p>
First check that the issue has not already been reported.
If reporting a bug, are you sure it really is a bug in JMeter, not just a misunderstanding of how JMeter works?
</p>

<p>
If you have not already done so, you need to register an account first, using the "<span class="code">New Account</span>" link at the top of the
main Bugzilla page: <a href="https://bz.apache.org/bugzilla/">https://bz.apache.org/bugzilla/</a>.
</p>

<p>
Make sure you read and understand the information on the account creation page before signing up.
</p>

<p>
Once logged in you have 2 options:
<ul>
    
<li>At the bottom left of the screen click '<span class="code">File a new bug in the "JMeter" product</span>' link</li>
    
<li>At the top left of the screen, click "<span class="code">New</span>" link and select JMeter from the list.</li>

</ul>

</p>

</div>
<div class="section">
<h1>Required Information for bug reporting</h1>

<p>
Please make sure you provide sufficient information for others to be able to make use of the report effectively.
Use the checklist below to guide you.
</p>

<ul>

<li>JMeter version</li>

<li>Java version (output from <span class="code">java -version</span>)</li>

<li>OS version</li>

<li>
<span class="code">jmeter.log</span> file (unlikely to contain sensitive information, but check before uploading)</li>

<li>JMX file if relevant (redact any sensitive information first), providing a simplified Test Plan (using <a href="./usermanual/component_reference.html#Debug_Sampler">Debug Sampler</a>) will ensure BUG is fixed much more rapidly than without it</li>

<li>JTL file if relevant (may need to redact sensitive information)</li>

<li>For a suspected bug, describe what you did, what happened, and how this differs from what you expected to happen.
Does it happen every time?
</li>

<li>Add yourself in <span class="code">CC</span> List to be notified when JMeter Team requires more information (in this case bug will be marked as <span class="code">NEEDINFO</span>)</li>

<li>When a bug is market as <span class="code">NEEDINFO</span>, please provide as soon as possible the required information so that bug can be understood and fixed. Be aware that if
no information is provided after team requires more information and bug is not reproducible, then bug will be closed as <span class="code">WORKSFORME</span>. You can always reopen it later once you provide the required information.</li>

<li>Select accurately the IMPORTANCE level, <span class="code">ENHANCEMENT</span> means it's not a BUG while others mean it's a BUG</li>

<li>If you are providing a patch to fix a bug, please ensure it is in unified diff format.
If using Eclipse, please set the patch root to "<span class="code">Project</span>", not the default "<span class="code">Workspace</span>" which is harder to apply.</li>

<li>New source files can be provided as is; please ensure they have the standard Apache License header (as per other JMeter files).
Please do not use <span class="code">@author</span> tags (credit will be given in the changes file).
</li>

<li>In the case of patches for new features, please also provide documentation patches if at all possible.
Components are documented in <span class="code">xdocs/usermanual/component_reference.xml</span>.</li>

</ul>

<p>
<b>See also the following <a href="https://bz.apache.org/bugwritinghelp.html">Bug writing guidelines</a>,
also the terms and conditions noted on the <a href="https://bz.apache.org/bugzilla/createaccount.cgi">Bugzilla account creation page.</a></b>
</p>

</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;
            2020
            , 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>
