<!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;
            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>
