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 & 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 "&" and "<").</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><tag-name>TagStart(Attributes atts)</b>, and for every end tag, JMeter
calls
+
<b><tag-name>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 <property> 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 <property>
+
* tag is encountered.
+
*/</font>
+
public void property(String data)
+
{
+
+
if(data != null && data.trim().length() > 0)
+
{
+
config.putProperty(currentProperty,data);
+
currentProperty = null;
+
}
+
}
+
+
<font color="blue">/**
+
* Called by reflection when the <property> 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("<ConfigElement type=\"");
+
out.write(saved.getClass().getName());
+
out.write("\">\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(</ConfigElement>");
+
}
+
+
<font color="blue">/**
+
* Routine to write each property to xml.
+
*/</font>
+
private void writeProperty(Writer out,String key,Object value) throws
IOException
+
{
+
out.write("<property name=\"");
+
out.write(key);
+
out.write("\">\n");
+
JMeterHandler.writeObject(value,out);
+
out.write("\n</property>\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]>