Author: milamber
Date: Wed Apr 13 22:27:51 2011
New Revision: 1091965
URL: http://svn.apache.org/viewvc?rev=1091965&view=rev
Log:
Change strategy to get response size (use CountingInputStream from Commons IO)
View Results Tree - Add new size fields: response headers and response body (in
bytes) - derived from Bug 43363 Size Assertion - Add response size scope (full,
headers, body, code, message) - derived from Bug 43363
Modified:
jakarta/jmeter/trunk/bin/jmeter.properties
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified: jakarta/jmeter/trunk/bin/jmeter.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/jmeter.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/jmeter.properties (original)
+++ jakarta/jmeter/trunk/bin/jmeter.properties Wed Apr 13 22:27:51 2011
@@ -243,17 +243,6 @@ log_level.jorphan=INFO
#log_config=logkit.xml
#---------------------------------------------------------------------------
-# HTTP common configuration
-#---------------------------------------------------------------------------
-
-# Response size calculate method
-# Include headers: add the headers size in total of response size
-# Use Content-Length: if web server uses a deflate/gzip module,
-# gets the value of Content-Length to get response size rather uncompressed
length
-#http.getbytes.include.headers=false
-#http.getbytes.use.contentlength=false
-
-#---------------------------------------------------------------------------
# HTTP Java configuration
#---------------------------------------------------------------------------
@@ -699,6 +688,14 @@ beanshell.server.file=../extras/startup.
# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1
+# Network response size calculation method
+# Use real size: number of bytes for response body return by webserver
+# (i.e. the network bytes received for response)
+# if set to false, the (uncompressed) response data size will used (default
before 2.4.1)
+# Include headers: add the headers size in real size
+#sampleresult.getbytes.body_real_size=true
+#sampleresult.getbytes.headers_size=true
+
# CookieManager behaviour - should cookies with null/empty values be deleted?
# Default is true. Use false to revert to original behaviour
#CookieManager.delete_null_cookies=true
Modified:
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
(original)
+++
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
Wed Apr 13 22:27:51 2011
@@ -34,7 +34,7 @@ import org.apache.jmeter.util.JMeterUtil
*/
public class SizeAssertion extends AbstractScopedAssertion implements
Serializable, Assertion {
- private static final long serialVersionUID = 233L;
+ private static final long serialVersionUID = 241L;
// * Static int to signify the type of logical comparitor to assert
public final static int EQUAL = 1;
@@ -53,6 +53,18 @@ public class SizeAssertion extends Abstr
private static final String SIZE_KEY = "SizeAssertion.size"; // $NON-NLS-1$
private static final String OPERATOR_KEY = "SizeAssertion.operator"; //
$NON-NLS-1$
+
+ private final static String TEST_FIELD = "Assertion.test_field"; //
$NON-NLS-1$
+
+ private final static String RESPONSE_NETWORK_SIZE =
"SizeAssertion.response_network_size"; // $NON-NLS-1$
+
+ private final static String RESPONSE_HEADERS =
"SizeAssertion.response_headers"; // $NON-NLS-1$
+
+ private final static String RESPONSE_BODY = "SizeAssertion.response_data";
// $NON-NLS-1$
+
+ private final static String RESPONSE_CODE = "SizeAssertion.response_code";
// $NON-NLS-1$
+
+ private final static String RESPONSE_MESSAGE =
"SizeAssertion.response_message"; // $NON-NLS-1$
/**
* Returns the result of the Assertion.
@@ -72,6 +84,14 @@ public class SizeAssertion extends Abstr
result.setFailureMessage("Error parsing variable name:
"+variableName+" value: "+value);
return result;
}
+ } else if (isTestFieldResponseHeaders()) {
+ resultSize = response.getHeadersSize();
+ } else if (isTestFieldResponseBody()) {
+ resultSize = response.getBodySize();
+ } else if (isTestFieldResponseCode()) {
+ resultSize = response.getResponseCode().length();
+ } else if (isTestFieldResponseMessage()) {
+ resultSize = response.getResponseMessage().length();
} else {
resultSize = response.getBytes();
}
@@ -168,4 +188,53 @@ public class SizeAssertion extends Abstr
}
return result ? "" : comparatorErrorMessage;
}
+
+ private void setTestField(String testField) {
+ setProperty(TEST_FIELD, testField);
+ }
+
+ public void setTestFieldNetworkSize(){
+ setTestField(RESPONSE_NETWORK_SIZE);
+ }
+
+ public void setTestFieldResponseHeaders(){
+ setTestField(RESPONSE_HEADERS);
+ }
+
+ public void setTestFieldResponseBody(){
+ setTestField(RESPONSE_BODY);
+ }
+
+ public void setTestFieldResponseCode(){
+ setTestField(RESPONSE_CODE);
+ }
+
+ public void setTestFieldResponseMessage(){
+ setTestField(RESPONSE_MESSAGE);
+ }
+
+ public String getTestField() {
+ return getPropertyAsString(TEST_FIELD);
+ }
+
+ public boolean isTestFieldNetworkSize(){
+ return RESPONSE_NETWORK_SIZE.equals(getTestField());
+ }
+
+ public boolean isTestFieldResponseHeaders(){
+ return RESPONSE_HEADERS.equals(getTestField());
+ }
+
+ public boolean isTestFieldResponseBody(){
+ return RESPONSE_BODY.equals(getTestField());
+ }
+
+ public boolean isTestFieldResponseCode(){
+ return RESPONSE_CODE.equals(getTestField());
+ }
+
+ public boolean isTestFieldResponseMessage(){
+ return RESPONSE_MESSAGE.equals(getTestField());
+ }
+
}
Modified:
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
(original)
+++
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
Wed Apr 13 22:27:51 2011
@@ -20,6 +20,7 @@ package org.apache.jmeter.assertions.gui
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
@@ -38,7 +39,22 @@ import org.apache.jorphan.gui.layout.Ver
*/
public class SizeAssertionGui extends AbstractAssertionGui implements
ActionListener {
- private static final long serialVersionUID = 240L;
+ private static final long serialVersionUID = 241L;
+
+ /** Radio button indicating that the body response should be tested. */
+ private JRadioButton responseBodyButton;
+
+ /** Radio button indicating that the network response size should be
tested. */
+ private JRadioButton responseNetworkButton;
+
+ /** Radio button indicating that the responseMessage should be tested. */
+ private JRadioButton responseMessageButton;
+
+ /** Radio button indicating that the responseCode should be tested. */
+ private JRadioButton responseCodeButton;
+
+ /** Radio button indicating that the headers should be tested. */
+ private JRadioButton responseHeadersButton;
private JTextField size;
@@ -69,6 +85,18 @@ public class SizeAssertionGui extends Ab
public void modifyTestElement(TestElement el) {
configureTestElement(el);
SizeAssertion assertion = (SizeAssertion) el;
+
+ if (responseHeadersButton.isSelected()) {
+ assertion.setTestFieldResponseHeaders();
+ } else if (responseBodyButton.isSelected()) {
+ assertion.setTestFieldResponseBody();
+ } else if (responseCodeButton.isSelected()) {
+ assertion.setTestFieldResponseCode();
+ } else if (responseMessageButton.isSelected()) {
+ assertion.setTestFieldResponseMessage();
+ } else {
+ assertion.setTestFieldNetworkSize();
+ }
assertion.setAllowedSize(size.getText());
assertion.setCompOper(getState());
saveScopeSettings(assertion);
@@ -81,6 +109,12 @@ public class SizeAssertionGui extends Ab
public void clearGui() {
super.clearGui();
+ responseNetworkButton.setSelected(true); // default
+ responseHeadersButton.setSelected(false);
+ responseBodyButton.setSelected(false);
+ responseCodeButton.setSelected(false);
+ responseMessageButton.setSelected(false);
+
size.setText(""); //$NON-NLS-1$
equalButton.setSelected(true);
notequalButton.setSelected(false);
@@ -98,6 +132,18 @@ public class SizeAssertionGui extends Ab
size.setText(assertion.getAllowedSize());
setState(assertion.getCompOper());
showScopeSettings(assertion);
+
+ if (assertion.isTestFieldResponseHeaders()) {
+ responseHeadersButton.setSelected(true);
+ } else if (assertion.isTestFieldResponseBody()) {
+ responseBodyButton.setSelected(true);
+ } else if (assertion.isTestFieldResponseCode()) {
+ responseCodeButton.setSelected(true);
+ } else if (assertion.isTestFieldResponseMessage()) {
+ responseMessageButton.setSelected(true);
+ } else {
+ responseNetworkButton.setSelected(true);
+ }
}
/**
@@ -139,6 +185,7 @@ public class SizeAssertionGui extends Ab
add(makeTitlePanel());
add(createScopePanel(true));
+ add(createFieldPanel());
// USER_INPUT
JPanel sizePanel = new JPanel();
@@ -153,6 +200,40 @@ public class SizeAssertionGui extends Ab
add(sizePanel);
}
+
+ /**
+ * Create a panel allowing the user to choose which response field should
be
+ * tested.
+ *
+ * @return a new panel for selecting the response field
+ */
+ private JPanel createFieldPanel() {
+ JPanel panel = new JPanel();
+
panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("assertion_resp_size_field")));
//$NON-NLS-1$
+
+ responseNetworkButton = new
JRadioButton(JMeterUtils.getResString("assertion_network_size")); //$NON-NLS-1$
+ responseHeadersButton = new
JRadioButton(JMeterUtils.getResString("assertion_headers")); //$NON-NLS-1$
+ responseBodyButton = new
JRadioButton(JMeterUtils.getResString("assertion_body_resp")); //$NON-NLS-1$
+ responseCodeButton = new
JRadioButton(JMeterUtils.getResString("assertion_code_resp")); //$NON-NLS-1$
+ responseMessageButton = new
JRadioButton(JMeterUtils.getResString("assertion_message_resp")); //$NON-NLS-1$
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(responseNetworkButton);
+ group.add(responseHeadersButton);
+ group.add(responseBodyButton);
+ group.add(responseCodeButton);
+ group.add(responseMessageButton);
+
+ panel.add(responseNetworkButton);
+ panel.add(responseHeadersButton);
+ panel.add(responseBodyButton);
+ panel.add(responseCodeButton);
+ panel.add(responseMessageButton);
+
+ responseNetworkButton.setSelected(true);
+
+ return panel;
+ }
private Box createComparatorButtonPanel() {
ButtonGroup group = new ButtonGroup();
Modified:
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
(original)
+++
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
Wed Apr 13 22:27:51 2011
@@ -227,6 +227,8 @@ public abstract class SamplerResultTab i
statsBuff.append(JMeterUtils.getResString("view_results_load_time")).append(sampleResult.getTime()).append(NL);
//$NON-NLS-1$
statsBuff.append(JMeterUtils.getResString("view_results_latency")).append(sampleResult.getLatency()).append(NL);
//$NON-NLS-1$
statsBuff.append(JMeterUtils.getResString("view_results_size_in_bytes")).append(sampleResult.getBytes()).append(NL);
//$NON-NLS-1$
+
statsBuff.append(JMeterUtils.getResString("view_results_size_headers_in_bytes")).append(sampleResult.getHeadersSize()).append(NL);
//$NON-NLS-1$
+
statsBuff.append(JMeterUtils.getResString("view_results_size_body_in_bytes")).append(sampleResult.getBodySize()).append(NL);
//$NON-NLS-1$
statsBuff.append(JMeterUtils.getResString("view_results_sample_count")).append(sampleResult.getSampleCount()).append(NL);
//$NON-NLS-1$
statsBuff.append(JMeterUtils.getResString("view_results_error_count")).append(sampleResult.getErrorCount()).append(NL);
//$NON-NLS-1$
statsDoc.insertString(statsDoc.getLength(),
statsBuff.toString(), null);
@@ -280,6 +282,8 @@ public abstract class SamplerResultTab i
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_load_time"),
sampleResult.getTime())); //$NON-NLS-1$
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_latency"),
sampleResult.getLatency())); //$NON-NLS-1$
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_size_in_bytes"),
sampleResult.getBytes())); //$NON-NLS-1$
+ resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_size_headers_in_bytes"),
sampleResult.getHeadersSize())); //$NON-NLS-1$
+ resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_size_body_in_bytes"),
sampleResult.getBodySize())); //$NON-NLS-1$
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_sample_count"),
sampleResult.getSampleCount())); //$NON-NLS-1$
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_error_count"),
sampleResult.getErrorCount())); //$NON-NLS-1$
resultModel.addRow(new
RowResult(JMeterUtils.getParsedLabel("view_results_response_code"),
responseCode)); //$NON-NLS-1$
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
Wed Apr 13 22:27:51 2011
@@ -65,16 +65,19 @@ anchor_modifier_title=HTML Link Parser
appearance=Look and Feel
argument_must_not_be_negative=The Argument must not be negative\!
assertion_assume_success=Ignore Status
+assertion_body_resp=Response Body
assertion_code_resp=Response Code
assertion_contains=Contains
assertion_equals=Equals
assertion_headers=Response Headers
assertion_matches=Matches
assertion_message_resp=Response Message
+assertion_network_size=Full Response
assertion_not=Not
assertion_pattern_match_rules=Pattern Matching Rules
assertion_patterns_to_test=Patterns to Test
assertion_resp_field=Response Field to Test
+assertion_resp_size_field=Response Size Field to Test
assertion_substring=Substring
assertion_text_resp=Text Response
assertion_textarea_label=Assertions\:
@@ -988,6 +991,8 @@ view_results_sample_count=Sample Count:
view_results_sample_start=Sample Start:
view_results_search_pane=Search pane
view_results_size_in_bytes=Size in bytes:
+view_results_size_body_in_bytes=Body size in bytes:
+view_results_size_headers_in_bytes=Headers size in bytes:
view_results_tab_assertion=Assertion result
view_results_tab_request=Request
view_results_tab_response=Response data
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
Wed Apr 13 22:27:51 2011
@@ -55,16 +55,19 @@ anchor_modifier_title=Analyseur de lien
appearance=Apparence
argument_must_not_be_negative=L'argument ne peut pas \u00EAtre n\u00E9gatif \!
assertion_assume_success=Ignorer le statut
+assertion_body_resp=Corps de r\u00E9ponse
assertion_code_resp=Code de r\u00E9ponse
assertion_contains=Contient (exp. r\u00E9guli\u00E8re)
assertion_equals=Est \u00E9gale \u00E0 (texte brut)
assertion_headers=Ent\u00EAtes de r\u00E9ponse
assertion_matches=Correspond \u00E0 (exp. r\u00E9guli\u00E8re)
assertion_message_resp=Message de r\u00E9ponse
+assertion_network_size=R\u00E9ponse compl\u00E8te
assertion_not=Inverser
assertion_pattern_match_rules=Type de correspondance du motif
assertion_patterns_to_test=Motifs \u00E0 tester
assertion_resp_field=Section de r\u00E9ponse \u00E0 tester
+assertion_resp_size_field=Taille \u00E0 v\u00E9rifier sur
assertion_substring=Contient (texte brut)
assertion_text_resp=Texte de r\u00E9ponse
assertion_textarea_label=Assertions \:
@@ -892,6 +895,8 @@ view_results_response_too_large_message=
view_results_sample_count=Compteur \u00E9chantillon \:
view_results_sample_start=Date d\u00E9but \u00E9chantillon \:
view_results_search_pane=Volet recherche
+view_results_size_body_in_bytes=Taille du corps en octets \:
+view_results_size_headers_in_bytes=Taille de l'ent\u00EAte en octets \:
view_results_size_in_bytes=Taille en octets \:
view_results_tab_assertion=R\u00E9sultats d'assertion
view_results_tab_request=Requ\u00EAte
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=1091965&r1=1091964&r2=1091965&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
Wed Apr 13 22:27:51 2011
@@ -43,7 +43,7 @@ import org.apache.log.Logger;
*/
public class SampleResult implements Serializable {
- private static final long serialVersionUID = 233L;
+ private static final long serialVersionUID = 241L;
// Needs to be accessible from Test code
static final Logger log = LoggingManager.getLoggerForClass();
@@ -93,6 +93,15 @@ public class SampleResult implements Ser
private static final SampleResult[] EMPTY_SR = new SampleResult[0];
private static final AssertionResult[] EMPTY_AR = new AssertionResult[0];
+
+ private static final boolean GETBYTES_BODY_REALSIZE =
+ JMeterUtils.getPropDefault("sampleresult.getbytes.body_real_size",
true); // $NON-NLS-1$
+
+ private static final boolean GETBYTES_HEADERS_SIZE =
+ JMeterUtils.getPropDefault("sampleresult.getbytes.headers_size",
true); // $NON-NLS-1$
+
+ private static final boolean GETBYTES_NETWORK_SIZE =
+ GETBYTES_HEADERS_SIZE && GETBYTES_BODY_REALSIZE ? true : false;
private SampleSaveConfiguration saveConfig;
@@ -181,6 +190,10 @@ public class SampleResult implements Ser
private int sampleCount = 1;
private int bytes = 0; // Allows override of sample size in case sampler
does not want to store all the data
+
+ private int headersSize = 0;
+
+ private int bodySize = 0;
/** Currently active threads in this thread group */
private volatile int groupThreads = 0;
@@ -1082,6 +1095,14 @@ public class SampleResult implements Ser
* @return byte count
*/
public int getBytes() {
+ if (GETBYTES_NETWORK_SIZE) {
+ int tmpSum = this.getHeadersSize() + this.getBodySize();
+ return tmpSum == 0 ? bytes : tmpSum;
+ } else if (GETBYTES_HEADERS_SIZE) {
+ return this.getHeadersSize();
+ } else if (GETBYTES_BODY_REALSIZE) {
+ return this.getBodySize();
+ }
return bytes == 0 ? responseData.length : bytes;
}
@@ -1192,4 +1213,37 @@ public class SampleResult implements Ser
public void removeSubResults() {
this.subResults = null;
}
+
+ /**
+ * Set the headers size in bytes
+ *
+ * @param size
+ */
+ public void setHeadersSize(int size) {
+ this.headersSize = size;
+ }
+
+ /**
+ * Get the headers size in bytes
+ *
+ * @return the headers size
+ */
+ public int getHeadersSize() {
+ return headersSize;
+ }
+
+ /**
+ * @return the body size in bytes
+ */
+ public int getBodySize() {
+ return bodySize == 0 ? responseData.length : bodySize;
+ }
+
+ /**
+ * @param bodySize the body size to set
+ */
+ public void setBodySize(int bodySize) {
+ this.bodySize = bodySize;
+ }
+
}
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
Wed Apr 13 22:27:51 2011
@@ -60,6 +60,7 @@ import org.apache.commons.httpclient.met
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.protocol.Protocol;
+import org.apache.commons.io.input.CountingInputStream;
import org.apache.jmeter.protocol.http.control.AuthManager;
import org.apache.jmeter.protocol.http.control.Authorization;
import org.apache.jmeter.protocol.http.control.CacheManager;
@@ -85,7 +86,7 @@ public class HTTPHC3Impl extends HTTPHCA
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final long serialVersionUID = 240L;
+ private static final long serialVersionUID = 241L;
private static final boolean canSetPreEmptive; // OK to set pre-emptive
auth?
@@ -244,15 +245,17 @@ public class HTTPHC3Impl extends HTTPHCA
res.setRequestHeaders(getConnectionHeaders(httpMethod));
// Request sent. Now get the response:
- InputStream instream = httpMethod.getResponseBodyAsStream();
+ InputStream instream = new
CountingInputStream(httpMethod.getResponseBodyAsStream());
if (instream != null) {// will be null for HEAD
try {
Header responseHeader =
httpMethod.getResponseHeader(HEADER_CONTENT_ENCODING);
if (responseHeader!= null &&
ENCODING_GZIP.equals(responseHeader.getValue())) {
- instream = new GZIPInputStream(instream);
+ InputStream tmpInput = new GZIPInputStream(instream);
// tmp inputstream needs to have a good counting
+ res.setResponseData(readResponse(res, tmpInput, (int)
httpMethod.getResponseContentLength()));
+ } else {
+ res.setResponseData(readResponse(res, instream, (int)
httpMethod.getResponseContentLength()));
}
- res.setResponseData(readResponse(res, instream, (int)
httpMethod.getResponseContentLength()));
} finally {
JOrphanUtils.closeQuietly(instream);
}
@@ -290,11 +293,11 @@ public class HTTPHC3Impl extends HTTPHCA
}
// record some sizes to allow HTTPSampleResult.getBytes() with
different options
- res.setContentLength((int) httpMethod.getResponseContentLength());
+ res.setBodySize(((CountingInputStream) instream).getCount());
res.setHeadersSize(calculateHeadersSize(httpMethod));
if (log.isDebugEnabled()) {
- log.debug("ResponseHeadersSize=" + res.getHeadersSize() + "
Content-Length=" + res.getContentLength()
- + " Total=" + (res.getHeadersSize() +
res.getContentLength()));
+ log.debug("Response headersSize=" + res.getHeadersSize() + "
bodySize=" + res.getBodySize()
+ + " Total=" + (res.getHeadersSize() +
res.getBodySize()));
}
// If we redirected automatically, the URL may have changed
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
Wed Apr 13 22:27:51 2011
@@ -112,7 +112,7 @@ public class HTTPHC4Impl extends HTTPHCA
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final long serialVersionUID = 240L;
+ private static final long serialVersionUID = 241L;
private static final String CONTEXT_METRICS = "jmeter_metrics"; // TODO
hack, to be removed later
@@ -308,10 +308,10 @@ public class HTTPHC4Impl extends HTTPHCA
// record some sizes to allow HTTPSampleResult.getBytes() with
different options
long totalBytes = metrics.getReceivedBytesCount();
res.setHeadersSize((int) headerBytes);
- res.setContentLength((int)(totalBytes - headerBytes));
+ res.setBodySize((int)(totalBytes - headerBytes));
if (log.isDebugEnabled()) {
- log.debug("ResponseHeadersSize=" + res.getHeadersSize() + "
Content-Length=" + res.getContentLength()
- + " Total=" + (res.getHeadersSize() +
res.getContentLength()));
+ log.debug("ResponseHeadersSize=" + res.getHeadersSize() + "
Content-Length=" + res.getBodySize()
+ + " Total=" + (res.getHeadersSize() +
res.getBodySize()));
}
// If we redirected automatically, the URL may have changed
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
Wed Apr 13 22:27:51 2011
@@ -34,6 +34,7 @@ import java.util.Map;
import java.util.Set;
import java.util.zip.GZIPInputStream;
+import org.apache.commons.io.input.CountingInputStream;
import org.apache.jmeter.protocol.http.control.AuthManager;
import org.apache.jmeter.protocol.http.control.Authorization;
import org.apache.jmeter.protocol.http.control.CacheManager;
@@ -62,7 +63,7 @@ public class HTTPJavaImpl extends HTTPAb
private static final boolean OBEY_CONTENT_LENGTH =
JMeterUtils.getPropDefault("httpsampler.obey_contentlength", false);
// $NON-NLS-1$
- private static final long serialVersionUID = 233L;
+ private static final long serialVersionUID = 241L;
private static final Logger log = LoggingManager.getLoggerForClass();
@@ -241,12 +242,13 @@ public class HTTPJavaImpl extends HTTPAb
// works OK even if ContentEncoding is null
boolean gzipped = ENCODING_GZIP.equals(conn.getContentEncoding());
-
+ InputStream instream = null;
try {
+ instream = new CountingInputStream(conn.getInputStream());
if (gzipped) {
- in = new BufferedInputStream(new
GZIPInputStream(conn.getInputStream()));
+ in = new BufferedInputStream(new GZIPInputStream(instream));
} else {
- in = new BufferedInputStream(conn.getInputStream());
+ in = new BufferedInputStream(instream);
}
} catch (IOException e) {
if (! (e.getCause() instanceof FileNotFoundException))
@@ -281,7 +283,9 @@ public class HTTPJavaImpl extends HTTPAb
}
in = new BufferedInputStream(conn.getErrorStream());
}
- return readResponse(res, in, contentLength);
+ byte[] responseData = readResponse(res, in, contentLength);
+ res.setBodySize(((CountingInputStream) instream).getCount());
+ return responseData;
}
/**
@@ -562,14 +566,12 @@ public class HTTPJavaImpl extends HTTPAb
res.setRedirectLocation(conn.getHeaderField(HEADER_LOCATION));
}
- // record some sizes to allow HTTPSampleResult.getBytes() with
different options
- String contentLength = conn.getHeaderField(HEADER_CONTENT_LENGTH);
- res.setContentLength(contentLength != null ?
Integer.parseInt(contentLength) : 0); // 0 to getBytes with responseData length
+ // record headers size to allow HTTPSampleResult.getBytes() with
different options
res.setHeadersSize(responseHeaders.replaceAll("\n", "\r\n") //
$NON-NLS-1$ $NON-NLS-2$
.length() + 2); // add 2 for a '\r\n' at end of headers
(before data)
if (log.isDebugEnabled()) {
- log.debug("ResponseHeadersSize=" + res.getHeadersSize() + "
Content-Length=" + res.getContentLength()
- + " Total=" + (res.getHeadersSize() +
res.getContentLength()));
+ log.debug("Response headersSize=" + res.getHeadersSize() + "
bodySize=" + res.getBodySize()
+ + " Total=" + (res.getHeadersSize() +
res.getBodySize()));
}
// If we redirected automatically, the URL may have changed
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
Wed Apr 13 22:27:51 2011
@@ -23,7 +23,6 @@ import java.net.URL;
import org.apache.jmeter.protocol.http.util.HTTPConstants;
import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.util.JMeterUtils;
/**
* This is a specialisation of the SampleResult class for the HTTP protocol.
@@ -32,23 +31,10 @@ import org.apache.jmeter.util.JMeterUtil
public class HTTPSampleResult extends SampleResult {
private static final long serialVersionUID = 240L;
-
- private static final boolean GETBYTES_INCLUDE_HEADERS =
- JMeterUtils.getPropDefault("http.getbytes.include.headers", false); //
$NON-NLS-1$
-
- private static final boolean GETBYTES_USE_CONTENTLENGTH =
- JMeterUtils.getPropDefault("http.getbytes.use.contentlength", false);
// $NON-NLS-1$
-
- private static final boolean GETBYTES_HEADERS_CONTENTLENGTH =
- GETBYTES_INCLUDE_HEADERS && GETBYTES_USE_CONTENTLENGTH ? true : false;
private String cookies = ""; // never null
private String method;
-
- private int headersSize = 0;
-
- private int contentLength = 0;
/**
* The raw value of the Location: header; may be null.
@@ -230,53 +216,4 @@ public class HTTPSampleResult extends Sa
setResponseMessage(HTTP_NO_CONTENT_MSG);
}
- /**
- * Set the headers size in bytes
- *
- * @param size
- */
- public void setHeadersSize(int size) {
- this.headersSize = size;
- }
-
- /**
- * Get the headers size in bytes
- *
- * @return the headers size
- */
- public int getHeadersSize() {
- return headersSize;
- }
-
- /**
- * @return the contentLength
- */
- public int getContentLength() {
- return contentLength == 0 ? super.getBytes() : contentLength;
- }
-
- /**
- * @param contentLength the contentLength to set
- */
- public void setContentLength(int contentLength) {
- this.contentLength = contentLength;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jmeter.samplers.SampleResult#getBytes()
- */
- @Override
- public int getBytes() {
- if (GETBYTES_HEADERS_CONTENTLENGTH) {
- return headersSize + contentLength;
- } else if (GETBYTES_INCLUDE_HEADERS) {
- return headersSize + super.getBytes();
- } else if (GETBYTES_USE_CONTENTLENGTH) {
- return contentLength;
- }
- return super.getBytes(); // Default
- }
-
}
Modified:
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
---
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
(original)
+++
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
Wed Apr 13 22:27:51 2011
@@ -39,6 +39,7 @@ public class SizeAssertionTest extends J
jmctx = JMeterContextService.getContext();
assertion = new SizeAssertion();
assertion.setThreadContext(jmctx);
+ assertion.setTestFieldResponseBody();
vars = new JMeterVariables();
jmctx.setVariables(vars);
sample0 = new SampleResult();
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Apr 13 22:27:51 2011
@@ -179,12 +179,14 @@ Fixed RMI startup to provide location of
<li>Bug 37156 - Formatted view of Request in Results Tree</li>
<li>Bug 49365 - Allow result set to be written to file in a path relative to
the loaded script</li>
<li>Bug 50579 - Error count is long, sample count is int. Changed sample count
to long.</li>
+<li>View Results Tree - Add new size fields: response headers and response
body (in bytes) - derived from Bug 43363</li>
</ul>
<h3>Timers, Assertions, Config, Pre- & Post-Processors</h3>
<ul>
<li>Bug 48015 - Proposal new icons for pre-processor, post-processor and
assertion elements</li>
<li>Bug 50962 - SizeAssertionGui validation prevents the use of variables for
the size</li>
+<li>Size Assertion - Add response size scope (full, headers, body, code,
message) - derived from Bug 43363</li>
</ul>
<h3>Functions</h3>
Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Apr 13
22:27:51 2011
@@ -333,13 +333,14 @@ The HttpClient version of the sampler su
#httpclient.socket.http.cps=0
#httpclient.socket.https.cps=0
</pre>
-<p><b>Method to calculate Response size</b><br></br>
+<p><b>Response size calculation</b><br></br>
Optional properties to allow change the method to get response size:<br></br>
-<ul><li>Include the headers length with the response data length
-<pre>http.getbytes.include.headers=false</pre></li>
-<li>Uses value of "Content-length" header (generally provide by web server),
rather than decompressed response data length<br></br>
-Useful when web server uses a deflate/gzip method to compress response data
-<pre>http.getbytes.use.contentlength=false</pre></li></ul>
+<ul><li>Gets the real network size in bytes for the body response
+<pre>sampleresult.getbytes.body_real_size=true</pre></li>
+<li>Add HTTP headers to full response size
+<pre>sampleresult.getbytes.headers_size=true</pre></li></ul>
+<note>Versions of JMeter before 2.4.1 returns only data response size
(uncompressed if request uses gzip/defate mode).
+<br></br>To return to settings before version 2.4.1, set the two properties to
false.</note>
</p>
<links>
<link href="test_plan.html#assertions">Assertion</link>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]