Author: sebb
Date: Fri Sep 19 19:43:41 2008
New Revision: 697317

URL: http://svn.apache.org/viewvc?rev=697317&view=rev
Log:
Add Random Variable config element; rearrange test elements into correct 
document sections

Added:
    jakarta/jmeter/trunk/docs/images/screenshots/random_variable.png   (with 
props)
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
   (with props)
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
   (with props)
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties
   (with props)
    jakarta/jmeter/trunk/xdocs/images/screenshots/random_variable.png   (with 
props)
Modified:
    jakarta/jmeter/trunk/bin/saveservice.properties
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/bin/saveservice.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/saveservice.properties?rev=697317&r1=697316&r2=697317&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/saveservice.properties (original)
+++ jakarta/jmeter/trunk/bin/saveservice.properties Fri Sep 19 19:43:41 2008
@@ -189,6 +189,7 @@
 RandomController=org.apache.jmeter.control.RandomController
 RandomOrderController=org.apache.jmeter.control.RandomOrderController
 RandomOrderControllerGui=org.apache.jmeter.control.gui.RandomOrderControllerGui
+RandomVariableConfig=org.apache.jmeter.config.RandomVariableConfig
 RecordController=org.apache.jmeter.protocol.http.control.gui.RecordController
 RecordingController=org.apache.jmeter.protocol.http.control.RecordingController
 ReflectionThreadGroup=org.apache.jmeter.threads.ReflectionThreadGroup

Added: jakarta/jmeter/trunk/docs/images/screenshots/random_variable.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/random_variable.png?rev=697317&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/docs/images/screenshots/random_variable.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java?rev=697317&view=auto
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
 (added)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
 Fri Sep 19 19:43:41 2008
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.jmeter.config;
+
+import java.text.DecimalFormat;
+import java.util.Random;
+
+import org.apache.commons.lang.math.NumberUtils;
+import org.apache.jmeter.engine.event.LoopIterationEvent;
+import org.apache.jmeter.engine.event.LoopIterationListener;
+import org.apache.jmeter.engine.util.NoThreadClone;
+import org.apache.jmeter.testbeans.TestBean;
+import org.apache.jmeter.threads.JMeterContextService;
+import org.apache.jmeter.threads.JMeterVariables;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.log.Logger;
+
+public class RandomVariableConfig extends ConfigTestElement
+    implements TestBean, LoopIterationListener, NoThreadClone
+{
+    private static final Logger log = LoggingManager.getLoggerForClass();
+
+    private static final long serialVersionUID = 233L;
+
+    private String minimumValue;
+
+    private String maximumValue;
+
+    private String variableName;
+    
+    private String outputFormat;
+
+    private String randomSeed;
+    
+    private boolean perThread;
+
+    // This class is not cloned per thread, so this is shared
+    private Random globalRandom = null;
+
+    // Used for per-thread/user numbers
+    private transient ThreadLocal perThreadRandom = new ThreadLocal() {
+            protected Object initialValue() {
+                init();
+                return new Random(getRandomSeedAsLong());
+            }};
+        
+    private int n;
+    private long minimum;
+    
+    /*
+     * nextInt(n) returns values in the range [0,n),
+     * so n must be set to max-min+1
+     */
+    private void init(){
+        final String minAsString = getMinimumValue();
+        minimum = NumberUtils.toLong(minAsString);
+        final String maxAsString = getMaximumValue();
+        long maximum = NumberUtils.toLong(maxAsString);
+        long rangeL=maximum-minimum+1; // This can overflow
+        if (minimum >= maximum){
+            log.error("maximum("+maxAsString+") must be > 
minimum"+minAsString+")");
+            n=0;// This is used as an error indicator
+            return;
+        }
+        if (rangeL > Integer.MAX_VALUE || rangeL <= 0){// check for overflow 
too
+            log.warn("maximum("+maxAsString+") - minimum"+minAsString+") must 
be <="+Integer.MAX_VALUE);
+            rangeL=Integer.MAX_VALUE;
+        }
+        n = (int)rangeL;
+    }
+    public void iterationStart(LoopIterationEvent iterEvent) {
+        Random randGen=null;
+        if (getPerThread()){
+            randGen = (Random) perThreadRandom.get();
+        } else {
+            synchronized(this){
+                if (globalRandom == null){
+                    init();
+                    globalRandom = new Random(getRandomSeedAsLong());
+                }
+                randGen=globalRandom;
+            }
+        }
+        if (n <=0){
+            return;
+        }
+       long nextRand = minimum + randGen.nextInt(n);
+       // Cannot use getThreadContext() as we are not cloned per thread
+       JMeterVariables variables = 
JMeterContextService.getContext().getVariables();
+       variables.put(getVariableName(), formatNumber(nextRand));
+    }
+
+    // Use format to create number; if it fails, use the default
+    private String formatNumber(long value){
+        String format = getOutputFormat();
+        if (format != null && format.length() > 0) {
+            try {
+                DecimalFormat myFormatter = new DecimalFormat(format);
+                return myFormatter.format(value);
+            } catch (NumberFormatException ignored) {
+            } catch (IllegalArgumentException ignored) {
+            }
+        }
+        return Long.toString(value);
+    }
+
+    /**
+     * @return the minValue
+     */
+    public synchronized String getMinimumValue() {
+        return minimumValue;
+    }
+
+    /**
+     * @param minValue the minValue to set
+     */
+    public synchronized void setMinimumValue(String minValue) {
+        this.minimumValue = minValue;
+    }
+
+    /**
+     * @return the maxvalue
+     */
+    public synchronized String getMaximumValue() {
+        return maximumValue;
+    }
+
+    /**
+     * @param maxvalue the maxvalue to set
+     */
+    public synchronized void setMaximumValue(String maxvalue) {
+        this.maximumValue = maxvalue;
+    }
+
+    /**
+     * @return the variableName
+     */
+    public synchronized String getVariableName() {
+        return variableName;
+    }
+
+    /**
+     * @param variableName the variableName to set
+     */
+    public synchronized void setVariableName(String variableName) {
+        this.variableName = variableName;
+    }
+
+    /**
+     * @return the randomSeed
+     */
+    public synchronized String getRandomSeed() {
+        return randomSeed;
+    }
+
+    /**
+     * @return the randomSeed as a long
+     */
+    private synchronized long getRandomSeedAsLong() {
+        long seed = 0;
+        if (randomSeed.length()==0){
+            seed = System.currentTimeMillis();
+        }  else {
+            try {
+                seed = Long.parseLong(randomSeed);
+            } catch (NumberFormatException e) {
+                seed = System.currentTimeMillis();
+                log.warn("Cannot parse seed "+e.getLocalizedMessage());
+            }
+        }
+        return seed;
+    }
+
+    /**
+     * @param randomSeed the randomSeed to set
+     */
+    public synchronized void setRandomSeed(String randomSeed) {
+        this.randomSeed = randomSeed;
+    }
+
+    /**
+     * @return the perThread
+     */
+    public synchronized boolean getPerThread() {
+        return perThread;
+    }
+
+    /**
+     * @param perThread the perThread to set
+     */
+    public synchronized void setPerThread(boolean perThread) {
+        this.perThread = perThread;
+    }
+    /**
+     * @return the outputFormat
+     */
+    public synchronized String getOutputFormat() {
+        return outputFormat;
+    }
+    /**
+     * @param outputFormat the outputFormat to set
+     */
+    public synchronized void setOutputFormat(String outputFormat) {
+        this.outputFormat = outputFormat;
+    }
+
+}

Propchange: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfig.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java?rev=697317&view=auto
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
 (added)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
 Fri Sep 19 19:43:41 2008
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.jmeter.config;
+
+import java.beans.PropertyDescriptor;
+
+import org.apache.jmeter.testbeans.BeanInfoSupport;
+
+public class RandomVariableConfigBeanInfo extends BeanInfoSupport {
+
+    // These group names must have .displayName properties
+    private static final String VARIABLE_GROUP = "variable"; // $NON-NLS-1$
+    private static final String OPTIONS_GROUP = "options"; // $NON-NLS-1$
+    private static final String RANDOM_GROUP = "random"; // $NON-NLS-1$
+
+    // These variable names must have .displayName properties and agree with 
the getXXX()/setXXX() methods
+    private static final String PER_THREAD = "perThread"; // $NON-NLS-1$
+    private static final String RANDOM_SEED = "randomSeed"; // $NON-NLS-1$
+    private static final String MAXIMUM_VALUE = "maximumValue"; // $NON-NLS-1$
+    private static final String MINIMUM_VALUE = "minimumValue"; // $NON-NLS-1$
+    private static final String OUTPUT_FORMAT = "outputFormat"; // $NON-NLS-1$
+    private static final String VARIABLE_NAME = "variableName"; // $NON-NLS-1$
+
+    public    RandomVariableConfigBeanInfo() {
+        super(RandomVariableConfig.class);
+
+        PropertyDescriptor p;
+
+        createPropertyGroup(VARIABLE_GROUP, new String[] { VARIABLE_NAME, 
OUTPUT_FORMAT, });
+
+        p = property(VARIABLE_NAME);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, ""); // $NON-NLS-1$
+
+        p = property(OUTPUT_FORMAT);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, ""); // $NON-NLS-1$
+
+        createPropertyGroup(RANDOM_GROUP,
+        new String[] { MINIMUM_VALUE, MAXIMUM_VALUE, RANDOM_SEED, });
+
+        p = property(MINIMUM_VALUE);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, "1"); // $NON-NLS-1$
+
+        p = property(MAXIMUM_VALUE);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, ""); // $NON-NLS-1$
+
+        p = property(RANDOM_SEED);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, ""); // $NON-NLS-1$
+
+        createPropertyGroup(OPTIONS_GROUP, new String[] { PER_THREAD, });
+
+        p = property(PER_THREAD);
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(NOT_EXPRESSION, Boolean.TRUE);
+        p.setValue(NOT_OTHER, Boolean.TRUE);
+        p.setValue(DEFAULT, Boolean.FALSE);
+    }
+}

Propchange: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigBeanInfo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties?rev=697317&view=auto
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties
 (added)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties
 Fri Sep 19 19:43:41 2008
@@ -0,0 +1,33 @@
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements.  See the NOTICE file distributed with
+#   this work for additional information regarding copyright ownership.
+#   The ASF licenses this file to You under the Apache License, Version 2.0
+#   (the "License"); you may not use this file except in compliance with
+#   the License.  You may obtain a copy of the License at
+# 
+#       http://www.apache.org/licenses/LICENSE-2.0
+# 
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+
+displayName=Random Variable
+# Groups
+variable.displayName=Output variable
+random.displayName=Configure the Random generator
+options.displayName=Options
+# fields
+minimumValue.displayName=Minimum Value
+minimumValue.shortDescription=Minimum Value
+maximumValue.displayName=Maximum Value
+maximumValue.shortDescription=Maximum Value
+variableName.displayName=Variable Name
+variableName.shortDescription=Variable Name
+outputFormat.displayName=Output Format
+outputFormat.shortDescription=Output Format, e.g. ####
+randomSeed.displayName=Seed for Random function
+randomSeed.shortDescription=Seed for Random function - long number (defaults 
to current time)
+perThread.displayName=Per Thread(User) ?
+perThread.shortDescription=Use independent random generators for each 
thread(user) ?

Propchange: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/config/RandomVariableConfigResources.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=697317&r1=697316&r2=697317&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Sep 19 19:43:41 2008
@@ -68,7 +68,7 @@
 
 <h3>Incompatible changes</h3>
 <p>
-The test elements "Save Results to a file" and "" are now shown as Listeners.
+The test elements "Save Results to a file" and "Generate Summary Results" are 
now shown as Listeners.
 They were previously shown as Post-Processors, even though they are 
implemented as Listeners.
 </p>
 <p>
@@ -102,6 +102,10 @@
 <li>Bug 45749 - Response Assertion does not work with a substring that is not 
a valid RE</li>
 <li>Mailer Visualizer documentation now agrees with code i.e. failure/success 
counts need to be exceeded.</li>
 <li>Mailer Visualizer now shows the failure count</li>
+<li>Fix incorrect GUI classifications: 
+"Save Results to a file" and "Generate Summary Results" are now shown as 
Listeners.
+"Counter" is now shown as a Configuration element.
+</li>
 </ul>
 
 <h3>Improvements</h3>
@@ -118,6 +122,7 @@
 <li>Added __escapeHtml() function: encodes text using Html-encoding.</li>
 <li>Allow spaces in JMeter path names (apply work-round for Java bug 
4496398)</li>
 <li>Bug 45694 - Support GZIP compressed logs</li>
+<li>Random Variable - new configuration element to create random numeric 
variables</li>
 </ul>
 
 <h3>Non-functional changes</h3>

Added: jakarta/jmeter/trunk/xdocs/images/screenshots/random_variable.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/random_variable.png?rev=697317&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/xdocs/images/screenshots/random_variable.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=697317&r1=697316&r2=697317&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Sep 19 
19:43:41 2008
@@ -2238,6 +2238,53 @@
 <p>For details of all the methods available on each of the above variables, 
please check the Javadoc</p>
 </component>
 
+<component name="Generate Summary Results" index="&sect-num;.3.18"  
width="358" height="131" screenshot="summary.png">
+    <description>This test element can be placed anywhere in the test plan.
+Generates a summary of the test run so far to the log file and/or 
+standard output. Both running and differential totals are shown.
+Output is generated every n seconds (default 3 minutes) on the appropriate
+time boundary, so that multiple test runs on the same time will be 
synchronised.
+The interval is defined by the property "summariser.interval" - see 
jmeter.properties.
+This element is mainly intended for batch (non-GUI) runs.
+The output looks like the following:
+<pre>
+label +   171 in  20.3s =    8.4/s Avg:  1129 Min:  1000 Max:  1250 Err:     0 
(0.00%)
+label +   263 in  31.3s =    8.4/s Avg:  1138 Min:  1000 Max:  1250 Err:     0 
(0.00%)
+label =   434 in  50.4s =    8.6/s Avg:  1135 Min:  1000 Max:  1250 Err:     0 
(0.00%)
+label +   263 in  31.0s =    8.5/s Avg:  1138 Min:  1000 Max:  1250 Err:     0 
(0.00%)
+label =   697 in  80.3s =    8.7/s Avg:  1136 Min:  1000 Max:  1250 Err:     0 
(0.00%)
+label +   109 in  12.4s =    8.8/s Avg:  1092 Min:    47 Max:  1250 Err:     0 
(0.00%)
+label =   806 in  91.6s =    8.8/s Avg:  1130 Min:    47 Max:  1250 Err:     0 
(0.00%)
+</pre>
+The "label" is the the name of the element.
+The "+" means that the line is a delta line, i.e. shows the changes since the 
last output.
+The "=" means that the line is a totals line, i.e. it shows the running total.
+Entries in the jmeter log file also include time-stamps.
+The example "806 in  91.6s =    8.8/s" means that there were 806 samples 
recorded in 91.6 seconds,
+and that works out at 8.8 samples per second.
+The Avg (Average), Min(imum) and Max(imum) times are in milliseonds.
+"Err" means number of errors (also shown as percentage).
+The last two lines will appear at the end of a test.
+They will not be synchronised to the appropriate time boundary.
+Note that the initial and final deltas may be for less than the interval (in 
the example above this is 30 seconds).
+The first delta will generally be lower, as JMeter synchronises to the 
interval boundary.
+The last delta will be lower, as the test will generally not finish on an 
exact interval boundary.
+<p>
+The label is used to group sample results together. 
+So if you have multiple Thread Groups and want to summarize across them all, 
then use the same label
+ - or add the summariser to the Test Plan (so all thread groups are in scope).
+Different summary groupings can be implemented
+by using suitable labels and adding the summarisers to appropriate parts of 
the test plan.
+</p>
+
+    </description>
+ <properties>
+ <property name="Name" required="Yes">Descriptive name for this element that 
is shown in the tree.
+ It appears as the "label" in the output. Details for all elements with the 
same label will be added together.
+ </property>
+ </properties>
+</component>
+
 <a href="#">^</a>
 
 </section>
@@ -2672,14 +2719,75 @@
 </properties>
 </component>
 
-<component name="Simple Config Element" index="&sect-num;.4.14"  width="393" 
height="245" screenshot="simple_config_element.png">
+<component name="Random Variable" index="&sect-num;.4.14"  width="411" 
height="306" screenshot="random_variable.png">
+<description>
+<p>
+The Random Variable Config Element is used to generate random numeric strings 
and store them in variable for use later.
+It's simpler than using <complink name="User Defined Variables"/> together 
with the __Random() function.
+</p>
+<p>
+The output variable is constructed by using the random number generator,
+and then the resulting number is formatted using the format string.
+The number is calculated using the formula 
<code>minimum+Random.nextInt(maximum-minimum+1)</code>.
+Random.nextInt() requires a positive integer.
+This means that maximum-minimum - i.e. the range - must be less than 
2147483647,
+however the minimum and maximum values can be any long values so long as the 
range is OK.
+</p>
+</description>
+
+<properties>
+  <property name="Name" required="Yes">Descriptive name for this element that 
is shown in the tree.</property>
+  <property name="Variable Name" required="Yes">The name of the variable in 
which to store the random string.</property>
+  <property name="Format String" required="No">The java.text.DecimalFormat 
format string to be used. 
+  For example "000" which will generate numbers with at least 3 digits, 
+  or "USER_000" which will generate output of the form USER_nnn. 
+  If not specified, the default is to generate the number using 
Long.toString()</property>
+  <property name="Minimum Value" required="Yes">The minimum value (long) of 
the generated random number.</property>
+  <property name="Maximum Value" required="Yes">The maximum value (long) of 
the generated random number.</property>
+  <property name="Random Seed" required="No">The seed for the random number 
generator. Default is the current time in milliseconds.</property>
+  <property name="Per Thread(User)?" required="Yes">If False, the generator is 
shared between all threads in the thread group.
+  If True, then each thread has its own random generator.</property>
+</properties>
+
+</component>
+
+<component name="Counter" index="&sect-num;.4.15"  width="399" height="244" 
screenshot="counter.png">
+<description><p>Allows the user to create a counter that can be referenced 
anywhere
+in the Thread Group.  The counter config lets the user configure a starting 
point, a maximum,
+and the increment.  The counter will loop from the start to the max, and then 
start over
+with the start, continuing on like that until the test is ended.  </p>
+<p>From version 2.1.2, the counter now uses a long to store the value, so the 
range is from -2^63 to 2^63-1.</p>
+</description>
+<properties>
+        <property name="Name" required="">Descriptive name for this element 
that is shown in the tree.</property>
+        <property name="Start" required="Yes">The starting number for the 
counter.  The counter will equal this
+        number during the first iteration.</property>
+        <property name="Increment" required="Yes">How much to increment the 
counter by after each
+        iteration.</property>
+        <property name="Maximum" required="No">If the counter exceeds the 
maximum, then it is reset to the Start value.
+        For versions after 2.2 the default is Long.MAX_VALUE (previously it 
was 0).
+        </property>
+        <property name="Format" required="No">Optional format, e.g. 000 will 
format as 001, 002 etc. 
+        This is passed to DecimalFormat, so any valid formats can be used.
+        If there is a problem interpreting the format, then it is ignored.
+    [The default format is generated using Long.toString()]
+        </property>
+        <property name="Reference Name" required="Yes">This controls how you 
refer to this value in other elements.  Syntax is
+        as in <a href="functions.html">user-defined values</a>: 
<code>$(reference_name}</code>.</property>
+        <property name="Track Counter Independently for each User" 
required="No">In other words, is this a global counter, or does each user get 
their
+        own counter?  If unchecked, the counter is global (ie, user #1 will 
get value "1", and user #2 will get value "2" on
+        the first iteration).  If checked, each user has an independent 
counter.</property>
+</properties>
+</component>
+
+<component name="Simple Config Element" index="&sect-num;.4.16"  width="393" 
height="245" screenshot="simple_config_element.png">
 <description><p>The Simple Config Element lets you add or override arbitrary 
values in samplers.  You can choose the name of the value
 and the value itself.  Although some adventurous users might find a use for 
this element, it's here primarily for developers as a basic
 GUI that they can use while developing new JMeter components.</p>
 </description>
 
 <properties>
-        <property name="Name" required="No">Descriptive name for this element 
that is shown in the tree. </property>
+        <property name="Name" required="Yes">Descriptive name for this element 
that is shown in the tree. </property>
   <property name="Parameter Name" required="Yes">The name of each parameter.  
These values are internal to JMeter's workings and
   are not generally documented.  Only those familiar with the code will know 
these values.</property>
   <property name="Parameter Value" required="Yes">The value to apply to that 
parameter.</property>
@@ -3352,35 +3460,6 @@
 </properties>
 </component>
 
-<component name="Counter" index="&sect-num;.7.6"  width="399" height="244" 
screenshot="counter.png">
-<description><p>Allows the user to create a counter that can be referenced 
anywhere
-in the Thread Group.  The counter config lets the user configure a starting 
point, a maximum,
-and the increment.  The counter will loop from the start to the max, and then 
start over
-with the start, continuing on like that until the test is ended.  </p>
-<p>From version 2.1.2, the counter now uses a long to store the value, so the 
range is from -2^63 to 2^63-1.</p>
-</description>
-<properties>
-        <property name="Name" required="">Descriptive name for this element 
that is shown in the tree.</property>
-        <property name="Start" required="Yes">The starting number for the 
counter.  The counter will equal this
-        number during the first iteration.</property>
-        <property name="Increment" required="Yes">How much to increment the 
counter by after each
-        iteration.</property>
-        <property name="Maximum" required="No">If the counter exceeds the 
maximum, then it is reset to the Start value.
-        For versions after 2.2 the default is Long.MAX_VALUE (previously it 
was 0).
-        </property>
-        <property name="Format" required="No">Optional format, e.g. 000 will 
format as 001, 002 etc. 
-        This is passed to DecimalFormat, so any valid formats can be used.
-        If there is a problem interpreting the format, then it is ignored.
-       [The default format is generated using Long.toString()]
-        </property>
-        <property name="Reference Name" required="Yes">This controls how you 
refer to this value in other elements.  Syntax is
-        as in <a href="functions.html">user-defined values</a>: 
<code>$(reference_name}</code>.</property>
-        <property name="Track Counter Independently for each User" 
required="No">In other words, is this a global counter, or does each user get 
their
-        own counter?  If unchecked, the counter is global (ie, user #1 will 
get value "1", and user #2 will get value "2" on
-        the first iteration).  If checked, each user has an independent 
counter.</property>
-</properties>
-</component>
-
 <component name="BeanShell PreProcessor" index="&sect-num;.7.7"  width="597" 
height="303" screenshot="beanshell_preprocessor.png">
 <description>
 <p>
@@ -3633,54 +3712,7 @@
    </properties>
 </component>
 
-<component name="Generate Summary Results" index="&sect-num;.8.4"  width="358" 
height="131" screenshot="summary.png">
-       <description>This test element can be placed anywhere in the test plan.
-Generates a summary of the test run so far to the log file and/or 
-standard output. Both running and differential totals are shown.
-Output is generated every n seconds (default 3 minutes) on the appropriate
-time boundary, so that multiple test runs on the same time will be 
synchronised.
-The interval is defined by the property "summariser.interval" - see 
jmeter.properties.
-This element is mainly intended for batch (non-GUI) runs.
-The output looks like the following:
-<pre>
-label +   171 in  20.3s =    8.4/s Avg:  1129 Min:  1000 Max:  1250 Err:     0 
(0.00%)
-label +   263 in  31.3s =    8.4/s Avg:  1138 Min:  1000 Max:  1250 Err:     0 
(0.00%)
-label =   434 in  50.4s =    8.6/s Avg:  1135 Min:  1000 Max:  1250 Err:     0 
(0.00%)
-label +   263 in  31.0s =    8.5/s Avg:  1138 Min:  1000 Max:  1250 Err:     0 
(0.00%)
-label =   697 in  80.3s =    8.7/s Avg:  1136 Min:  1000 Max:  1250 Err:     0 
(0.00%)
-label +   109 in  12.4s =    8.8/s Avg:  1092 Min:    47 Max:  1250 Err:     0 
(0.00%)
-label =   806 in  91.6s =    8.8/s Avg:  1130 Min:    47 Max:  1250 Err:     0 
(0.00%)
-</pre>
-The "label" is the the name of the element.
-The "+" means that the line is a delta line, i.e. shows the changes since the 
last output.
-The "=" means that the line is a totals line, i.e. it shows the running total.
-Entries in the jmeter log file also include time-stamps.
-The example "806 in  91.6s =    8.8/s" means that there were 806 samples 
recorded in 91.6 seconds,
-and that works out at 8.8 samples per second.
-The Avg (Average), Min(imum) and Max(imum) times are in milliseonds.
-"Err" means number of errors (also shown as percentage).
-The last two lines will appear at the end of a test.
-They will not be synchronised to the appropriate time boundary.
-Note that the initial and final deltas may be for less than the interval (in 
the example above this is 30 seconds).
-The first delta will generally be lower, as JMeter synchronises to the 
interval boundary.
-The last delta will be lower, as the test will generally not finish on an 
exact interval boundary.
-<p>
-The label is used to group sample results together. 
-So if you have multiple Thread Groups and want to summarize across them all, 
then use the same label
- - or add the summariser to the Test Plan (so all thread groups are in scope).
-Different summary groupings can be implemented
-by using suitable labels and adding the summarisers to appropriate parts of 
the test plan.
-</p>
-
-       </description>
- <properties>
- <property name="Name" required="Yes">Descriptive name for this element that 
is shown in the tree.
- It appears as the "label" in the output. Details for all elements with the 
same label will be added together.
- </property>
- </properties>
-</component>
-
-<component name="BeanShell PostProcessor"  index="&sect-num;.8.5"  width="597" 
height="303" screenshot="beanshell_postprocessor.png">
+<component name="BeanShell PostProcessor"  index="&sect-num;.8.4"  width="597" 
height="303" screenshot="beanshell_postprocessor.png">
 <description>
 <p>
 The BeanShell PreProcessor allows arbitrary code to be applied after taking a 
sample.
@@ -3726,7 +3758,7 @@
 <p>If the property <b>beanshell.postprocessor.init</b> is defined, this is 
used to load an initialisation file, which can be used to define methods etc 
for use in the BeanShell script.</p>
 </component>
 
-<component name="BSF PostProcessor" index="&sect-num;.8.6"  width="529" 
height="382" screenshot="bsf_postprocessor.png">
+<component name="BSF PostProcessor" index="&sect-num;.8.5"  width="529" 
height="382" screenshot="bsf_postprocessor.png">
 <description>
 <p>
 The BSF PostProcessor allows BSF script code to be applied after taking a 
sample.



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

Reply via email to