You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2007/09/22 20:14:54 UTC
svn commit: r578467 - in /jakarta/jmeter: branches/rel-2-2/bin/testfiles/
branches/rel-2-2/src/components/org/apache/jmeter/visualizers/
branches/rel-2-2/src/core/org/apache/jmeter/samplers/
branches/rel-2-2/src/core/org/apache/jmeter/save/ branches/re...
Author: sebb
Date: Sat Sep 22 11:14:53 2007
New Revision: 578467
URL: http://svn.apache.org/viewvc?rev=578467&view=rev
Log:
Bug 43450 - add save/restore of error count; fix Calculator to use error count
Modified:
jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv
jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/SampleResult.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/OldSaveService.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/Calculator.java
jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv
jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/Calculator.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified: jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv (original)
+++ jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv Sat Sep 22 11:14:53 2007
@@ -1,19 +1,19 @@
-label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,grpThreads,allThreads,URL,Filename,SampleCount
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-If Test,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
+label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,grpThreads,allThreads,URL,Filename,SampleCount,ErrorCount
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+If Test,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
Modified: jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml Sat Sep 22 11:14:53 2007
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -8,7 +8,7 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -16,7 +16,7 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -24,105 +24,105 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="If Test" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="If Test" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
Modified: jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java Sat Sep 22 11:14:53 2007
@@ -364,6 +364,7 @@
statsBuff.append("Load time: ").append(res.getTime()).append(NL);
statsBuff.append("Size in bytes: ").append(res.getBytes()).append(NL);
statsBuff.append("Sample Count: ").append(res.getSampleCount()).append(NL);
+ statsBuff.append("Error Count: ").append(res.getErrorCount()).append(NL);
statsDoc.insertString(statsDoc.getLength(), statsBuff.toString(), null);
statsBuff = new StringBuffer(); //reset for reuse
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/SampleResult.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/SampleResult.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/SampleResult.java Sat Sep 22 11:14:53 2007
@@ -820,13 +820,41 @@
/**
* return the sample count. by default, the value is 1.
*
- * @return
+ * @return the count of samples
*/
public int getSampleCount() {
return sampleCount;
}
/**
+ * Returns the count of errors.
+ *
+ * @return 0 - or 1 if the sample failed
+ */
+ public int getErrorCount(){
+ return success ? 0 : 1;
+ }
+
+ public void setErrorCount(int i){// for reading from CSV files
+ // ignored currently
+ }
+ /*
+ * TODO: error counting needs to be sorted out after 2.3 final.
+ * At present the Statistical Sampler tracks errors separately
+ * It would make sense to move the error count here, but this would
+ * mean lots of changes.
+ * It's also tricky maintaining the count - it can't just be incremented/decremented
+ * when the success flag is set as this may be done multiple times.
+ * The work-round for now is to do the work in the StatisticalSampleResult,
+ * which overrides this method.
+ * Note that some JMS samplers also create samples with > 1 sample count
+ * Also the Transaction Controller probably needs to be changed to do
+ * proper sample and error accounting.
+ * The purpose of this work-round is to allow at least minimal support for
+ * errors in remote statistical batch mode.
+ *
+ */
+ /**
* In the event the sampler does want to pass back the actual contents, we
* still want to calculate the throughput. The bytes is the bytes of the
* response data.
@@ -840,7 +868,7 @@
/**
* return the bytes returned by the response.
*
- * @return
+ * @return number of bytes in response
*/
public int getBytes() {
return bytes == 0 ? responseData.length : bytes;
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java Sat Sep 22 11:14:53 2007
@@ -21,23 +21,37 @@
import java.io.Serializable;
/**
- * @author Lars Krog-Jensen
- * Created: 2005-okt-04
+ * Aggregates sample results for use by the Statistical remote batch mode.
+ * Samples are aggregated by the key defined by getKey().
+ * TODO: merge error count into parent class?
*/
public class StatisticalSampleResult extends SampleResult implements
Serializable {
- private static final long serialVersionUID = 23L;
+ private static final long serialVersionUID = 24L;
private int errorCount;
public StatisticalSampleResult(){// May be called by XStream
}
+ /**
+ * Allow OldSaveService to generate a suitable result when sample/error counts have been saved.
+ *
+ * @deprecated Needs to be replaced when multiple sample results are sorted out
+ *
+ * @param stamp
+ * @param elapsed
+ */
+ public StatisticalSampleResult(long stamp, long elapsed) {
+ super(stamp, elapsed);
+ }
+
public StatisticalSampleResult(SampleResult res) {
- // Copy data that is shared between samples:
+ // Copy data that is shared between samples (i.e. the key items):
setSampleLabel(res.getSampleLabel());
setThreadName(res.getThreadName());
+
setSuccessful(true); // Assume result is OK
setSampleCount(0); // because we add the sample count in later
}
@@ -51,6 +65,7 @@
// Add Error Counter
if (!res.isSuccessful()) {
errorCount++;
+ this.setSuccessful(false);
}
// Set start/end times
@@ -73,14 +88,27 @@
return getEndTime();
}
- public int getErrorCount() {
+ public int getErrorCount() {// Overrides SampleResult
return errorCount;
}
- public static String getKey(SampleEvent event) {
- String key = event.getResult().getSampleLabel() + "-"
- + event.getThreadGroup();
+ public void setErrorCount(int e) {// for reading CSV files
+ errorCount = e;
+ }
- return key;
+ /**
+ * Generates the key to be used for aggregating samples as follows:<br/>
+ * <code>sampleLabel</code> "-" <code>threadGroup</code>
+ *
+ * N.B. the key should agree with the fixed items that are saved in the sample.
+ *
+ * @param event sample event whose key is to be calculated
+ * @return the key to use for aggregating samples
+ */
+ public static String getKey(SampleEvent event) {
+ SampleResult result = event.getResult();
+ StringBuffer sb = new StringBuffer(80);
+ sb.append(result.getSampleLabel()).append("-").append(result.getThreadName());
+ return sb.toString();
}
}
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/OldSaveService.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/OldSaveService.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/OldSaveService.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/OldSaveService.java Sat Sep 22 11:14:53 2007
@@ -43,6 +43,7 @@
import org.apache.jmeter.assertions.AssertionResult;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.SampleSaveConfiguration;
+import org.apache.jmeter.samplers.StatisticalSampleResult;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.testelement.property.JMeterProperty;
@@ -101,6 +102,7 @@
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_SAMPLE_COUNT = "SampleCount"; // $NON-NLS-1$
+ private static final String CSV_ERROR_COUNT = "ErrorCount"; // $NON-NLS-1$
private static final String CSV_URL = "URL"; // $NON-NLS-1$
private static final String CSV_FILENAME = "Filename"; // $NON-NLS-1$
private static final String CSV_LATENCY = "Latency"; // $NON-NLS-1$
@@ -185,7 +187,11 @@
elapsed = Long.parseLong(text);
}
- result = new SampleResult(timeStamp, elapsed);
+ if (saveConfig.saveSampleCount()) {
+ result = new StatisticalSampleResult(timeStamp, elapsed);
+ } else {
+ result = new SampleResult(timeStamp, elapsed);
+ }
if (saveConfig.saveLabel()) {
field = LABEL;
@@ -260,10 +266,13 @@
result.setEncodingAndType(text);
}
- if (saveConfig.saveEncoding()) {
+ if (saveConfig.saveSampleCount()) {
field = CSV_SAMPLE_COUNT;
text = parts[i++];
result.setSampleCount(Integer.parseInt(text));
+ field = CSV_ERROR_COUNT;
+ text = parts[i++];
+ result.setErrorCount(Integer.parseInt(text));
}
@@ -378,6 +387,8 @@
if (saveConfig.saveSampleCount()) {
text.append(CSV_SAMPLE_COUNT);
text.append(delim);
+ text.append(CSV_ERROR_COUNT);
+ text.append(delim);
}
String resultString = null;
@@ -414,7 +425,9 @@
// Both these are needed in the list even though they set the same variable
headerLabelMethods.put(CSV_THREAD_COUNT1,new Functor("setThreadCounts"));
headerLabelMethods.put(CSV_THREAD_COUNT2,new Functor("setThreadCounts"));
+ // Both these are needed in the list even though they set the same variable
headerLabelMethods.put(CSV_SAMPLE_COUNT, new Functor("setSampleCount"));
+ headerLabelMethods.put(CSV_ERROR_COUNT, new Functor("setSampleCount"));
}
/**
@@ -592,8 +605,10 @@
text.append(delimiter);
}
- if (saveConfig.saveSampleCount()) {
+ if (saveConfig.saveSampleCount()) {// Need both sample and error count to be any use
text.append(sample.getSampleCount());
+ text.append(delimiter);
+ text.append(sample.getErrorCount());
text.append(delimiter);
}
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java Sat Sep 22 11:14:53 2007
@@ -64,6 +64,7 @@
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_ERROR_COUNT = "ec"; //$NON-NLS-1$
private static final String ATT_LABEL = "lb"; //$NON-NLS-1$
private static final String ATT_LATENCY = "lt"; //$NON-NLS-1$
@@ -251,6 +252,7 @@
writer.addAttribute(ATT_BYTES, String.valueOf(res.getBytes()));
if (save.saveSampleCount()){
writer.addAttribute(ATT_SAMPLE_COUNT, String.valueOf(res.getSampleCount()));
+ writer.addAttribute(ATT_ERROR_COUNT, String.valueOf(res.getErrorCount()));
}
if (save.saveThreadCounts()){// These cannot be restored
org.apache.jmeter.threads.ThreadGroup
@@ -362,6 +364,7 @@
res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY)));
res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES)));
res.setSampleCount(Converter.getInt(reader.getAttribute(ATT_SAMPLE_COUNT),1)); // default is 1
+ res.setErrorCount(Converter.getInt(reader.getAttribute(ATT_ERROR_COUNT),0)); // default is 0
// ATT_GRP_THRDS and ATT_ALL_THRDS are write only
}
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/Calculator.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/Calculator.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/Calculator.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/Calculator.java Sat Sep 22 11:14:53 2007
@@ -94,7 +94,7 @@
public void addSample(SampleResult res) {
addBytes(res.getBytes());
addValue(res.getTime(),res.getSampleCount());
- if (!res.isSuccessful()) errors++;
+ errors+=res.getErrorCount(); // account for multiple samples
if (startTime == 0){
startTime=res.getStartTime();
}
@@ -170,7 +170,7 @@
* calculates the average page size, which means divide the bytes by number
* of samples.
*
- * @return
+ * @return average page size
*/
public double getPageSize() {
if (count > 0 && bytes > 0) {
@@ -182,11 +182,11 @@
/**
* Throughput in bytes / second
*
- * @return
+ * @return throughput in bytes/second
*/
public double getBytesPerSecond() {
if (elapsedTime > 0) {
- return bytes / ((double) elapsedTime / 1000);
+ return bytes / ((double) elapsedTime / 1000); // 1000 = millisecs/sec
}
return 0.0;
}
@@ -194,10 +194,10 @@
/**
* Throughput in kilobytes / second
*
- * @return
+ * @return Throughput in kilobytes / second
*/
public double getKBPerSecond() {
- return getBytesPerSecond() / 1024;
+ return getBytesPerSecond() / 1024; // 1024=bytes per kb
}
}
Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Sat Sep 22 11:14:53 2007
@@ -40,7 +40,7 @@
<li>Fixup broken jmeter-server script</li>
<li>Bug 43364 - option to revert If Controller to pre 2.3RC3 behaviour</li>
<li>Bug 43449 - Statistical Remote mode does not handle Latency</li>
-<li>Bug 43450 (partial fix) - Allow SampleCount to be saved/restored from files</li>
+<li>Bug 43450 (partial fix) - Allow SampleCount and ErrorCount to be saved to/restored from files</li>
</ul>
<h4>Improvements</h4>
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv (original)
+++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv Sat Sep 22 11:14:53 2007
@@ -1,19 +1,19 @@
-label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,grpThreads,allThreads,URL,Filename,SampleCount
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1
-If Test,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
-Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1
-Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1
+label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,grpThreads,allThreads,URL,Filename,SampleCount,ErrorCount
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+Java 1,200,OK,Thread Group 1-1,text,true,,10,1,1,null,,1,0
+If Test,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,,1,1
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,,1,0
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml (original)
+++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml Sat Sep 22 11:14:53 2007
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -8,7 +8,7 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -16,7 +16,7 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ng="1" na="1">
+<sample s="true" lb="Java 1" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="10" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String">ResultData</responseData>
@@ -24,105 +24,105 @@
<samplerData class="java.lang.String">SamplerData</samplerData>
<null/>
</sample>
-<sample s="true" lb="If Test" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="If Test" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Loop" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Module" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="1" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
-<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ng="1" na="1">
+<sample s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" sc="1" ec="0" ng="1" na="1">
<responseHeader class="java.lang.String"></responseHeader>
<requestHeader class="java.lang.String"></requestHeader>
<responseData class="java.lang.String"/>
Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java (original)
+++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java Sat Sep 22 11:14:53 2007
@@ -364,6 +364,7 @@
statsBuff.append("Load time: ").append(res.getTime()).append(NL);
statsBuff.append("Size in bytes: ").append(res.getBytes()).append(NL);
statsBuff.append("Sample Count: ").append(res.getSampleCount()).append(NL);
+ statsBuff.append("Error Count: ").append(res.getErrorCount()).append(NL);
statsDoc.insertString(statsDoc.getLength(), statsBuff.toString(), null);
statsBuff = new StringBuffer(); //reset for reuse
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java Sat Sep 22 11:14:53 2007
@@ -834,6 +834,34 @@
}
/**
+ * Returns the count of errors.
+ *
+ * @return 0 - or 1 if the sample failed
+ */
+ public int getErrorCount(){
+ return success ? 0 : 1;
+ }
+
+ public void setErrorCount(int i){// for reading from CSV files
+ // ignored currently
+ }
+ /*
+ * TODO: error counting needs to be sorted out after 2.3 final.
+ * At present the Statistical Sampler tracks errors separately
+ * It would make sense to move the error count here, but this would
+ * mean lots of changes.
+ * It's also tricky maintaining the count - it can't just be incremented/decremented
+ * when the success flag is set as this may be done multiple times.
+ * The work-round for now is to do the work in the StatisticalSampleResult,
+ * which overrides this method.
+ * Note that some JMS samplers also create samples with > 1 sample count
+ * Also the Transaction Controller probably needs to be changed to do
+ * proper sample and error accounting.
+ * The purpose of this work-round is to allow at least minimal support for
+ * errors in remote statistical batch mode.
+ *
+ */
+ /**
* In the event the sampler does want to pass back the actual contents, we
* still want to calculate the throughput. The bytes is the bytes of the
* response data.
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java Sat Sep 22 11:14:53 2007
@@ -21,23 +21,37 @@
import java.io.Serializable;
/**
- * @author Lars Krog-Jensen
- * Created: 2005-okt-04
+ * Aggregates sample results for use by the Statistical remote batch mode.
+ * Samples are aggregated by the key defined by getKey().
+ * TODO: merge error count into parent class?
*/
public class StatisticalSampleResult extends SampleResult implements
Serializable {
- private static final long serialVersionUID = 23L;
+ private static final long serialVersionUID = 24L;
private int errorCount;
public StatisticalSampleResult(){// May be called by XStream
}
+ /**
+ * Allow OldSaveService to generate a suitable result when sample/error counts have been saved.
+ *
+ * @deprecated Needs to be replaced when multiple sample results are sorted out
+ *
+ * @param stamp
+ * @param elapsed
+ */
+ public StatisticalSampleResult(long stamp, long elapsed) {
+ super(stamp, elapsed);
+ }
+
public StatisticalSampleResult(SampleResult res) {
- // Copy data that is shared between samples:
+ // Copy data that is shared between samples (i.e. the key items):
setSampleLabel(res.getSampleLabel());
setThreadName(res.getThreadName());
+
setSuccessful(true); // Assume result is OK
setSampleCount(0); // because we add the sample count in later
}
@@ -51,6 +65,7 @@
// Add Error Counter
if (!res.isSuccessful()) {
errorCount++;
+ this.setSuccessful(false);
}
// Set start/end times
@@ -73,14 +88,27 @@
return getEndTime();
}
- public int getErrorCount() {
+ public int getErrorCount() {// Overrides SampleResult
return errorCount;
}
- public static String getKey(SampleEvent event) {
- String key = event.getResult().getSampleLabel() + "-"
- + event.getThreadGroup();
+ public void setErrorCount(int e) {// for reading CSV files
+ errorCount = e;
+ }
- return key;
+ /**
+ * Generates the key to be used for aggregating samples as follows:<br/>
+ * <code>sampleLabel</code> "-" <code>threadGroup</code>
+ *
+ * N.B. the key should agree with the fixed items that are saved in the sample.
+ *
+ * @param event sample event whose key is to be calculated
+ * @return the key to use for aggregating samples
+ */
+ public static String getKey(SampleEvent event) {
+ SampleResult result = event.getResult();
+ StringBuffer sb = new StringBuffer(80);
+ sb.append(result.getSampleLabel()).append("-").append(result.getThreadName());
+ return sb.toString();
}
}
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java Sat Sep 22 11:14:53 2007
@@ -43,6 +43,7 @@
import org.apache.jmeter.assertions.AssertionResult;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.SampleSaveConfiguration;
+import org.apache.jmeter.samplers.StatisticalSampleResult;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.testelement.property.JMeterProperty;
@@ -100,6 +101,7 @@
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_SAMPLE_COUNT = "SampleCount"; // $NON-NLS-1$
+ private static final String CSV_ERROR_COUNT = "ErrorCount"; // $NON-NLS-1$
private static final String CSV_URL = "URL"; // $NON-NLS-1$
private static final String CSV_FILENAME = "Filename"; // $NON-NLS-1$
private static final String CSV_LATENCY = "Latency"; // $NON-NLS-1$
@@ -184,7 +186,11 @@
elapsed = Long.parseLong(text);
}
- result = new SampleResult(timeStamp, elapsed);
+ if (saveConfig.saveSampleCount()) {
+ result = new StatisticalSampleResult(timeStamp, elapsed);
+ } else {
+ result = new SampleResult(timeStamp, elapsed);
+ }
if (saveConfig.saveLabel()) {
field = LABEL;
@@ -264,10 +270,13 @@
result.setEncodingAndType(text);
}
- if (saveConfig.saveEncoding()) {
+ if (saveConfig.saveSampleCount()) {
field = CSV_SAMPLE_COUNT;
text = parts[i++];
result.setSampleCount(Integer.parseInt(text));
+ field = CSV_ERROR_COUNT;
+ text = parts[i++];
+ result.setErrorCount(Integer.parseInt(text));
}
@@ -382,6 +391,8 @@
if (saveConfig.saveSampleCount()) {
text.append(CSV_SAMPLE_COUNT);
text.append(delim);
+ text.append(CSV_ERROR_COUNT);
+ text.append(delim);
}
String resultString = null;
@@ -418,7 +429,9 @@
// Both these are needed in the list even though they set the same variable
headerLabelMethods.put(CSV_THREAD_COUNT1,new Functor("setThreadCounts"));
headerLabelMethods.put(CSV_THREAD_COUNT2,new Functor("setThreadCounts"));
+ // Both these are needed in the list even though they set the same variable
headerLabelMethods.put(CSV_SAMPLE_COUNT, new Functor("setSampleCount"));
+ headerLabelMethods.put(CSV_ERROR_COUNT, new Functor("setSampleCount"));
}
/**
@@ -590,8 +603,10 @@
text.append(delimiter);
}
- if (saveConfig.saveSampleCount()) {
+ if (saveConfig.saveSampleCount()) {// Need both sample and error count to be any use
text.append(sample.getSampleCount());
+ text.append(delimiter);
+ text.append(sample.getErrorCount());
text.append(delimiter);
}
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java Sat Sep 22 11:14:53 2007
@@ -63,6 +63,7 @@
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_ERROR_COUNT = "ec"; //$NON-NLS-1$
private static final String ATT_LABEL = "lb"; //$NON-NLS-1$
private static final String ATT_LATENCY = "lt"; //$NON-NLS-1$
@@ -250,6 +251,7 @@
writer.addAttribute(ATT_BYTES, String.valueOf(res.getBytes()));
if (save.saveSampleCount()){
writer.addAttribute(ATT_SAMPLE_COUNT, String.valueOf(res.getSampleCount()));
+ writer.addAttribute(ATT_ERROR_COUNT, String.valueOf(res.getErrorCount()));
}
if (save.saveThreadCounts()){
writer.addAttribute(ATT_GRP_THRDS, String.valueOf(res.getGroupThreads()));
@@ -353,6 +355,7 @@
res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY)));
res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES)));
res.setSampleCount(Converter.getInt(reader.getAttribute(ATT_SAMPLE_COUNT),1)); // default is 1
+ res.setErrorCount(Converter.getInt(reader.getAttribute(ATT_ERROR_COUNT),0)); // default is 0
res.setGroupThreads(Converter.getInt(reader.getAttribute(ATT_GRP_THRDS)));
res.setAllThreads(Converter.getInt(reader.getAttribute(ATT_ALL_THRDS)));
}
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/Calculator.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/Calculator.java?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/Calculator.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/Calculator.java Sat Sep 22 11:14:53 2007
@@ -94,7 +94,7 @@
public void addSample(SampleResult res) {
addBytes(res.getBytes());
addValue(res.getTime(),res.getSampleCount());
- if (!res.isSuccessful()) errors++;
+ errors+=res.getErrorCount(); // account for multiple samples
if (startTime == 0){
startTime=res.getStartTime();
}
@@ -170,7 +170,7 @@
* calculates the average page size, which means divide the bytes by number
* of samples.
*
- * @return
+ * @return average page size
*/
public double getPageSize() {
if (count > 0 && bytes > 0) {
@@ -182,11 +182,11 @@
/**
* Throughput in bytes / second
*
- * @return
+ * @return throughput in bytes/second
*/
public double getBytesPerSecond() {
if (elapsedTime > 0) {
- return bytes / ((double) elapsedTime / 1000);
+ return bytes / ((double) elapsedTime / 1000); // 1000 = millisecs/sec
}
return 0.0;
}
@@ -194,10 +194,10 @@
/**
* Throughput in kilobytes / second
*
- * @return
+ * @return Throughput in kilobytes / second
*/
public double getKBPerSecond() {
- return getBytesPerSecond() / 1024;
+ return getBytesPerSecond() / 1024; // 1024=bytes per kb
}
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=578467&r1=578466&r2=578467&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat Sep 22 11:14:53 2007
@@ -58,7 +58,7 @@
<li>Fixup broken jmeter-server script</li>
<li>Bug 43364 - option to revert If Controller to pre 2.3RC3 behaviour</li>
<li>Bug 43449 - Statistical Remote mode does not handle Latency</li>
-<li>Bug 43450 (partial fix) - Allow SampleCount to be saved/restored from files</li>
+<li>Bug 43450 (partial fix) - Allow SampleCount and ErrorCount to be saved to/restored from files</li>
</ul>
<h4>Improvements</h4>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org