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="§-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="§-num;.4.14" width="393" height="245" screenshot="simple_config_element.png"> +<component name="Random Variable" index="§-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="§-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="§-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="§-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="§-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="§-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="§-num;.8.5" width="597" height="303" screenshot="beanshell_postprocessor.png"> +<component name="BeanShell PostProcessor" index="§-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="§-num;.8.6" width="529" height="382" screenshot="bsf_postprocessor.png"> +<component name="BSF PostProcessor" index="§-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]