<!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="http://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="http://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="http://jmeter.apache.org/"><img class="logo" src="./images/logo.svg" alt="Apache JMeter"></a></div><div class="banner"><iframe src="http://www.apache.org/ads/bannerbar.html" style="border-width:0;" frameborder="0" scrolling="no"></iframe><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="http://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="./changes_history.html">Change History</a></li><li><a href="./api/index.html">Javadocs</a></li><li><a href="./building.html">Building JMeter and Add-Ons</a></li><li><a href="http://wiki.apache.org/jmeter">JMeter Wiki</a></li><li><a href="http://wiki.apache.org/jmeter/JMeterFAQ">FAQ (Wiki)</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Tutorials (PDF format)</div><ul><li><a href="./usermanual/jmeter_distributed_testing_step_by_step.pdf">Distributed Testing</a></li><li><a href="./usermanual/jmeter_proxy_step_by_step.pdf">Recording Tests</a></li><li><a href="./usermanual/junitsampler_tutorial.pdf">JUnit Sampler</a></li><li><a href="./usermanual/jmeter_accesslog_sampler_step_by_step.pdf">Access Log Sampler</a></li><li><a href="./extending/jmeter_tutorial.pdf">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="./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="http://wiki.apache.org/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="http://www.apache.org/">ASF</a></li><li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a></li><li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a href="http://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><li class="gplus"><a data-social-url="https://plus.google.com/share?url=" title="Share on Google+"><i class="fa fa-google-plus" aria-hidden="true"></i>share</a></li></ul></div></div><div class="footer"><div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2016
            , 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(){
            // fill in the current location into social links on this page.
            "use strict";
            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>