mstover1    02/02/19 18:51:42

  Modified:    docs     bugs.html changes.html contributing.html
                        running.html todo.html
               docs/extending index.html
               docs/user_manual ftp_test.html interleave.html
                        jdbc_test.html loop_controller.html
                        modification_manager.html once_only.html
                        proxy_server.html web_test.html
               docs/usermanual get-started.html index.html intro.html
  Log:
  updating documentation
  
  Revision  Changes    Path
  1.15      +2 -0      jakarta-jmeter/docs/bugs.html
  
  Index: bugs.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/bugs.html,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- bugs.html 24 Sep 2001 13:16:59 -0000      1.14
  +++ bugs.html 20 Feb 2002 02:51:42 -0000      1.15
  @@ -104,7 +104,9 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   JMeter 1.6Alpha is just out.  There are no known bugs currently (but plenty of 
things
  +
   to do still)</p>
                               </blockquote>
           </p>
  
  
  
  1.33      +145 -0    jakarta-jmeter/docs/changes.html
  
  Index: changes.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/changes.html,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- changes.html      24 Sep 2001 13:35:33 -0000      1.32
  +++ changes.html      20 Feb 2002 02:51:42 -0000      1.33
  @@ -104,167 +104,312 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   <b>Changes are chronologically ordered from top (most recent) to bottom
  +
   (least recent)</b> 
  +
   </p>
                                                   <b>Changes:</b>
                                                   <h3>Version 1.7Beta</h3>
                                                   <ul>
  +
   <li>Better XML support for special characters (Tushar Bhatia) </li>
  +
   <li>Non-GUI functioning  &amp; Non-GUI test plan execution  (Tushar Bhatia)</li>
  +
   <li>Removing Swing dependence from base JMeter classes</li>
  +
   <li>Internationalization (Takashi Okamoto)</li>
  +
   <li>AllTests bug fix ([EMAIL PROTECTED])</li>
  +
   <li>ClassFinder bug fix ([EMAIL PROTECTED])</li>
  +
   <li>New Loop Controller</li>
  +
   <li>Proxy Server records HTTP samples from browser (and documented in the user 
manual)</li>
  +
   <li>Multipart Form support</li>
  +
   <li>HTTP Header class for Header customization</li>
  +
   <li>Extracting HTTP Header information from responses (Jamie Davidson)</li>
  +
   <li>Mailer Visualizer re-added to JMeter</li>
  +
   <li>JMeter now url encodes parameter names and values</li>
  +
   <li>listeners no longer give exceptions if their gui's haven't been initialized</li>
  +
   <li>HTTPS and Authorization working together</li>
  +
   <li>New Http sampling that automatically parses HTML response for images to 
download, and includes the downloading of
  +
   these images in total time for request (Neth [EMAIL PROTECTED]) </li>
  +
   <li>HTTP responses from server can be parsed for links and forms, and dynamic data 
can be extracted and added to test
  +
   samples at run-time (documented)</li> 
  +
   <li>New Ramp-up feature (Jonathan O'Keefe)</li>
  +
   <li>New visualizers (Neth)</li>
  +
   <li>New Assertions for functional testing</li>
  +
   </ul>
                                                   <h3>Version 1.6.1</h3>
                                                   <ul>
  +
   <li>Fixed saving and loading of test scripts (no more extra lines)</li>
  +
   <li>Can save and load special characters (such as "&amp;" and "&lt;").</li>
  +
   <li>Can save and load timers and listeners.</li>
  +
   <li>Minor bug fix for cookies (if you cookie value contained an "=", then it 
broke).</li>
  +
   <li>URL's can sample ports other than 80, and can test HTTPS, provided you have the 
necessary jars (JSSE)</li>
  +
   </ul>
                                                   <h3>Version 1.6 Alpha</h3>
                                                   <ul>
  +
   <li>New UI</li>
  +
   <li>Separation of GUI and Logic code</li>
  +
   <li>New Plug-in framework for new modules</li>
  +
   <li>Enhanced performance</li>
  +
   <li>Layering of test logic for greater flexibility</li>
  +
   <li>Added support for saving of test elements</li>
  +
   <li>Added support for distributed testing using a single client</li>
  +
   </ul>
                                                   <h3>Version 1.5.1</h3>
                                                   <ul>
  +
   <li>Fixed bug that caused cookies not to be read if header name case not as 
expected.</li>
  +
   <li>Clone entries before sending to sampler - prevents relocations from messing up 
information across threads</li>
  +
   <li>Minor bug fix to convenience dialog for adding paramters to test sample.  Bug 
prevented entries in dialog from appearing in test sample.</li>
  +
   <li>Added xerces.jar to distribution</li>
  +
   <li>Added junit.jar to distribution and created a few tests.</li>
  +
   <li>Started work on new framework.  New files in cvs, but do not effect program 
yet.</li>
  +
   <li>Fixed bug that prevent HTTPJMeterThread from delaying according to chosen 
timer.</li>
  +
   </ul>
                                                   <p>
  +
   <h3>Version 1.5</h3>
  +
   <ul>
  +
     <li>Abstracted out the concept of the Sampler, SamplerController, and TestSample.
  +
     A Sampler represents code that understands a protocol (such as HTTP, or FTP, RMI,
  +
     SMTP, etc..).  It is the code that actually makes the connection to whatever is
  +
     being tested.
  +
     A SamplerController represents code that understands how to organize and run a 
group
  +
     of test samples.  It is what binds together a Sampler and it's test samples and 
runs them.
  +
     A TestSample represents code that understands how to gather information from the
  +
     user about a particular test.  For a website, it would represent a URL and any
  +
     information to be sent with the URL.</li>
  +
     <li>The UI has been updated to make entering test samples more convenient.</li>
  +
     <li>Thread groups have been added, allowing a user to setup multiple test to run
  +
     concurrently, and to allow sharing of test samples between those tests.</li>
  +
     <li>It is now possible to save and load test samples.</li>
  +
     <li>....and many more minor changes/improvements...</li>
  +
   </ul>
  +
   </p>
                                                   <p>
  +
   <b>Apache JMeter 1.4.1-dev</b>
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>)
   
  +
  +
   <ul>
  +
     <li>Cleaned up URLSampler code after tons of patches for better readability. 
(SM)</li>
  +
     <li>Made JMeter send a special "user-agent" identifier. (SM)</li>
  +
     <li>Fixed problems with redirection not sending cookies and authentication info 
and removed
  +
       a warning with jikes compilation. Thanks to <a 
href="mailto:[EMAIL PROTECTED]";>Wesley
  +
       Tanaka</a> for the patches (SM)</li>
  +
     <li>Fixed a bug in the URLSampler that caused to skip one URL when testing lists 
of URLs and
  +
       a problem with Cookie handling. Thanks to <a 
href="mailto:[EMAIL PROTECTED]";>Graham Johnson</a> for the patches (SM)</li>
  +
     <li>Fixed a problem with POST actions. Thanks to <a 
href="mailto:[EMAIL PROTECTED]";>Stephen
  +
       Schaub</a> for the patch (SM)</li>
  +
   </ul>
  +
   </p>
                                                   <p>
  +
   <b>Apache JMeter 1.4</b> - Jul 11 1999
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Jean-Pierre Norguet</a>, <a 
href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>)
   
  +
  +
   <ul>
  +
     <li>Fixed a problem with POST actions. Thanks to <a 
href="mailto:[EMAIL PROTECTED]";>Brendan
  +
       Burns</a> for the patch (SM)</li>
  +
     <li>Added close button to the About box for those window managers who don't 
provide it.
  +
       Thanks to Jan-Henrik Haukeland for pointing it out. (SM)</li>
  +
     <li>Added the simple Spline sample visualizer (JPN)</li>
  +
   </ul>
  +
   </p>
                                                   <p><b>Apache JMeter 1.3</b> - Apr 
16 1999 
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>, <a 
href="mailto:[EMAIL PROTECTED]";>Rapha?Luta</a>)
   
  +
  +
   <ul>
  +
     <li>Run the Garbage Collector and run finalization before starting to sampling to 
ensure
  +
       same state every time (SM)</li>
  +
     <li>Fixed some NullPointerExceptions here and there (SM)</li>
  +
     <li>Added HTTP authentication capabilities (RL)</li>
  +
     <li>Added windowed sample visualizer (SM)</li>
  +
     <li>Fixed stupid bug for command line arguments. Thanks to <a 
href="mailto:[EMAIL PROTECTED]";>Jorge Bracer</a> for pointing this out (SM)</li>
  +
   </ul>
  +
   </p>
                                                   <p><b>Apache JMeter 1.2</b> - Mar 
17 1999
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Sean Dowd</a>, <a 
href="mailto:[EMAIL PROTECTED]";>Stefano
  +
   Mazzocchi</a>)
   
  +
  +
   <ul>
  +
     <li>Integrated cookie capabilities with JMeter (SM)</li>
  +
     <li>Added the Cookie manager and Netscape file parser (SD)</li>
  +
     <li>Fixed compilation error for JDK 1.1 (SD)</li>
  +
   </ul>
  +
   </p>
                                                   <p>
  +
   <b>Apache JMeter 1.1</b> - Feb 24 1999
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Sean Dowd</a>, <a 
href="mailto:[EMAIL PROTECTED]";>Stefano
  +
   Mazzocchi</a>)
   
  +
  +
   <ul>
  +
     <li>Created the opportunity to create URL aliasing from the properties file as 
well as the
  +
       ability to associate aliases to URL sequences instead of single URLs (SM) 
Thanks to <a href="mailto:[EMAIL PROTECTED]";>Simon Chatfield</a> for the very 
nice suggestions
  +
       and code examples.</li>
  +
     <li>Removed the TextVisualizer and replaced it with the much more useful 
FileVisualizer (SM)</li>
  +
     <li>Added the known bug list (SM)</li>
  +
     <li>Removed the Java Apache logo (SM)</li>
  +
     <li>Fixed a couple of typos (SM)</li>
  +
     <li>Added UNIX makefile (SD)</li>
  +
   </ul>
  +
   </p>
                                                   <p>
  +
   <b>Apache JMeter 1.0.1</b> - Jan 25 1999
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>)
   
  +
  +
   <ul>
  +
     <li>Removed pending issues doc issues (SM)</li>
  +
     <li>Fixed the unix script (SM)</li>
  +
     <li>Added the possibility of running the JAR directly using "java -jar
  +
       ApacheJMeter.jar" with Java 2 (SM)</li>
  +
     <li>Some small updates: fixed Swing location after Java 2(tm) release, license 
update and
  +
       small cleanups (SM)</li>
  +
   </ul>
  +
   </p>
                                                   <p>
  +
   <b>Apache JMeter 1.0</b> - Dec 15 1998
  +
   (<a href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>)
  +
   <ul>
  +
     <li>Initial version. (SM)</li>
  +
   </ul>
  +
   </p>
                               </blockquote>
           </p>
  
  
  
  1.16      +9 -0      jakarta-jmeter/docs/contributing.html
  
  Index: contributing.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/contributing.html,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- contributing.html 24 Sep 2001 13:17:00 -0000      1.15
  +++ contributing.html 20 Feb 2002 02:51:42 -0000      1.16
  @@ -104,16 +104,25 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Jakarta Project is an open volunteer project. This means that anyone may
  +
   partecipate to the development process even actively (writing, discussing, 
proposing code)
  +
   or passively (listening and learning). You are more than welcome to join our group 
of
  +
   developers if you feel you are ready for it and wish to give a hand. 
  +
   </p>
                                                   <p>
  +
   If you want more info about Jakarta development (mailing list, CVS info, code
  +
   style, subprojects, people to ask) check out our web site:
  +
   </p>
                                                   <a HREF="http://jakarta.apache.org";>
  +
   <p>http://jakarta.apache.org</p></a>
                               </blockquote>
           </p>
  
  
  
  1.25      +0 -0      jakarta-jmeter/docs/running.html
  
  Index: running.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/running.html,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- running.html      24 Sep 2001 13:35:33 -0000      1.24
  +++ running.html      20 Feb 2002 02:51:42 -0000      1.25
  @@ -149,7 +149,7 @@
     </ul>
                                                   <p align="center"><font 
size="-1">Copyright (c) 1998-99 <a href="http://java.apache.org";>The Java Apache
   Project</a>.<br />
  -$Id: running.html,v 1.24 2001/09/24 13:35:33 mstover1 Exp $</font> <br />
  +$Id: running.html,v 1.25 2002/02/20 02:51:42 mstover1 Exp $</font> <br />
   <font size="-1">All rights reserved.</font></p>
                               </blockquote>
           </p>
  
  
  
  1.17      +29 -0     jakarta-jmeter/docs/todo.html
  
  Index: todo.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/todo.html,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- todo.html 24 Sep 2001 13:17:00 -0000      1.16
  +++ todo.html 20 Feb 2002 02:51:42 -0000      1.17
  @@ -104,35 +104,64 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   List of those things yet to do, wishes, dreams, etc.. (in no particular
  +
   order)
  +
   </p>
                                                   <ul>
  +
     <li><STRONG>New modules:</STRONG></li>
  +
     <ul>
  +
        <li>RMI</li>
  +
        <li>SMTP</li>
  +
        <li>JINI</li>
  +
        <li>Corba</li>
  +
        <li>HTTP-multiPart</li>
  +
        <li>Local Java Object</li>
  +
     </ul>
  +
     <li><strong>Adding reporters:</strong> Reporters would offer report generation 
based
  +
                  on data collected by JMeter.  For those looking for more information 
than
  +
                  simply time per sample and average time, a reporter should be 
available.
  +
                  Examples could include statistical reports, accuracy reports (eg 
what exactly
  +
                  did the web page return - this could be used for QA testing).</li>
   
  +
  +
     <li><strong>Dynamic control while JMeter runs</strong> Enable users to change
  +
     options while JMeter runs - ie change number of threads running, start and stop
  +
     thread groups individually, add test samples on the fly, etc.</li>
  +
     <li><strong>Drag n Drop</strong> allow users to move test elements around the tree
  +
     easily</li>
  +
     <li><b>OffLine reporting</b> - Enable the various visualizers to display test 
results
  +
     only after the run is finished.  This would facilitate heavier loads since 
constantly
  +
     updating the GUI takes up so much processing</li>
  +
     <li><b>Running indicator</b> - JMeter needs to do something lightweight, yet 
effective,
  +
     to indicate to the user when it is running a test</li>
  +
   </ul>
                               </blockquote>
           </p>
  
  
  
  1.9       +330 -0    jakarta-jmeter/docs/extending/index.html
  
  Index: index.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/extending/index.html,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- index.html        24 Sep 2001 13:17:00 -0000      1.8
  +++ index.html        20 Feb 2002 02:51:42 -0000      1.9
  @@ -105,414 +105,744 @@
           <blockquote>
                                       <h2>Extending JMeter</h2>
                                                   <p>There are several ways to extend 
JMeter and add functionality.  JMeter is designed
  +
   to make this task easier.
  +
   </p>
                                                   <ul>
  +
        <li><a href="#timer">Creating your own Timer</a></li>
  +
        <li><a href="#listener">Creating your own SampleListener (such as a 
visualizer, or reporter)</a></li>
  +
        <li><a href="#config">Creating your own Config Element</a></li>
  +
        <li><a href="#logical">Creating your own logic SamplerController</a></li>
  +
        <li><a href="#testsample">Creating your own test sample 
SamplerController</a></li>
  +
        <li><a href="#sampler">Creating your own Sampler</a></li>
  +
        <li><a href="#uicomponent">Making your custom elements play nice as a JMeter 
UI component</a></li>
  +
        <li><a href="#saveable">Making your custom elements saveable and loadable from 
within JMeter</a></li>
  +
   </ul>
                                                   <hr />
                                                   <a name="timer" />
                                                   <h3>Creating your own Timer</h3>
                                                   <p>The timer interface:</p>
                                                   <pre>
  +
          public long delay();
  +
   </pre>
                                                   <p>Not too complicated.  Your delay 
method must, each time it is called, return a
  +
   long representing the number of milliseconds to delay.  The constant timer returns 
the
  +
   same number every time it's called.  A random timer returns a different number each 
time.
  +
   </p>
                                                   <hr />
                                                   <a name="listener" />
                                                   <h3>Creating your own 
SampleListener</h3>
                                                   <p>The SampleListener interface:</p>
                                                   <pre>
  +
          public void sampleOccurred(SampleEvent e);
  +
          public void sampleStarted(SampleEvent e);
  +
          public void sampleStopped(SampleEvent e);
  +
   </pre>
                                                   <p>sampleOccurred is the method 
called when a sample is completed, and the data has been
  +
   collected.  The SampleEvent object should contain all the information gathered
  +
   from the sample.  If your sample listener is primarily concerned with collecting the
  +
   data from a test run, you can implement this method - the other two are for other 
purposes and
  +
   can be ignored (though the methods have to be there for your class to compile).
  +
   </p>
                                                   <p>sampleStarted and sampleStopped 
are used to indicate the state of the sampling thread.
  +
   This is useful for visualizers that show the user the state of all running threads
  +
   (ie, they are running and waiting for response, or they're stopped and waiting
  +
   to begin again).
  +
   </p>
                                                   <hr />
                                                   <a name="config" />
                                                   <h3>Creating your own Config 
Element</h3>
                                                   <p>The ConfigElement interface:</p>
                                                   <pre>
  +
          public void addConfigElement(ConfigElement config);
  +
          public boolean expectsModification();
  +
          public Object clone();
  +
   </pre>
                                                   <p>The ConfigElement interface is 
sparse.  All ConfigElements are expected to implement
  +
   a public <b>clone()</b> method.  The reason for this is that config elements will 
be cloned
  +
   for each different sampling thread, and most will be cloned for each sample.  </p>
                                                   <p>If your config element expects 
to be modified in the process of a test run,
  +
   and you want those modifications to carry over from sample to sample (as in
  +
   a cookie manager - you want to save all cookies that gets set throughout
  +
   the test), then return true for the <b>expectsModification()</b> method. Your 
config element will not be
  +
   cloned for each sample. If your config elements are more static in nature,
  +
   return false. If in doubt, return false.</p>
                                                   <p><b>addConfigElement()</b> is 
required so that config elements can be layered.  For
  +
   instance, let's say a user creates a URL entry that contains default values -
  +
   they might use this to specify a server.  Then, all their test samples configure
  +
   individual test cases, but leave out the server field.  This information is combined
  +
   via the <b>addConfigElement()</b> method.  Your custom config elements should do 
the right
  +
   thing when this method is called.  Normally, this involves ignoring such calls 
unless
  +
   the passed in ConfigElement is of the same type as yours, and then only merging in
  +
   values that are not already set in the object receiving the call (ie you probably
  +
   don't want to overwrite any values).
  +
   </p>
                                                   <p>You may have noticed there's no 
specification on how to get the config information
  +
   <b>out</b> of a ConfigElement.  This raises the question, who is going to use it?
  +
   At the end of the line, there will be a Sampler that will need the information held
  +
   in your config element.  The sampler that uses your config element needs to know 
more
  +
   about the class than the rest of JMeter - that information is not part of this 
interface.
  +
   </p>
                                                   <p>If at all possible, extend 
<b>AbstractConfigElement</b> when creating your own.  By doing so,
  +
   and by following some simple rules, you will get cloning and saving to XML of your
  +
   config element for free (as in, you don't have to do anything!).  
<b>AbstractConfigElement</b>
  +
   stores all it's values in a Map, and provides getProperty and putProperty methods.  
Your
  +
   config element can provide <b>getXXX()</b> and <b>setXXX()</b> methods, but these 
should delegate
  +
   to <b>getProperty()</b> and <b>setProperty()</b>, probably using static Strings as 
keys in the Map.
  +
   <br />You can store any type of object, provided the objects are clonable and 
Saveable
  +
   (Strings, Integer, Long, Double, Float are all good in this regard).
  +
   </p>
                                                   <p>One caveat - if your config 
element has been restored from file, all the values
  +
   held in the Map will be String objects (except for elements that implement Saveable
  +
   on their own), and you may have to do casting and parsing.  Example: an Integer will
  +
   have to be converted from a String to an int, so your getXXX() method should check
  +
   for this possibility to avoid exceptions.
  +
   </p>
                                                   <hr />
                                                   <a name="logical" />
                                                   <h3>Creating your own logic 
SamplerController</h3>
                                                   <p>The SamplerController interface 
looks as follows:</p>
                                                   <pre>
  +
          Entry nextEntry();
  +
          Collection getListeners();
  +
          void addSamplerController(SamplerController controller);
  +
          void addConfigElement(ConfigElement config);
  +
          Object clone();
  +
   </pre>
                                                   <p>Again, <b>clone()</b> is a 
method that must be implemented to all SamplerControllers to avoid
  +
   contamination between sampling threads.</p>
                                                   <p>The <b>nextEntry()</b> method is 
the essential job of a SamplerController - to deliver
  +
   Entry objects to be sampled.  An Entry object encapsulates all the information 
needed
  +
   by a Sampler to do its job.  The <b>nextEntry()</b> method should work like an 
iterator and
  +
   continuously return new Entry objects.
  +
   </p>
                                                   <p>There are two boundary 
conditions that need to be handled.  If the Controller has no
  +
   more Entries to give, for the rest of the test, it should return <b>null</b>.  
Therefore,
  +
   if your Controller has sub-controllers it is receiving Entries from, it should 
remove
  +
   them from its list of controllers to get Entries from.  The other condition is when
  +
   your controller reaches the end of its list of Entries, and it needs to start over
  +
   from the beginning.  The parent Controller needs to know this so that it can move
  +
   on to its next controller in its list.  Therefore, at the end of each iteration,
  +
   your SamplerController needs to return a CycleEntry object instead of a normal 
Entry.
  +
   Conversely, this means that if your Controller receives a CycleEntry object, it 
should
  +
   move on to the next Controller in its list.</p>
                                                   <p>A logic controller does not 
generate Entries on its own, but simply regulates
  +
   the flow of Entries from its sub-controllers.  A logic controller might provide
  +
   looping logic, or it might modify the Entries that pass through it, or whatever.
  +
   GenericController provides an implementation that does absolutely nothing but
  +
   pass Entries on from its sub-controllers.  This class is useful both for reference
  +
   purposes and to extend, since it provides a lot of methods you're likely to find
  +
   useful
  +
   </p>
                                                   <p><b>getListeners()</b> is an odd 
member of this Class.  It's there to serve those who
  +
   want their controller to receive sample data.  This would be useful for a controller
  +
   that modified Entry objects based on previous sample results (like an HTML spider
  +
   that dynamically reacted to previously sampled webpages for links and forms).  The
  +
   responsibility of the controller implementer is to collect all potential listeners
  +
   from the sub-controller list, and add themselves if desired.  Most 
SamplerControllers
  +
   that extend GenericController don't have to do anything.</p>
                                                   
<p><b>addSamplerController(SamplerController controller)</b> is the method used to
  +
   add sub controllers to your SamplerController. </p>
                                                   
<p><b>addConfigElement(ConfigElement config)</b> Your SamplerController should also
  +
   be capable of holding configuration elements and adding them to Entries as they
  +
   pass through your controller.  Again, see GenericController for reference.  
Essentially,
  +
   all Entry objects that get returned by <b>nextEntry()</b> are handed all the 
ConfigElements
  +
   of the controller.
  +
   </p>
                                                   <hr />
                                                   <a name="testsample" />
                                                   <h3>Creating your own test sample 
SamplerController</h3>
                                                   <p>A SamplerController that 
generates Entry objects is just like a logic controller
  +
   except that it creates its own Entry objects instead of gathering them from
  +
   sub-controllers (although, to be fully correct, your test sample SamplerController
  +
   should handle both possibilities).  Your test sample SamplerController can also
  +
   benefit from extending GenericController.  By doing so, most of your cloning and
  +
   saving needs are handled (but probably not entirely).  See HttpTestSample as
  +
   reference.</p>
                                                   <hr />
                                                   <a name="sampler" />
                                                   <h3>Creating your own Sampler</h3>
                                                   <p>The Sampler interface:</p>
                                                   <pre>
  +
          public SampleResult sample(Entry e)
  +
   </pre>
                                                   <p>Your Sampler has two 
responsibilities.  Of lesser importance, it should do whatever
  +
   it is you want to do, given an Entry object that hopefully contains information
  +
   about what is to be sampled.  Of greater importance, your sampler should return
  +
   a <b>SampleResult</b> object that holds information about the sampling.  
Information such
  +
   as how long the sample took, the text response from the sample (if appropriate), and
  +
   a string that describes the location of what was sampled.  The SampleResult 
interface
  +
   is essentially a Map with public static Strings as keys. </p>
                                                   <hr />
                                                   <a name="uicomponent" />
                                                   <h3>Making your custom elements 
play nice as a JMeter UI component</h3>
                                                   <p>In order to take part in the 
JMeter UI, your component needs to implement the
  +
   JMeterComponentModel interface:</p>
                                                   <pre>
  +
          Class getGuiClass();
  +
          public String getName();
  +
          public void setName(String name);
  +
          public Collection getAddList();
  +
          public String getClassLabel();
  +
          public void uncompile();
  +
   </pre>
                                                   <p>Most of this stuff is easy, 
boring, and tedious.  <b>getName()</b>, <b>setName()</b> is a simple
  +
   String property that is the name of the object.  <b>getClassLabel()</b> should 
return
  +
   a String that describes the class.  This string will be displayed to the user and
  +
   so should be short but meaningful.  <b>getGuiClass()</b> should return a Class 
object for
  +
   the class that will be used as a GUI component.  This class should be a subclass
  +
   of java.awt.Container, and preferably a subclass of 
<b>javax.swing.JComponent</b>.</p>
                                                   <p><b>getAddList()</b> should 
return a list of either Strings or JMenus.  These Strings
  +
   represent the Classes that can be added to your SamplerController.  Each String
  +
   should correspond to the target class's <b>getClassLabel()</b> String.  
<b>MenuFactory</b> is
  +
   a class that will return some preset menu lists (such as all available 
SamplerControllers,
  +
   all available ConfigElements, etc).</p>
                                                   <p><b>uncompile()</b> is a cleanup 
method used between sampling runs.  When the user
  +
   hits "Start", JMeter "compiles" the objects in the tree.  Child nodes are added
  +
   to their parent objects recursively until there is one TestPlan object, which is
  +
   then submitted for testing.  Afterward, these elements have to un-added from their
  +
   parent objects, or uncompiled.  To uncompile your class, simply clear all your
  +
   data structures that are holding sub-elements.  For your SamplerController, this
  +
   will be the list of sub-controllers and the list of ConfigElements.</p>
                                                   <p>That's it, except for your GUI 
class.  If your SamplerController has no
  +
   configuration needs, just return org.apache.jmeter.gui.NamePanel, and the user will
  +
   at least be able to change the name of your component.  Otherwise, create a gui 
class
  +
   that implements the <b>ModelSupported</b> interface:</p>
                                                   <pre>
  +
          void setModel(Object model);
  +
          public void updateGui();
  +
   </pre>
                                                   <p><b>setModel()</b> is used to 
hand your JMeterModelComponent class to the GUI class when
  +
   it is instantiated.  It is your responsibility for providing the means by which
  +
   the Gui class updates the values in the model class.  For updating in the other
  +
   direction, there is <b>updateGui()</b>, which the model class can call if necessary.
  +
   Note, normally, this call is made for you automatically whenever the Gui is brought
  +
   to the screen.  If you are creating a Visualizer, then you may need to use 
<b>updateGui()</b>.
  +
   For reference, refer to UrlConfigGui (in 
org.apache.jmeter.protocol.http.config.gui).</p>
                                                   <p>If you have done all this 
correctly, there's just one more step.  If you compile
  +
   your classes into the ApacheJMeter.jar file, then you're done.  Your classes will
  +
   be automatically found and used.  Otherwise, you will need to modify 
jmeter.properties.
  +
   The <i>search_paths</i> property should be modified to include the path where your
  +
   classes are.  This does not obviate the need for your classes to be in the JVM's
  +
   CLASSPATH - it is an additional requirement.  Otherwise, your classes will not be
  +
   detected, and the Gui will not make them available to the user.</p>
                                                   <hr />
                                                   <a name="saveable" />
                                                   <h3>Making your custom elements 
saveable and loadable from within JMeter</h3>
                                                   <p>The Saveable interface has just 
one method:</p>
                                                   <pre>
  +
          public Class getTagHandlerClass()
  +
   </pre>
                                                   <p>This method simply returns the 
Class object that represents the Class that handles
  +
   the saving and loading of your component.</p>
                                                   <p>To write this SaveHandler, make 
a class that extends <b>TagHandler</b>
  +
   (from org.apache.jmeter.save.xml).  Note, if your component extends 
AbstractConfigElement,
  +
   it is already fully Saveable - provided you only have information stored in
  +
   the Map from AbstractConfigElement.</p>
                                                   <p>To write your own TagHandler, 
you will have to implement the following methods:</p>
                                                   <pre>
  +
          public abstract void setAtts(Attributes atts) throws Exception
  +
          public String getPrimaryTagName()
  +
          public void save(Saveable objectToSave,Writer out) throws IOException
  +
   </pre>
                                                   <p><b>getPrimaryTagName()</b> 
should return the String that is the XML tagname that your
  +
   class handles.  When you save your object, it should all be contained within an
  +
   XML tag of the same name.  This will ensure that when JMeter's parser hits that tag,
  +
   your class will be called upon to handle the data.</p>
                                                   <p><b>setAtts(Attributes atts)</b> 
is called when the parser first hits your tag.
  +
   If this primary tag has any attributes, this method represents your chance to save
  +
   the information.</p>
                                                   <p><b>save(Saveable 
objectToSave,Writer out)</b> - when the user selects "Save",
  +
   JMeter will call this method and hand the Saveable object to be saved (it will be
  +
   the object that specified your TagHandler as the class responsible for it's saving).
  +
   This method should use the given Writer object to print all the XML necessary to
  +
   save the current state of the objectToSave.</p>
                                                   <p>There's more you have to do to 
handle creating a new Object when JMeter parses
  +
   an XML file.  However, there's no standard interface you need to implement, but 
rather,
  +
   JMeter uses reflection to generate method calls into your class.  When JMeter hits
  +
   a tag that corresponds to your PrimaryTagName, an instance of your TagHandler will
  +
   be created, and it's <b>setAtts()</b> method will get called.  Thereafter, methods 
are called
  +
   depending on subsequent tags and character data.  For every tag, JMeter calls
  +
   <b>&lt;tag-name&gt;TagStart(Attributes atts)</b>, and for every end tag, JMeter 
calls
  +
   <b>&lt;tag-name&gt;TagEnd()</b>.</p>
                                                   <p>Additionally, JMeter will call a 
method that corresponds to all tags that are
  +
   current.  So, for instance, if JMeter runs into a tag name "foo", then
  +
   <b>foo(Attributes atts)</b> will be called.  If JMeter then parses character data,
  +
   then <b>foo(String data)</b> will be called.  If JMeter parses a tag within foo, 
called
  +
   "nestedFoo", then JMeter will call <b>foo_nestedFoo(Attributes atts)</b> and
  +
   <b>foo_nestedFoo(String data)</b>.  And so on.
  +
   </p>
                                                   <p>An annotated example:</p>
                                                   <pre>
  +
   public class AbstractConfigElementHandler extends TagHandler
  +
   {
  +
        private AbstractConfigElement config;
  +
        private String currentProperty;
   
  +
  +
        public AbstractConfigElementHandler()
  +
        {
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * Returns the AbstractConfigElement object parsed from the XML.  This method
  +
         * is required to fulfill the SaveHandler interface.  It is used by the XML
  +
         * routines to gather all the saved objects.
  +
         */</font>
  +
        public Object getModel()
  +
        {
  +
                return config;
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * This is called when a tag is first encountered for this handler class to 
handle.
  +
         * The attributes of the tag are passed, and the SaveHandler object is expected
  +
         * to instantiate a new object.
  +
         */</font>
  +
        public void setAtts(Attributes atts) throws Exception
  +
        {
  +
                String className = atts.getValue("type");
  +
                config = (AbstractConfigElement)Class.forName(className).newInstance();
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * Called by reflection when a &lt;property&gt; tag is encountered.  Again, the
  +
         * attributes are passed.
  +
         */</font>
  +
        public void property(Attributes atts)
  +
        {
  +
                currentProperty = atts.getValue("name");
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * Called by reflection when text between the begin and end &lt;property&gt;
  +
         * tag is encountered.
  +
         */</font>
  +
        public void property(String data)
  +
        {
   
  +
  +
                if(data != null &amp;&amp; data.trim().length() &gt; 0)
  +
                {
  +
                        config.putProperty(currentProperty,data);
  +
                        currentProperty = null;
  +
                }
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * Called by reflection when the &lt;property&gt; tag is ended.
  +
         */</font>
  +
        public void propertyTagEnd()
  +
        {
  +
                <font color="blue">// Here's a tricky bit.  See below for 
explanation.</font>
  +
                List children = xmlParent.takeChildObjects(this);
  +
                if(children.size() == 1)
  +
                {
  +
                        
config.putProperty(currentProperty,((TagHandler)children.get(0)).getModel());
  +
                }
  +
        }
   
   
  +
  +
  +
          <font color="blue">/**
  +
        * Gets the tag name that will trigger the use of this object's TagHandler.
  +
        */</font>
  +
        public String getPrimaryTagName()
  +
        {
  +
                return "ConfigElement";
  +
        }
   
  +
  +
     <font color="blue">/**
  +
        * Tells the object to save itself to the given output stream.
  +
        */</font>
  +
        public void save(Saveable obj,Writer out) throws IOException
  +
        {
  +
                AbstractConfigElement saved = (AbstractConfigElement)obj;
  +
                out.write("&lt;ConfigElement type=\"");
  +
                out.write(saved.getClass().getName());
  +
                out.write("\"&gt;\n");
  +
                Iterator iter = saved.getPropertyNames().iterator();
  +
                while (iter.hasNext())
  +
                {
  +
                        String key = (String)iter.next();
  +
                        Object value = saved.getProperty(key);
  +
                        writeProperty(out,key,value);
  +
                }
  +
                out.write(&lt;/ConfigElement&gt;");
  +
        }
   
  +
  +
        <font color="blue">/**
  +
         * Routine to write each property to xml.
  +
         */</font>
  +
        private void writeProperty(Writer out,String key,Object value) throws 
IOException
  +
        {
  +
                out.write("&lt;property name=\"");
  +
                out.write(key);
  +
                out.write("\"&gt;\n");
  +
                JMeterHandler.writeObject(value,out);
  +
                out.write("\n&lt;/property&gt;\n");
  +
        }
  +
   </pre>
                                                   <p>
  +
   In the <b>propertyTagEnd()</b> method, <b>takeChildObjects()</b> is called on the 
xmlParent
  +
   instance variable.  xmlParent is inherited from TagHandler - the DocumentHandler
  +
   object that is running the show.  xmlParent takes an XML file that represents a 
portion of
  +
   the test configuration tree, and recreates a tree-like data structure.  When it is
  +
   done, it will convert its tree-like data structure into the test configuration tree
  +
   structure.
  +
   </p>
                                                   <p>However, sometimes, a tree 
element has sub objects that you do not want represented
  +
   in the tree - rather, they are part of your object.  But, they may
  +
   be complicated enough to warrant their own SaveHandler class, and thus, the 
xmlParent
  +
   picks them up as part of its tree.  When the tag is done, and you know that there 
are
  +
   child objects you want to grab, you can call the <b>takeChildObjects()</b> method 
and get a
  +
   List object containing them all.  This will remove them from the tree, and you can 
add
  +
   them to your object that you're creating.
  +
   </p>
                                                   <p>
  +
   UrlConfig is good example.  It extends AbstractConfigElement, so it uses exactly the
  +
   code above to save and reload itself from XML.  However, one of the pieces of data
  +
   that UrlConfig stores is an Arguments object.  Arguments is too complicated to save
  +
   to file as a simple string, so it has its own Handler object (ArgumentsHandler).  In
  +
   the above code, when the call to <b>JMeterHandler.writeObject(value,out)</b> is 
made, the
  +
   writeObject method detects whether the object implements Saveable, and if so, calls
  +
   the object's SaveHandler class to deal with it.  This means, however, that when
  +
   reading that XML file, the Argument object will show up as a separate entity in
  +
   the data tree, whereas it originally was just part of the data of the UrlConfig
  +
   object.  In order to preserve that relationship, it's necessary for the
  +
   AbstractConfigElementHandler to check after each property tag is done for child
  +
   objects in the tree, and take them for its own use.
  +
   </p>
                                                   <p>
  +
   Study the other SaveHandler objects and the TagHandler class to learn more
  +
   about how saving is accomplished.  Once you understand the design, writing your
  +
   own SaveHandler is very easy.
  +
   </p>
                               </blockquote>
           </p>
  
  
  
  1.4       +7 -0      jakarta-jmeter/docs/user_manual/ftp_test.html
  
  Index: ftp_test.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/ftp_test.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ftp_test.html     24 Sep 2001 13:17:00 -0000      1.3
  +++ ftp_test.html     20 Feb 2002 02:51:42 -0000      1.4
  @@ -104,13 +104,20 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The FTP Test controller is a generative controller whose function is to create a 
single test case for FTP applications.
  +
   The FTP Test allows you to configure an FTP sample:</p>
                                                   <ul>
  +
   <li><b>Server</b>: Host name of the server being tested.</li>
  +
   <li><b>Filename</b>: File to be downloaded via FTP</li>
  +
   <li><b>Username</b>: Username to use to connect to server</li>
  +
   <li><b>Password</b>: Password to user to connect to server</li>
  +
   </ul>
                               </blockquote>
           </p>
  
  
  
  1.6       +12 -0     jakarta-jmeter/docs/user_manual/interleave.html
  
  Index: interleave.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/interleave.html,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- interleave.html   24 Sep 2001 13:17:00 -0000      1.5
  +++ interleave.html   20 Feb 2002 02:51:42 -0000      1.6
  @@ -104,18 +104,30 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Interleave Controller filters test samples through one at a time for each 
iteration through the test.  This means
  +
   that if the Interleave Controller has a Web Test sub-controller within it, which in 
turn holds three URL's to be tested,
  +
   rather than serve up all three URL's during each run through the test, the 
Interleave Controller will instead serve up
  +
   the first URL during the first iteration through the test, the second URL during 
the second iteration, and the third one
  +
   during the third iteration.  On the fourth iteration, the first URL will again be 
served, and so on.
  +
   </p>
                                                   <p>An example of the usefulness of 
interleaving might be helpful.  Let's say you have a search engine test that involves 
3 steps.  Step
  +
   one is always the same.  Step two involves a URL request that follows a simple 
format, but the data can vary (think of a
  +
   search function - the request is always the same, except the actual search string 
can be different).  Step three is also
  +
   always the same.  If you wanted to test the search engine with, say, 10 different 
search strings, you could setup these
  +
   three steps and then repeat all three 10 times, modifying the second step in each 
to have a different search string.  Or,
  +
   you could place the second step under an Interleave Controller, and put all 10 
alternatives there.  This would achieve the
  +
   same effect.</p>
                               </blockquote>
           </p>
  
  
  
  1.4       +11 -0     jakarta-jmeter/docs/user_manual/jdbc_test.html
  
  Index: jdbc_test.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/jdbc_test.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- jdbc_test.html    24 Sep 2001 13:17:00 -0000      1.3
  +++ jdbc_test.html    20 Feb 2002 02:51:42 -0000      1.4
  @@ -104,17 +104,28 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The JDBC  Test controller is a generative controller whose function is to create a 
single test case for FTP applications.
  +
   The JDBC  Test allows you to configure an FTP sample:</p>
                                                   <ul>
  +
   <li><b>Username</b>: Username to use to connect to server</li>
  +
   <li><b>Password</b>: Password to user to connect to server</li>
  +
   <li><b>Database URL</b>: This includes the host name plus database name.  It should 
be in the correct format for the database being tested (usually hostname/database 
name)</li>
  +
   <li><b>Sub Protocol</b>: The sub-protocol to use with your specific database (ie 
"mysql" for MySQL)</li>
  +
   <li><b>Driver Class</b>: The full class name of your driver (ie 
org.gjt.mm.mysql.Driver)</li>
  +
   <li><b>Number of Connections in Pool</b>: JMeter will use a pool of connections 
that you can configure.  Set here how many connections you would like the pool to 
maintain</li>
  +
   <li><b>Max usage for each connection</b>: JMeter will automatically re-initialize 
SQL connections that have been used a certain number of times.  You can change the max 
usage for each connection here.</li>
  +
   <li><b>SQL Query String</b>: Finally, the actual SQL query you want to test.</li>
  +
   </ul>
                                                   <p><b>Note:</b> If you were going 
to test multiple SQL queries, you would probably want to add a "Database Login" config 
element to the top of your test tree, and configure the username, password, database 
URL, sub-protocol, and Driver class in just the one place.  You can similarly add a 
"Database Connection Pool" config element.</p>
                               </blockquote>
  
  
  
  1.6       +5 -0      jakarta-jmeter/docs/user_manual/loop_controller.html
  
  Index: loop_controller.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/loop_controller.html,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- loop_controller.html      24 Sep 2001 13:17:00 -0000      1.5
  +++ loop_controller.html      20 Feb 2002 02:51:42 -0000      1.6
  @@ -104,10 +104,15 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Loop Controller forces the test to iterate through certain
  +
   sub elements multiple times before going on to other test elements.  All sub 
elements are
  +
   iterated through the specified number of times each time through the test cycle.
  +
   Users can configure the Loop Controller via its edit screen in the main panel.
  +
   </p>
                               </blockquote>
           </p>
  
  
  
  1.6       +44 -0     jakarta-jmeter/docs/user_manual/modification_manager.html
  
  Index: modification_manager.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/modification_manager.html,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- modification_manager.html 24 Sep 2001 13:17:00 -0000      1.5
  +++ modification_manager.html 20 Feb 2002 02:51:42 -0000      1.6
  @@ -104,13 +104,20 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Modification Manager can be used to introduce dynamic data into a test script.  
As test samples pass through the
  +
   Modification Manager, it has the opportunity to modify them.  The Modification 
Manager holds Modifier elements which it
  +
    uses to control how it modifies test samples.  If no Modifier elements are added, 
the Modification Manager has no effect.
  +
   </p>
                                                   <p>
  +
   There are two types of Modifiers.  Regular Modifiers (currently there aren't any 
implemented Modifiers), and response
  +
   based Modifiers (there is one HTML response based Modifier).
  +
   </p>
                               </blockquote>
           </p>
  @@ -126,45 +133,82 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   This modifier parses HTML response from the server and extracts
  +
   links and forms.  A URL test sample that passes through this modifier will be 
examined to
  +
   see if it "matches" any of the links or forms extracted
  +
   from the immediately previous response.  It would then replace the values in the URL
  +
   test sample with appropriate values from the matching link or form.  Perl-type 
regular
  +
   expressions are used to find matches.
  +
   </p>
                                                   <p>
  +
   Consider a simple example: let's say you wanted JMeter to "spider" through your 
site,
  +
   hitting link after link parsed from the HTML returned from your server (this is not
  +
   actually the most useful thing to do, but it serves as a good example).  You would 
create
  +
   a Modification Manager, and add the "HTML Link Parser" to it.  Then, create a
  +
   Web Test controller, and set the domain to ".*", and the path likewise. This will
  +
   cause your test sample to match with any link found on the returned pages.  If you 
wanted to
  +
   restrict the spidering to a particular domain, then change the domain value
  +
   to the one you want.  Then, only links to that domain will be followed.
  +
   </p>
                                                   <p>
  +
   A more useful example: given a web polling application, you might have a page with
  +
   several poll options as radio buttons for the user to select.  Let's say the values
  +
   of the poll options are very dynamic - maybe user generated.  If you wanted JMeter 
to
  +
   test the poll, you could either create test samples with hardcoded values chosen, 
or you
  +
   could let the HTML Link Parser parse the form, and insert a random poll option into
  +
   your URL test sample.  To do this, follow the above example, except, when 
configuring
  +
   your Web Test controller's URL options, be sure to choose "POST" as the
  +
   method.  Put in hard-coded values for the domain, path, and any additional form 
parameters.
  +
   Then, for the actual radio button parameter, put in the name (let's say it's called 
"poll_choice"),
  +
   and then ".*" for the value of that parameter.  When the modifier examines
  +
   this URL test sample, it will find that it "matches" the poll form (and
  +
   it shouldn't match any other form, given that you've specified all the other 
aspects of
  +
   the URL test sample), and it will replace your form parameters with the matching
  +
   parameters from the form.  Since the regular expression ".*" will match with
  +
   anything, the modifier will probably have a list of radio buttons to choose from.  
It
  +
   will choose at random, and replace the value in your URL test sample.  Each time 
through
  +
   the test, a new random value will be chosen.</p>
                                                   <p>
  +
   One important thing to remember is that you must create a test sample immediately
  +
   prior that will return an HTML page with the links and forms that are relevant to
  +
   your dynamic test sample.
  +
   </p>
                               </blockquote>
           </p>
  
  
  
  1.6       +8 -0      jakarta-jmeter/docs/user_manual/once_only.html
  
  Index: once_only.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/once_only.html,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- once_only.html    24 Sep 2001 13:17:00 -0000      1.5
  +++ once_only.html    20 Feb 2002 02:51:42 -0000      1.6
  @@ -104,13 +104,21 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Once Only Controller causes the controllers under it to deliver test cases only
  +
   once during a test run.  Thereafter, those test cases are dropped from the test.
  +
   In other words, those test cases will be sampled only during the first iteration.
  +
   There is no configuration required (or possible) for this controller, so it is
  +
   very simple to use.  One might find this controller useful to create a test plan
  +
   where a login page is sampled only once, and thereafter skipped - which is typical
  +
   user behavior.
  +
   </p>
                               </blockquote>
           </p>
  
  
  
  1.8       +40 -0     jakarta-jmeter/docs/user_manual/proxy_server.html
  
  Index: proxy_server.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/proxy_server.html,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- proxy_server.html 24 Sep 2001 13:17:00 -0000      1.7
  +++ proxy_server.html 20 Feb 2002 02:51:42 -0000      1.8
  @@ -104,10 +104,14 @@
         <tr><td>
           <blockquote>
                                       <p>To use the proxy server, create a 
Threadgroup in your testplan or workbench.
  +
   In the Threadgroup, <i>add</i> the Proxy Server (it will be an option under Config 
Elements).</p>
                                                   <p>
  +
   The Proxy Server allows JMeter to watch and record your actions while you browse 
your web application
  +
   with your normal browser (such as Internet Explorer).  JMeter will create test 
sample objects and store them
  +
   directly into your test plan as you go (so you can view samples interactively while 
you make them).</p>
                               </blockquote>
           </p>
  @@ -123,37 +127,63 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   There are a few simple options in the Proxy Server's configuration screen that give 
you some control over the Proxy's
  +
   behavior.  First, you can select the port that the Proxy Server listens to.  8080 
is the default, but you can change it
  +
   if that port is already in use on your machine.</p>
                                                   <p>
  +
   The Include and Exclude fields allow you to filter requests.  If, for example, you 
left both fields blank, then JMeter
  +
   would record every action of your browser.  This can often result in 20+ test 
samples being recorded for each web page
  +
   (it will record all image requests, CSS files, Javascript files, etc).  This is 
probably not desirable (there are better
  +
   ways to tell JMeter to download the images from a page).  The Include/Exclude 
fields give you some say over what gets
  +
   recorded.  </p>
                                                   <p>
  +
   If the Include field is left empty, then all requests will "pass" the include test. 
 If the Exclude field is
  +
   left empty, then all request will "pass" the exclude test.  Once the Include field 
has at least one entry,
  +
   then only those requests that match at least one entry will "pass" ("pass" means "be
  +
   recorded"). </p>
                                                   <p>
  +
   If the Exclude field is left empty, then all requests (that have passed the Include 
field check) will pass.  If there are
  +
   entries in the Exclude field, then any request that matches at least one entry will 
not be recorded.
  +
   </p>
                                                   <p>
  +
   To add an entry to the Include or Exclude field, type the entry into the text 
field, and hit "Enter" when done.
  +
   The text will be added to the List box to the right of the text field.  To clear 
the text field, hit the "clear"
  +
   button.  Currently, there is no way to individually select items and delete them.
  +
   </p>
                                                   <p>
  +
   These entries will be treated as Perl-type regular expressions.  They will be 
matched against the host name + the path of
  +
   each browser request.  Thus, if the URL you are browsing is 
http://jakarta.apache.org/jmeter/index.html?username=xxxx,
  +
   then the regular expression will be tested against the string: 
"jakarta.apache.org/jmeter/index.html".  Thus,
  +
   if you wanted to include all .html files, you're regular expression might look 
like: ".*\.html".  Using a
  +
   combination of includes and excludes, you should be able to record what you are 
interested in and skip what you are
  +
   not.</p>
                                                   <p>
  +
   When you are ready to begin, hit "start".</p>
                               </blockquote>
           </p>
  @@ -169,12 +199,19 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The samples will be recorded as Web Test controllers under any Simple Controller 
elements in your tree (note, if you have more than one
  +
   Simple Controller, they will all have duplicate Web Test controllers created for 
them).  If your Simple Controller has a
  +
   Url Sample element with domain or path settings, then your Web Test controllers 
will be created with blank domain and/or path settings (provided
  +
   they match, of course).  This allows you to simply create test plans with a single 
top level config element to control which server name is
  +
   being tested.<br />
  +
   If there are no Simple Controllers in your test plan, then no samples will be 
recorded.
  +
   </p>
                               </blockquote>
           </p>
  @@ -190,8 +227,11 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   When you are done recording your test samples, stop the proxy server (hit the 
"stop" button).  Remember to reset
  +
   your browser's proxy settings.  Now, you may want to sort and re-order the test 
script, add timers, listeners, a
  +
   cookie manager, etc.  </p>
                               </blockquote>
           </p>
  
  
  
  1.4       +14 -0     jakarta-jmeter/docs/user_manual/web_test.html
  
  Index: web_test.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/user_manual/web_test.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- web_test.html     24 Sep 2001 13:17:00 -0000      1.3
  +++ web_test.html     20 Feb 2002 02:51:42 -0000      1.4
  @@ -104,22 +104,36 @@
         <tr><td>
           <blockquote>
                                       <p>
  +
   The Web Test controller is a generative controller whose function is to create a 
single test case for HTTP applications.
  +
   The Web Test allows you to configure a URL sample:</p>
                                                   <ul>
  +
   <li><b>Protocol</b>: HTTP or HTTPS</li>
  +
   <li><b>Method</b>: GET or POST</li>
  +
   <li><b>Domain</b>: Host name of the server being tested</li>
  +
   <li><b>Port</b>: Port to connect to the server on</li>
  +
   <li><b>Path</b>: File path.  This represent the part of the URL following the 
domain name, but before any query string that may be involved</li>
  +
   <li><b>Paramter Table</b>: These are the arguments that will make up the query 
string.  This string will be appended to the URL if Method=GET, and it will be sent in 
a separate stream if Method=POST.</li>
  +
   </ul>
                                                   <p>Additionally, there are two 
check selections that allow you to control whether JMeter will also download any 
images found on
  +
   the page returned by the server, or to tell JMeter that it should upload a file 
using multipart-form format.  If you are uploading a file, JMeter requires three 
additional parameters:</p>
                                                   <ul>
  +
   <li><b>File</b>: The path to the file being uploaded</li>
  +
   <li><b>Field Name</b>: The name of the upload field (ie, if it were a web page, 
there would be an input field with a name - this is that name)</li>
  +
   <li><b>MimeType</b>: The mimetype of the document being uploaded</li>
  +
   </ul>
                               </blockquote>
           </p>
  
  
  
  1.2       +125 -11   jakarta-jmeter/docs/usermanual/get-started.html
  
  Index: get-started.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/usermanual/get-started.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- get-started.html  28 Oct 2001 13:27:37 -0000      1.1
  +++ get-started.html  20 Feb 2002 02:51:42 -0000      1.2
  @@ -127,7 +127,7 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                                    <p>JMeter runs in JDK1.2 and higher. However, 
there is a rather <a href="">nasty bug in JDK 1.3</a> that may affect your testing.</p>
  +                                    <p>JMeter runs in JDK1.2 and higher. </p>
                               </blockquote>
           </p>
         </td></tr>
  @@ -136,12 +136,14 @@
                                                   <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
         <tr><td bgcolor="#525D76">
           <font color="#ffffff" face="arial,helvetica,sanserif">
  -          <a name="2.1.5 JDBC Driver (for testing databases)"><strong>2.1.5 JDBC 
Driver (for testing databases)</strong></a>
  +          <a name="2.1.2 Operating Systems"><strong>2.1.2 Operating 
Systems</strong></a>
           </font>
         </td></tr>
         <tr><td>
           <blockquote>
  -                                    <p>If you intend to perform database testing, 
you will need a JDBC driver.</p>
  +                                    <p>JMeter has been tested and works under Unix 
(Solaris, Linux, etc) and Windows (98,
  +NT, 2000).  JMeter is a 100% Java application and should run correctly on any system
  +that has a compliant Java implementation.</p>
                               </blockquote>
           </p>
         </td></tr>
  @@ -150,12 +152,68 @@
                                                   <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
         <tr><td bgcolor="#525D76">
           <font color="#ffffff" face="arial,helvetica,sanserif">
  -          <a name="2.1.6 SAX XML Parser"><strong>2.1.6 SAX XML Parser</strong></a>
  +          <a name="2.1.3 JDBC Driver (for testing databases)"><strong>2.1.3 JDBC 
Driver (for testing databases)</strong></a>
           </font>
         </td></tr>
         <tr><td>
           <blockquote>
  -                </blockquote>
  +                                    <p>If you intend to perform database testing, 
you will need a JDBC driver
  +appropriate for you database.  You will need to <a href="classpath">add the 
classes</a> for your
  +driver to JMeter's classpath.</p>
  +                            </blockquote>
  +        </p>
  +      </td></tr>
  +      <tr><td><br/></td></tr>
  +    </table>
  +                                                <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
  +      <tr><td bgcolor="#525D76">
  +        <font color="#ffffff" face="arial,helvetica,sanserif">
  +          <a name="2.1.4 SAX XML Parser"><strong>2.1.4 SAX XML Parser</strong></a>
  +        </font>
  +      </td></tr>
  +      <tr><td>
  +        <blockquote>
  +                                    <p>JMeter comes packaged with Apache's Xerces 
XML parser.  There is no need to use any
  +other XML parser, but, it is possible to use any SAX2 compliant XML parser.  To do
  +so, include the classes for the third-party parser in <a href="classpath">JMeter's 
classpath</a>,
  +and update the <a href="configuring_jmeter.html">jmeter.properties</a> file with 
the full classname of the parser
  +implementation.
  +</p>
  +                            </blockquote>
  +        </p>
  +      </td></tr>
  +      <tr><td><br/></td></tr>
  +    </table>
  +                                                <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
  +      <tr><td bgcolor="#525D76">
  +        <font color="#ffffff" face="arial,helvetica,sanserif">
  +          <a name="2.1.5 SSL Encryption Support"><strong>2.1.5 SSL Encryption 
Support</strong></a>
  +        </font>
  +      </td></tr>
  +      <tr><td>
  +        <blockquote>
  +                                    <p>To test a web server using SSL encryption 
(https), JMeter requires that an
  +implementation of SSL be provided (such as Sun's JSSE).  JMeter will run fine 
without
  +these files, but cannot be used to test an HTTPS site unless such files are included
  +in <a href="classpath">JMeter's classpath</a>.  In addition, <a 
href="configuring_jmeter.html">jmeter.properties</a>
  +must be configured correctly to register the SSL Provider.</p>
  +                            </blockquote>
  +        </p>
  +      </td></tr>
  +      <tr><td><br/></td></tr>
  +    </table>
  +                                                <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
  +      <tr><td bgcolor="#525D76">
  +        <font color="#ffffff" face="arial,helvetica,sanserif">
  +          <a name="2.1.6 Email Support"><strong>2.1.6 Email Support</strong></a>
  +        </font>
  +      </td></tr>
  +      <tr><td>
  +        <blockquote>
  +                                    <p>JMeter has limited Email capabilities (it 
can send email based on test results).
  +To enable this support, it is necessary to add Sun's JavaMail packages to <a 
href="classpath">JMeter's classpath</a>.
  +</p>
  +                            </blockquote>
           </p>
         </td></tr>
         <tr><td><br/></td></tr>
  @@ -181,7 +239,10 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                                    <p>We recommend that most users run the latest 
stable release instead of a nightly build.</p>
  +                                    <p>We recommend that most users run the latest 
stable release instead of a nightly build.
  +To install from a release build, simply unzip the zip/tar file into the directory
  +where you want JMeter to be installed.  Provided you have a JDK correctly installed,
  +and JAVA_HOME environment variable set, there is nothing more to do.</p>
                               </blockquote>
           </p>
         </td></tr>
  @@ -195,7 +256,13 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                                    <p>If you do not mind working with beta-quality 
software, then you can download and run the <a href="">latest nightly build</a>.  </p>
  +                                    <p>If you do not mind working with beta-quality 
software, then you can download and run the
  +latest nightly build.  To install from a nightly build, it is necessary to compile 
and
  +build JMeter.  To do so, unzip the zip/tar file into the directory where you want 
JMeter
  +to be installed.  Open a shell or command prompt and change directory to JMeter's 
top
  +level directory.  Type "build install" to install JMeter.  Provided your system has
  +a JDK correctly installed and the JAVA_HOME environment variable set, JMeter should
  +install correctly.</p>
                               </blockquote>
           </p>
         </td></tr>
  @@ -204,12 +271,18 @@
                                                   <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
         <tr><td bgcolor="#525D76">
           <font color="#ffffff" face="arial,helvetica,sanserif">
  -          <a name="2.2.3 UNIX Instructions"><strong>2.2.3 UNIX 
Instructions</strong></a>
  +          <a name="2.3 Running JMeter"><strong>2.3 Running JMeter</strong></a>
           </font>
         </td></tr>
         <tr><td>
           <blockquote>
  -                                    <p />
  +                                    <p>To run JMeter, double-click on the 
jmeter.bat(Windows)/jmeter(Unix) file.  For most
  +systems this should be sufficient.  For some systems, it necessary to invoke this
  +file directly in a shell/command prompt (rather than double-clicking with the 
mouse). </p>
  +                                                <p>If JMeter does not start 
correctly, it may be because your system does not support
  +the commands contained in jmeter.bat/jmeter (ie Windows 98 systems).  In this case,
  + you will need to rewrite the jmeter.bat/jmeter file to explicitly include all
  + jar files found in JMeter's lib/ directory in JMeter's classpath.</p>
                               </blockquote>
           </p>
         </td></tr>
  @@ -218,12 +291,53 @@
                                                   <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
         <tr><td bgcolor="#525D76">
           <font color="#ffffff" face="arial,helvetica,sanserif">
  -          <a name="2.2.4 MS-Windows Instructions"><strong>2.2.4 MS-Windows 
Instructions</strong></a>
  +          <a name="2.3.1 JMeter's Classpath"><strong>2.3.1 JMeter's 
Classpath</strong></a>
           </font>
         </td></tr>
         <tr><td>
           <blockquote>
  -                </blockquote>
  +                                    <p>The jmeter.bat/jmeter file automatically 
adds all jar files found in JMeter's lib/
  +directory.  Because of this, if you need to add your own or third party jar files to
  +JMeter's classpath, it is only required that you copy them into JMeter's lib/
  +directory. </p>
  +                            </blockquote>
  +        </p>
  +      </td></tr>
  +      <tr><td><br/></td></tr>
  +    </table>
  +                                                <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
  +      <tr><td bgcolor="#525D76">
  +        <font color="#ffffff" face="arial,helvetica,sanserif">
  +          <a name="2.3.2 Using a Proxy Server"><strong>2.3.2 Using a Proxy 
Server</strong></a>
  +        </font>
  +      </td></tr>
  +      <tr><td>
  +        <blockquote>
  +                                    <p>If you are testing a system behind a 
firewall, you may need to tell JMeter to
  +use a proxy server.  To do so, use the jmeter.bat/jmeter file from a command line 
to start
  +JMeter, and include two options:<br />
  +-h [proxy server hostname or ip address]<br />
  +-p [proxy server port]<br />
  +<b>eg.</b>: jmeter -h my.proxy.server -p 8000
  +</p>
  +                            </blockquote>
  +        </p>
  +      </td></tr>
  +      <tr><td><br/></td></tr>
  +    </table>
  +                                                <table border="0" cellspacing="0" 
cellpadding="2" width="100%">
  +      <tr><td bgcolor="#525D76">
  +        <font color="#ffffff" face="arial,helvetica,sanserif">
  +          <a name="2.3.4 Non-GUI Mode"><strong>2.3.4 Non-GUI Mode</strong></a>
  +        </font>
  +      </td></tr>
  +      <tr><td>
  +        <blockquote>
  +                                    <p>To run JMeter without the GUI, invoke the 
nongui.bat/nongui.sh files from the
  +command line, with the -o option (-o [name of *.jmx file that describes entire test 
script]).<br />
  +<b>eg:</b> nongui -o my_test.jmx -h [proxy server] -p [proxy port]
  +</p>
  +                            </blockquote>
           </p>
         </td></tr>
         <tr><td><br/></td></tr>
  
  
  
  1.4       +98 -101   jakarta-jmeter/docs/usermanual/index.html
  
  Index: index.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/usermanual/index.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- index.html        19 Nov 2001 14:11:20 -0000      1.3
  +++ index.html        20 Feb 2002 02:51:42 -0000      1.4
  @@ -104,126 +104,123 @@
                                       <ul>
     <li><a href="intro.html">1. Introduction</a></li>
     <ul>
  -    <li><a href="intro.html#history">1.1 History</a></li>
  -    <li><a href="intro.html#future">1.2 The Future</a></li>
  +      <li><a href="intro.html#history">1.1 History</a></li>
  +      <li><a href="intro.html#future">1.2 The Future</a></li>
     </ul>
     <li><a href="get-started.html">2. Getting Started</a></li>
     <ul>
  -    <li><a href="get-started.html#requirements">2.1 Requirements</a></li>
  -    <ul>
  -      <li><a href="get-started.html#java_versions">2.1.1 Java Versions<!--: JDK1.2 
and higher (has not been tested w/JDK 1.4)--></a></li>
  -      <li><a href="get-started.html#os">2.1.2 Operating Systems<!--: any (has been 
tested on Windows 98, ...)--></a></li>
  -      <li><a href="get-started.html#jdbc">2.1.3 JDBC Driver (for testing 
databases)</a></li>
  -      <li><a href="get-started.html#xml">2.1.4 SAX XML Parser</a></li>
  -    </ul>
  -    <li><a href="get-started.html#install">2.2 Installation<!--(includes 
configuration)--></a></li>
  -    <ul>
  -      <li><a href="get-started.html#download_latest">2.2.1 Downloading the Latest 
Release</a></li>
  -      <li><a href="get-started.html#download_nightly">2.2.2 Downloading Nightly 
Builds<!-- (include build instructions)--></a></li>
  -      <li><a href="get-started.html#unix">2.2.3 UNIX Instructions</a></li>
  -      <li><a href="get-started.html#windows">2.2.4 MS-Windows Instructions</a></li>
  -    </ul>
  +      <li><a href="get-started.html#requirements">2.1 Requirements</a></li>
  +      <ul>
  +             <li><a href="get-started.html#java_versions">2.1.1 Java Versions<!--: 
JDK1.2 and higher (has not been tested w/JDK 1.4)--></a></li>
  +             <li><a href="get-started.html#os">2.1.2 Operating Systems<!--: any 
(has been tested on Windows 98, ...)--></a></li>
  +             <li><a href="get-started.html#jdbc">2.1.3 JDBC Driver (for testing 
databases)</a></li>
  +             <li><a href="get-started.html#xml">2.1.4 SAX XML Parser</a></li>
  +             <li><a href="get-started.html#ssl">2.1.5 SSL Encryption 
Support</a></li>
  +             <li><a href="get-started.html#mail">2.1.6 Email Support</a></li>
  +      </ul>
  +      <li><a href="get-started.html#install">2.2 Installation<!--(includes 
configuration)--></a></li>
  +      <ul>
  +             <li><a href="get-started.html#download_latest">2.2.1 Downloading the 
Latest Release</a></li>
  +             <li><a href="get-started.html#download_nightly">2.2.2 Downloading 
Nightly Builds<!-- (include build instructions)--></a></li>
  +      </ul>
  +      <li><a href="get-started.html#run">2.3 Running JMeter</a></li>
  +      <ul>
  +             <li><a href="get-started.html#classpath">2.3.1 JMeter's 
Classpath</a></li>
  +             <li><a href="get-started.html#proxy_server">2.3.2 Using a Proxy 
Server</a></li>
  +             <li><a href="get-started.html#cl_only">2.3.4 Non-GUI Mode</a></li>
  +     </ul>
     </ul>
     <li><a href="build-test-plan.html">3. Building a Test Plan</a></li>
     <ul>
  -    <li><a href="build-test-plan.html#add_remove">3.1 Adding and Removing 
Elements</a></li>
  -    <li><a href="build-test-plan.html#load_save">3.2 Loading and Saving 
Elements</a></li>
  -    <li><a href="build-test-plan.html#run">3.3 Running a Test Plan</a></li>
  +      <li><a href="build-test-plan.html#add_remove">3.1 Adding and Removing 
Elements</a></li>
  +      <li><a href="build-test-plan.html#load_save">3.2 Loading and Saving 
Elements</a></li>
  +      <li><a href="build-test-plan.html#run">3.3 Running a Test Plan</a></li>
     </ul>
     <li><a href="elements-test-plan.html">4. Elements of a Test Plan</a></li>
     <ul>
  -    <li><a href="thread-group.html">4.1 Thread Group</a></li>
  -    <li><a href="controller.html">4.2 Controllers</a></li>
  -    <ul>
  -      <li><a href="gen-controller.html">4.2.1 Generative Controllers</a></li>
  -      <ul>
  -        <li><a href="gen-controller.html#ftp_request">4.2.1.1 FTP Request</a></li>
  -        <li><a href="gen-controller.html#http_request">4.2.1.2 HTTP Request</a></li>
  -        <li><a href="gen-controller.html#jdbc_request">4.2.1.3 JDBC Request</a></li>
  -      </ul>
  -      <li><a href="logic-controller.html">4.2.2 Logic Controllers</a></li>
  -      <ul>
  -        <li><a href="logic-controller.html#interleave">4.2.2.1 Interleave 
Controller</a></li>
  -        <li><a href="logic-controller.html#loop">4.2.2.2 Loop Controller</a></li>
  -        <li><a href="logic-controller.html#mod_manager">4.2.2.3 Modification 
Manager</a></li>
  -        <li><a href="logic-controller.html#once_only">4.2.2.4 Once Only 
Controller</a></li>
  -        <li><a href="logic-controller.html#simple">4.2.2.5 Simple 
Controller</a></li>
  -      </ul>
  -    </ul>
  -    <li><a href="listener.html">4.3 Listeners</a></li>
  -    <ul>
  -      <li><a href="listener.html#graph">4.3.1 Graphs</a></li>
  -      <ul>
  -        <li><a href="listener.html#view_graph_tree">4.3.1.1 View Graph Tree</a></li>
  -        <li><a href="listener.html#graph_full_results">4.3.1.2 Graph Full 
Results</a></li>
  -        <li><a href="listener.html#graph_results">4.3.1.3 Graph Results</a></li>
  -        <li><a href="listener.html#spline">4.3.1.4 Spline Visualizer</a></li>
  -      </ul>
  -      <li><a href="listener.html#managers">4.3.2 Managers</a></li>
  -      <ul>
  -        <li><a href="listener.html#mod_manager">4.3.2.1 Modification 
Manager</a></li>
  -      </ul>
  -      <li><a href="listener.html#misc">4.3.3 Miscellaneous</a></li>
  -      <ul>
  -        <li><a href="listener.html#assertion_results">4.3.3.1 Assertion 
Results</a></li>
  -        <li><a href="listener.html#file_reporter">4.3.3.2 File Reporter</a></li>
  -        <li><a href="listener.html#view_results">4.3.3.3 View Results</a></li>
  -        <li><a href="listener.html#view_results_tree">4.3.3.4 View Result 
Tree</a></li>
  -      </ul>
  -    </ul>
  -    <li><a href="timer.html">4.4 Timers</a></li>
  -    <ul>
  -      <li><a href="timer.html#constant">4.4.1 Constant Timer</a></li>
  -      <li><a href="timer.html#gaussian">4.4.2 Gaussian Random Timer</a></li>
  -      <li><a href="timer.html#uniform">4.4.3 Uniform Random Timer</a></li>
  -    </ul>
  -
  -    <li><a href="assertion.html">4.5 Assertions</a></li>
  -
  -    <li><a href="ftp-config.html">4.6 FTP Configuration Elements</a></li>
  -    <ul>
  -      <li><a href="ftp-config.html#request_defaults">4.6.1 FTP Request 
Defaults</a></li>
  -    </ul>
  -
  -    <li><a href="http-config.html">4.7 HTTP Configuration Elements</a></li>
  -    <ul>
  -      <li><a href="http-config.html#auth_manager">4.7.1 HTTP Authorization 
Manager</a></li>
  -      <li><a href="http-config.html#cookie_manager">4.7.2 HTTP Cookie 
Manager</a></li>
  -      <li><a href="http-config.html#header_manager">4.7.3 HTTP Header 
Manager</a></li>
  -      <li><a href="http-config.html#proxy_server">4.7.4 HTTP Proxy Server</a></li>
  -      <li><a href="http-config.html#request_defaults">4.7.5 HTTP Request 
Defaults</a></li>
  -    </ul>
  -
  -    <li><a href="jdbc-config.html">4.8 JDBC Configuration Elements</a></li>
  -    <ul>
  -      <li><a href="jdbc-config.html#conn_pool">4.8.1 JDBC Database Connection Pool 
Defaults</a></li>
  -      <li><a href="jdbc-config.html#login">4.8.2 JDBC Database Login 
Defaults</a></li>
  -      <li><a href="jdbc-config.html#sql_query">4.8.3 JDBC SQL Query 
Defaults</a></li>
  -    </ul>
  +      <li><a href="thread-group.html">4.1 Thread Group</a></li>
  +      <li><a href="controller.html">4.2 Controllers</a></li>
  +      <ul>
  +             <li><a href="gen-controller.html">4.2.1 Generative Controllers</a></li>
  +             <ul>
  +               <li><a href="gen-controller.html#ftp_request">4.2.1.1 FTP 
Request</a></li>
  +               <li><a href="gen-controller.html#http_request">4.2.1.2 HTTP 
Request</a></li>
  +               <li><a href="gen-controller.html#jdbc_request">4.2.1.3 JDBC 
Request</a></li>
  +             </ul>
  +             <li><a href="logic-controller.html">4.2.2 Logic Controllers</a></li>
  +             <ul>
  +               <li><a href="logic-controller.html#interleave">4.2.2.1 Interleave 
Controller</a></li>
  +               <li><a href="logic-controller.html#loop">4.2.2.2 Loop 
Controller</a></li>
  +               <li><a href="logic-controller.html#mod_manager">4.2.2.3 Modification 
Manager</a></li>
  +               <li><a href="logic-controller.html#once_only">4.2.2.4 Once Only 
Controller</a></li>
  +               <li><a href="logic-controller.html#simple">4.2.2.5 Simple 
Controller</a></li>
  +             </ul>
  +      </ul>
  +      <li><a href="listener.html">4.3 Reporters</a></li>
  +      <ul>
  +               <li><a href="listener.html#view_graph_tree">4.3.1 View Graph 
Tree</a></li>
  +               <li><a href="listener.html#graph_full_results">4.3.2 Graph Full 
Results</a></li>
  +               <li><a href="listener.html#graph_results">4.3.3 Graph 
Results</a></li>
  +               <li><a href="listener.html#spline">4.3.4 Spline Visualizer</a></li>
  +               <li><a href="listener.html#assertion_results">4.3.5 Assertion 
Results</a></li>
  +               <li><a href="listener.html#file_reporter">4.3.6 File 
Reporter</a></li>
  +               <li><a href="listener.html#view_results">4.3.7 View Results</a></li>
  +               <li><a href="listener.html#view_results_tree">4.3.8 View Result 
Tree</a></li>
  +      </ul>
  +      <li><a href="timer.html">4.4 Timers</a></li>
  +      <ul>
  +             <li><a href="timer.html#constant">4.4.1 Constant Timer</a></li>
  +             <li><a href="timer.html#gaussian">4.4.2 Gaussian Random Timer</a></li>
  +             <li><a href="timer.html#uniform">4.4.3 Uniform Random Timer</a></li>
  +      </ul>
  +
  +      <li><a href="assertion.html">4.5 Assertions</a></li>
  +
  +      <li><a href="ftp-config.html">4.6 FTP Configuration Elements</a></li>
  +      <ul>
  +             <li><a href="ftp-config.html#request_defaults">4.6.1 FTP Request 
Defaults</a></li>
  +      </ul>
  +
  +      <li><a href="http-config.html">4.7 HTTP Configuration Elements</a></li>
  +      <ul>
  +             <li><a href="http-config.html#auth_manager">4.7.1 HTTP Authorization 
Manager</a></li>
  +             <li><a href="http-config.html#cookie_manager">4.7.2 HTTP Cookie 
Manager</a></li>
  +             <li><a href="http-config.html#header_manager">4.7.3 HTTP Header 
Manager</a></li>
  +             <li><a href="http-config.html#proxy_server">4.7.4 HTTP Proxy 
Server</a></li>
  +             <li><a href="http-config.html#request_defaults">4.7.5 HTTP Request 
Defaults</a></li>
  +      </ul>
  +
  +      <li><a href="jdbc-config.html">4.8 JDBC Configuration Elements</a></li>
  +      <ul>
  +             <li><a href="jdbc-config.html#conn_pool">4.8.1 JDBC Database 
Connection Pool Defaults</a></li>
  +             <li><a href="jdbc-config.html#login">4.8.2 JDBC Database Login 
Defaults</a></li>
  +             <li><a href="jdbc-config.html#sql_query">4.8.3 JDBC SQL Query 
Defaults</a></li>
  +      </ul>
     </ul>
   
     <li><a href="build-web-test-plan.html">5. Building a Web Test Plan</a></li>
  -    <ul>
  -      <li><a href="build-web-test-plan.htm#adding_users">5.1 Adding Users</a></li>
  -      <li><a href="build-web-test-plan.html#adding_defaults">5.2 Adding Default 
HTTP Request Properties</a></li>
  -      <li><a href="build-web-test-plan.html#adding_requests">5.3 Adding HTTP 
Requests</a></li>
  -      <li><a href="build-web-test-plan.html#adding_file_reporter">5.4 Adding a File 
Reporter to Store the Test Results</a></li>
  -      <li><a href="build-web-test-plan.html#saving">5.5 Saving the Test 
Plan</a></li>
  -      <li><a href="build-web-test-plan.html#running">5.6 Running the Test 
Plan</a></li>
  -    </ul>
  +      <ul>
  +             <li><a href="build-web-test-plan.htm#adding_users">5.1 Adding 
Users</a></li>
  +             <li><a href="build-web-test-plan.html#adding_defaults">5.2 Adding 
Default HTTP Request Properties</a></li>
  +             <li><a href="build-web-test-plan.html#adding_requests">5.3 Adding HTTP 
Requests</a></li>
  +             <li><a href="build-web-test-plan.html#adding_file_reporter">5.4 Adding 
a File Reporter to Store the Test Results</a></li>
  +             <li><a href="build-web-test-plan.html#saving">5.5 Saving the Test 
Plan</a></li>
  +             <li><a href="build-web-test-plan.html#running">5.6 Running the Test 
Plan</a></li>
  +      </ul>
   
     <li><a href="build-adv-web-test-plan.html">6. Building an Advanced Web Test 
Plan</a></li>
     <li><a href="build-db-test-plan.html">7. Building a Database Test Plan</a></li>
     <li><a href="build-ftp-test-plan.html">8. Building a FTP Test Plan</a></li>
     <li><a href="remote-test.html">9. Remote Testing</a></li>
  -  <li><a href="best-practices.html">10. Best Practices</a></li>
  +  <li><a href="configuring_jmeter.html">10. Configuring JMeter</a></li>
  +  <li><a href="best-practices.html">11. Best Practices</a></li>
     <ul>
  -    <li><a href="best-practices.html#limit_threads">10.1 [ALL] Limit the Number of 
Threads</a></li>
  -    <li><a href="best-practices.html#put_cookie_manager">10.2 [HTTP] Where to Put 
the Cookie Manager</a></li>
  -    <li><a href="best-practices.html#put_auth_manager">10.3 [HTTP] Where to Put the 
Authorization Manager</a></li>
  +      <li><a href="best-practices.html#limit_threads">11.1 [ALL] Limit the Number 
of Threads</a></li>
  +      <li><a href="best-practices.html#put_cookie_manager">11.2 [HTTP] Where to Put 
the Cookie Manager</a></li>
  +      <li><a href="best-practices.html#put_auth_manager">11.3 [HTTP] Where to Put 
the Authorization Manager</a></li>
     </ul>
  -  <li><a href="boss.html">11. Help! My boss wants me to load test our web 
app!</a></li>
  -  <li><a href="glossary.html">12. Glossary</a></li>
  +  <li><a href="boss.html">12. Help! My boss wants me to load test our web 
app!</a></li>
  +  <li><a href="glossary.html">13. Glossary</a></li>
   </ul>
                               </blockquote>
           </p>
  
  
  
  1.2       +29 -3     jakarta-jmeter/docs/usermanual/intro.html
  
  Index: intro.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/usermanual/intro.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- intro.html        28 Oct 2001 13:27:37 -0000      1.1
  +++ intro.html        20 Feb 2002 02:51:42 -0000      1.2
  @@ -101,7 +101,23 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                </blockquote>
  +                                    <p>
  +<b>Apache JMeter</b> is a 100% pure Java desktop application designed
  +       to load test client/server software
  +       (such as a web application).  It may be used
  +       to test performance both on static and dynamic
  +       resources (files, Servlets, Perl scripts, Java Objects, Data Bases and
  +       Queries, FTP Servers and more). It can be used to simulate a heavy
  +load on a server, network or object to test its strength or to analyze
  +overall performance under different load types.
  +</p>
  +                                                <p>
  +Additionally, JMeter can help you regression test your application by using
  +test scripts with assertions to validate that your application is returning the
  +results you expect.  These assertions use regular expressions to give you maximum
  +flexibility in designing these test.
  +</p>
  +                            </blockquote>
           </p>
         </td></tr>
         <tr><td><br/></td></tr>
  @@ -114,7 +130,12 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                </blockquote>
  +                                    <p>JMeter was originally written by Stefano 
Mazzocchi of the Apache Software
  +Foundation, primarily to test the performance of Apache JServ (a project that has
  +since been replaced by the Apache Tomcat project).  It has since been redesigned
  +and re-implemented to improve the UI and JMeter's functional testing capabilities.
  +</p>
  +                            </blockquote>
           </p>
         </td></tr>
         <tr><td><br/></td></tr>
  @@ -127,7 +148,12 @@
         </td></tr>
         <tr><td>
           <blockquote>
  -                </blockquote>
  +                                    <p>JMeter's future will hopefully see it's 
capabilities rapidly expand as developers
  +take advantage of JMeter's pluggable architecture.  The primary goal of further
  +development is to make JMeter the most useful regression testing tool as possible,
  +without compromising JMeter's load-testing capabilities.
  +</p>
  +                            </blockquote>
           </p>
         </td></tr>
         <tr><td><br/></td></tr>
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to