Author: sebb
Date: Sun Apr 30 15:27:31 2006
New Revision: 398454
URL: http://svn.apache.org/viewcvs?rev=398454&view=rev
Log:
Add active thread counts to result files
Modified:
jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml
Modified: jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties (original)
+++ jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties Sun Apr 30 15:27:31
2006
@@ -262,6 +262,7 @@
#jmeter.save.saveservice.bytes=false
#jmeter.save.saveservice.url=false
#jmeter.save.saveservice.filename=false
+#jmeter.save.saveservice.thread_counts=false
# Timestamp format
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
---
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
Sun Apr 30 15:27:31 2006
@@ -590,6 +590,7 @@
save_samplerdata=Save Sampler Data
save_subresults=Save Sub Results
save_success=Save Success
+save_threadcounts=Save Active Thread Counts
save_threadname=Save Thread Name
save_time=Save Elapsed Time
save_timestamp=Save Time Stamp
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
---
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
(original)
+++
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
Sun Apr 30 15:27:31 2006
@@ -35,6 +35,10 @@
* - setXyz(boolean)
* - saveXyz()
* - update SampleSaveConfigurationConverter to add new field
+ * - update SampleResultConverter and/or HTTPSampleConverter
+ * - update CSV routines in OldSaveService
+ * - update messages.properties to add save_xyz entry
+ *
*/
/**
* Holds details of which sample attributes to save.
@@ -43,12 +47,13 @@
* For each field XXX
* - methods have the signature "boolean saveXXX()"
* - a corresponding "void setXXX(boolean)" method
+ * - messages.properties contains the key save_XXX
*
* @author mstover
*
*/
public class SampleSaveConfiguration implements Cloneable, Serializable {
- static final long serialVersionUID = 3;
+ static final long serialVersionUID = 4;
// ---------------------------------------------------------------------
// PROPERTY FILE CONSTANTS
@@ -187,6 +192,8 @@
// <?xml-stylesheet type="text/xsl"
href="../extras/jmeter-results-detail-report_21.xsl"?>
private static final String XML_PI =
"jmeter.save.saveservice.xml_pi"; // $NON_NLS-1$
+ private static final String SAVE_THREAD_COUNTS =
"jmeter.save.saveservice.thread_counts"; // $NON_NLS-1$
+
// N.B. Remember to update the clone method when adding new variables.
// Initialise values from properties
@@ -200,6 +207,8 @@
private boolean url = _url, bytes = _bytes , fileName = _fileName;
+ private boolean threadCounts = _threadCounts;
+
private int assertionsResultsToSave = _assertionsResultsToSave;
private String delimiter = _delimiter;
@@ -241,6 +250,8 @@
private static final boolean _fileName;
+ private static final boolean _threadCounts;
+
private static final SimpleDateFormat _formatter;
/**
@@ -326,6 +337,7 @@
_xml = false;
}
+
_threadCounts=TRUE.equalsIgnoreCase(props.getProperty(SAVE_THREAD_COUNTS,
FALSE));
}
private static final SampleSaveConfiguration _static = new
SampleSaveConfiguration();
@@ -374,6 +386,7 @@
s.url = url;
s.bytes = bytes;
s.fileName = fileName;
+ s.threadCounts = threadCounts;
return s;
}
@@ -565,6 +578,14 @@
public void setAssertionResultsFailureMessage(boolean b) {
saveAssertionResultsFailureMessage = b;
}
+
+ public boolean saveThreadCounts() {
+ return threadCounts;
+ }
+
+ public void setThreadCounts(boolean save) {
+ this.threadCounts = save;
+ }
///////////////// End of standard field accessors /////////////////////
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
---
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
(original)
+++
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
Sun Apr 30 15:27:31 2006
@@ -46,6 +46,7 @@
import org.apache.jmeter.testelement.property.MapProperty;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jmeter.testelement.property.TestElementProperty;
+import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.util.NameUpdater;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.ListedHashTree;
@@ -93,6 +94,8 @@
private static final String CSV_TIME = "elapsed"; // $NON-NLS-1$
private static final String CSV_BYTES= "bytes"; // $NON-NLS-1$
+ private static final String CSV_THREAD_COUNT1 = "grpThreads"; //
$NON-NLS-1$
+ private static final String CSV_THREAD_COUNT2 = "allThreads"; //
$NON-NLS-1$
private static final String CSV_URL = "URL"; // $NON-NLS-1$
private static final String CSV_FILENAME = "Filename"; // $NON-NLS-1$
@@ -107,6 +110,11 @@
private OldSaveService() {
}
+
//////////////////////////////////////////////////////////////////////////////
+ // Start of CSV methods
+
+ // TODO - move to separate file? If so, remember that some of the
+
/**
* Make a SampleResult given a delimited string.
*
@@ -247,6 +255,13 @@
text.append(delim);
}
+ if (saveConfig.saveThreadCounts()) {
+ text.append(CSV_THREAD_COUNT1);
+ text.append(delim);
+ text.append(CSV_THREAD_COUNT2);
+ text.append(delim);
+ }
+
if (saveConfig.saveUrl()) {
text.append(CSV_URL);
text.append(delim);
@@ -270,21 +285,7 @@
return resultString;
}
- public static void saveSubTree(HashTree subTree, OutputStream writer)
throws IOException {
- Configuration config = (Configuration)
getConfigsFromTree(subTree).get(0);
- DefaultConfigurationSerializer saver = new
DefaultConfigurationSerializer();
-
- saver.setIndent(true);
- try {
- saver.serialize(writer, config);
- } catch (SAXException e) {
- throw new IOException("SAX implementation problem");
- } catch (ConfigurationException e) {
- throw new IOException("Problem using Avalon
Configuration tools");
- }
- }
-
- /**
+ /**
* Method will save aggregate statistics as CSV. For now I put it here.
* Not sure if it should go in the newer SaveService instead of here.
* if we ever decide to get rid of this class, we'll need to move this
@@ -307,7 +308,145 @@
}
}
- public static SampleResult getSampleResult(Configuration config) {
+ /**
+ * Convert a result into a string, where the fields of the result are
+ * separated by the default delimiter.
+ *
+ * @param sample
+ * the test result to be converted
+ * @return the separated value representation of the result
+ */
+ public static String resultToDelimitedString(SampleResult sample) {
+ return resultToDelimitedString(sample,
sample.getSaveConfig().getDelimiter());
+ }
+
+ /**
+ * Convert a result into a string, where the fields of the result are
+ * separated by a specified String.
+ *
+ * @param sample
+ * the test result to be converted
+ * @param delimiter
+ * the separation string
+ * @return the separated value representation of the result
+ */
+ public static String resultToDelimitedString(SampleResult sample, String
delimiter) {
+ StringBuffer text = new StringBuffer();
+ SampleSaveConfiguration saveConfig = sample.getSaveConfig();
+
+ if (saveConfig.saveTimestamp()) {
+ if (saveConfig.printMilliseconds()){
+ text.append(sample.getTimeStamp());
+ text.append(delimiter);
+ } else if (saveConfig.formatter() != null) {
+ String stamp = saveConfig.formatter().format(new
Date(sample.getTimeStamp()));
+ text.append(stamp);
+ text.append(delimiter);
+ }
+ }
+
+ if (saveConfig.saveTime()) {
+ text.append(sample.getTime());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveLabel()) {
+ text.append(sample.getSampleLabel());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveCode()) {
+ text.append(sample.getResponseCode());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveMessage()) {
+ text.append(sample.getResponseMessage());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveThreadName()) {
+ text.append(sample.getThreadName());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveDataType()) {
+ text.append(sample.getDataType());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveSuccess()) {
+ text.append(sample.isSuccessful());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveAssertionResultsFailureMessage()) {
+ String message = null;
+ AssertionResult[] results = sample.getAssertionResults();
+
+ if ((results != null) && (results.length > 0)) {
+ message = results[0].getFailureMessage();
+ }
+
+ if (message != null) {
+ text.append(message);
+ }
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveBytes()) {
+ text.append(sample.getBytes());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveThreadCounts()) {
+
text.append(JMeterContextService.getContext().getThreadGroup().getNumberOfThreads());
+ text.append(delimiter);
+ text.append(JMeterContextService.getNumberOfThreads());
+ text.append(delimiter);
+ }
+ if (saveConfig.saveUrl()) {
+ text.append(sample.getURL());
+ text.append(delimiter);
+ }
+
+ if (saveConfig.saveFileName()) {
+ text.append(sample.getResultFileName());
+ text.append(delimiter);
+ }
+
+ String resultString = null;
+ int size = text.length();
+ int delSize = delimiter.length();
+
+ // Strip off the trailing delimiter
+ if (size >= delSize) {
+ resultString = text.substring(0, size - delSize);
+ } else {
+ resultString = text.toString();
+ }
+ return resultString;
+ }
+
+ // End of CSV methods
+
//////////////////////////////////////////////////////////////////////////////////////////
+ // Start of Avalon methods
+
+ public static void saveSubTree(HashTree subTree, OutputStream writer)
throws IOException {
+ Configuration config = (Configuration)
getConfigsFromTree(subTree).get(0);
+ DefaultConfigurationSerializer saver = new
DefaultConfigurationSerializer();
+
+ saver.setIndent(true);
+ try {
+ saver.serialize(writer, config);
+ } catch (SAXException e) {
+ throw new IOException("SAX implementation problem");
+ } catch (ConfigurationException e) {
+ throw new IOException("Problem using Avalon
Configuration tools");
+ }
+ }
+
+ public static SampleResult getSampleResult(Configuration config) {
SampleResult result = new
SampleResult(config.getAttributeAsLong(TIME_STAMP, 0L),
config.getAttributeAsLong(
TIME, 0L));
@@ -460,120 +599,6 @@
config.addChild(getConfiguration(result.getResponseData()));
}
return config;
- }
-
- /**
- * Convert a result into a string, where the fields of the result are
- * separated by the default delimiter.
- *
- * @param sample
- * the test result to be converted
- * @return the separated value representation of the result
- */
- public static String resultToDelimitedString(SampleResult sample) {
- return resultToDelimitedString(sample,
sample.getSaveConfig().getDelimiter());
- }
-
- /**
- * Convert a result into a string, where the fields of the result are
- * separated by a specified String.
- *
- * @param sample
- * the test result to be converted
- * @param delimiter
- * the separation string
- * @return the separated value representation of the result
- */
- public static String resultToDelimitedString(SampleResult sample,
String delimiter) {
- StringBuffer text = new StringBuffer();
- SampleSaveConfiguration saveConfig = sample.getSaveConfig();
-
- if (saveConfig.saveTimestamp()) {
- if (saveConfig.printMilliseconds()){
- text.append(sample.getTimeStamp());
- text.append(delimiter);
- } else if (saveConfig.formatter() != null) {
- String stamp =
saveConfig.formatter().format(new Date(sample.getTimeStamp()));
- text.append(stamp);
- text.append(delimiter);
- }
- }
-
- if (saveConfig.saveTime()) {
- text.append(sample.getTime());
- text.append(delimiter);
- }
-
- if (saveConfig.saveLabel()) {
- text.append(sample.getSampleLabel());
- text.append(delimiter);
- }
-
- if (saveConfig.saveCode()) {
- text.append(sample.getResponseCode());
- text.append(delimiter);
- }
-
- if (saveConfig.saveMessage()) {
- text.append(sample.getResponseMessage());
- text.append(delimiter);
- }
-
- if (saveConfig.saveThreadName()) {
- text.append(sample.getThreadName());
- text.append(delimiter);
- }
-
- if (saveConfig.saveDataType()) {
- text.append(sample.getDataType());
- text.append(delimiter);
- }
-
- if (saveConfig.saveSuccess()) {
- text.append(sample.isSuccessful());
- text.append(delimiter);
- }
-
- if (saveConfig.saveAssertionResultsFailureMessage()) {
- String message = null;
- AssertionResult[] results =
sample.getAssertionResults();
-
- if ((results != null) && (results.length > 0)) {
- message = results[0].getFailureMessage();
- }
-
- if (message != null) {
- text.append(message);
- }
- text.append(delimiter);
- }
-
- if (saveConfig.saveBytes()) {
- text.append(sample.getBytes());
- text.append(delimiter);
- }
-
- if (saveConfig.saveUrl()) {
- text.append(sample.getURL());
- text.append(delimiter);
- }
-
- if (saveConfig.saveFileName()) {
- text.append(sample.getResultFileName());
- text.append(delimiter);
- }
-
- String resultString = null;
- int size = text.length();
- int delSize = delimiter.length();
-
- // Strip off the trailing delimiter
- if (size >= delSize) {
- resultString = text.substring(0, size - delSize);
- } else {
- resultString = text.toString();
- }
- return resultString;
}
public static Configuration getConfigForTestElement(String named,
TestElement item) {
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
---
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
(original)
+++
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
Sun Apr 30 15:27:31 2006
@@ -23,15 +23,13 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.net.URL;
import org.apache.jmeter.assertions.AssertionResult;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.SampleSaveConfiguration;
-//import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jorphan.util.Converter;
import org.apache.jorphan.util.JOrphanUtils;
-//import org.apache.log.Logger;
import com.thoughtworks.xstream.alias.ClassMapper;
import com.thoughtworks.xstream.converters.MarshallingContext;
@@ -41,10 +39,7 @@
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
- * @author mstover
- *
- * To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Generation - Code and Comments
+ * XStream Converter for the SampleResult class
*/
public class SampleResultConverter extends AbstractCollectionConverter {
//private static final Logger log = LoggingManager.getLoggerForClass();
@@ -66,13 +61,16 @@
protected static final String TAG_SAMPLER_DATA = "samplerData";
//$NON-NLS-1$
protected static final String TAG_RESPONSE_FILE = "responseFile";
//$NON-NLS-1$
- // samplerData attributes. Must be unique. Keep sorted.
+ // samplerData attributes. Must be unique. Keep sorted by string value.
private static final String ATT_BYTES = "by"; //$NON-NLS-1$
private static final String ATT_DATA_ENCODING = "de"; //$NON-NLS-1$
private static final String ATT_DATA_TYPE = "dt"; //$NON-NLS-1$
private static final String ATT_LABEL = "lb"; //$NON-NLS-1$
private static final String ATT_LATENCY = "lt"; //$NON-NLS-1$
+ private static final String ATT_ALL_THRDS = "na"; //$NON-NLS-1$
+ private static final String ATT_GRP_THRDS = "ng"; //$NON-NLS-1$
+
// N.B. Originally the response code was saved with the code "rs"
// but retrieved with the code "rc". Changed to always use "rc", but
// allow for "rs" when restoring values.
@@ -252,6 +250,12 @@
writer.addAttribute(ATT_DATA_ENCODING,
ConversionHelp.encode(res.getDataEncoding()));
if (save.saveBytes())
writer.addAttribute(ATT_BYTES,
String.valueOf(res.getBytes()));
+ if (save.saveThreadCounts()){// These cannot be restored
+ writer.addAttribute(ATT_GRP_THRDS,
+
String.valueOf(JMeterContextService.getContext().getThreadGroup().getNumberOfThreads()));
+ writer.addAttribute(ATT_ALL_THRDS,
+ String.valueOf(JMeterContextService.getNumberOfThreads()));
+ }
}
/**
@@ -348,6 +352,7 @@
res.setTimeStamp(Converter.getLong(reader.getAttribute(ATT_TIME_STAMP)));
res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY)));
res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES)));
+ // ATT_GRP_THRDS and ATT_ALL_THRDS are write only
}
protected void readFile(String resultFileName, SampleResult res) {
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
---
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
(original)
+++
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
Sun Apr 30 15:27:31 2006
@@ -37,10 +37,12 @@
private static final ReflectionProvider rp = new
JVM().bestReflectionProvider();
+ // N.B. These must agree with the names in SampleSaveConfiguration
private static final String TRUE = "true"; // $NON-NLS-1$
private static final String NODE_FILENAME = "fileName"; // $NON-NLS-1$
private static final String NODE_URL = "url"; // $NON-NLS-1$
private static final String NODE_BYTES = "bytes"; // $NON-NLS-1$
+ private static final String NODE_THREAD_COUNT = "threadCounts"; //
$NON-NLS-1$
static class MyWrapper extends MapperWrapper{
@@ -53,6 +55,7 @@
if (fieldName.equals(NODE_BYTES)) return false;
if (fieldName.equals(NODE_URL)) return false;
if (fieldName.equals(NODE_FILENAME)) return false;
+ if (fieldName.equals(NODE_THREAD_COUNT)) return false;
return true;
}
}
@@ -90,25 +93,19 @@
SampleSaveConfiguration prop = (SampleSaveConfiguration) obj;
// Save the new fields - but only if they are not the default
- if (prop.saveBytes())
- {
- writer.startNode(NODE_BYTES);
- writer.setValue(TRUE);
- writer.endNode();
- }
- if (prop.saveUrl())
- {
- writer.startNode(NODE_URL);
- writer.setValue(TRUE);
- writer.endNode();
- }
- if (prop.saveFileName())
- {
- writer.startNode(NODE_FILENAME);
- writer.setValue(TRUE);
- writer.endNode();
- }
+ createNode(writer,prop.saveBytes(),NODE_BYTES);
+ createNode(writer,prop.saveUrl(),NODE_URL);
+ createNode(writer,prop.saveFileName(),NODE_FILENAME);
+ createNode(writer,prop.saveThreadCounts(),NODE_THREAD_COUNT);
}
+
+ // Helper method to simplify marshall routine
+ private void createNode(HierarchicalStreamWriter writer, boolean save,
String node) {
+ if (!save) return;
+ writer.startNode(node);
+ writer.setValue(TRUE);
+ writer.endNode();
+ }
/*
* (non-Javadoc)
Modified: jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml Sun Apr 30 15:27:31 2006
@@ -86,6 +86,7 @@
<li>Counter Pre-Processor now supports formatted numbers</li>
<li>Add support for HEAD and PUT methods</li>
<li>Allow default HTTP implementation to be changed</li>
+<li>Optionally save active thread counts (group and all) to result files</li>
</ul>
<h4>Bug fixes:</h4>
Modified: jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml
URL:
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml Sun Apr 30
15:27:31 2006
@@ -244,6 +244,8 @@
<tr><td>dt</td><td>Data type</td></tr>
<tr><td>de</td><td>Data encoding</td></tr>
<tr><td>by</td><td>Bytes</td></tr>
+<tr><td>ng</td><td>Number of active threads in this group</td></tr>
+<tr><td>na</td><td>Number of active threads for all thread groups</td></tr>
</table>
<p>
Versions 2.1 and 2.1.1 of JMeter saved the Response Code as "rs", but read it
back expecting to find "rc".
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]