|
JMeter example source code file (HTTPSampleResult.java)
The JMeter HTTPSampleResult.java source code
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.jmeter.protocol.http.sampler;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.jmeter.protocol.http.util.HTTPConstants;
import org.apache.jmeter.samplers.SampleResult;
/**
* This is a specialisation of the SampleResult class for the HTTP protocol.
*
*/
public class HTTPSampleResult extends SampleResult {
private static final long serialVersionUID = 240L;
private String cookies = ""; // never null
private String method;
/**
* The raw value of the Location: header; may be null.
* This is supposed to be an absolute URL:
* <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30">RFC2616 sec14.30
* but is often relative.
*/
private String redirectLocation;
private String queryString = ""; // never null
private static final String HTTP_NO_CONTENT_CODE = Integer.toString(HttpURLConnection.HTTP_NO_CONTENT);
private static final String HTTP_NO_CONTENT_MSG = "No Content"; // $NON-NLS-1$
public HTTPSampleResult() {
super();
}
public HTTPSampleResult(long elapsed) {
super(elapsed, true);
}
/**
* Construct a 'parent' result for an already-existing result, essentially
* cloning it
*
* @param res
* existing sample result
*/
public HTTPSampleResult(HTTPSampleResult res) {
super(res);
method=res.method;
cookies=res.cookies;
queryString=res.queryString;
redirectLocation=res.redirectLocation;
}
public void setHTTPMethod(String method) {
this.method = method;
}
public String getHTTPMethod() {
return method;
}
public void setRedirectLocation(String redirectLocation) {
this.redirectLocation = redirectLocation;
}
public String getRedirectLocation() {
return redirectLocation;
}
/**
* Determine whether this result is a redirect.
*
* @return true iif res is an HTTP redirect response
*/
public boolean isRedirect() {
final String[] REDIRECT_CODES = { "301", "302", "303" }; // NOT 304!
String code = getResponseCode();
for (int i = 0; i < REDIRECT_CODES.length; i++) {
if (REDIRECT_CODES[i].equals(code)) {
return true;
}
}
return false;
}
/**
* Overrides version in Sampler data to provide more details
* <p>
* {@inheritDoc}
*/
@Override
public String getSamplerData() {
StringBuilder sb = new StringBuilder();
sb.append(method);
URL u = super.getURL();
if (u != null) {
sb.append(' ');
sb.append(u.toString());
sb.append("\n");
// Include request body if it is a post or put
if (HTTPConstants.POST.equals(method) || HTTPConstants.PUT.equals(method)) {
sb.append("\nPOST data:\n");
sb.append(queryString);
sb.append("\n");
}
if (cookies.length()>0){
sb.append("\nCookie Data:\n");
sb.append(cookies);
} else {
sb.append("\n[no cookies]");
}
sb.append("\n");
}
final String sampData = super.getSamplerData();
if (sampData != null){
sb.append(sampData);
}
return sb.toString();
}
/**
* @return cookies as a string
*/
public String getCookies() {
return cookies;
}
/**
* @param string
* representing the cookies
*/
public void setCookies(String string) {
if (string == null) {
cookies="";// $NON-NLS-1$
} else {
cookies = string;
}
}
/**
* Fetch the query string
*
* @return the query string
*/
public String getQueryString() {
return queryString;
}
/**
* Save the query string
*
* @param string
* the query string
*/
public void setQueryString(String string) {
if (string == null ) {
queryString="";// $NON-NLS-1$
} else {
queryString = string;
}
}
/**
* Overrides the method from SampleResult - so the encoding can be extracted from
* the Meta content-type if necessary.
*
* Updates the dataEncoding field if the content-type is found.
*
* @return the dataEncoding value as a String
*/
@Override
public String getDataEncodingWithDefault() {
if (getDataEncodingNoDefault() == null && getContentType().startsWith("text/html")){ // $NON-NLS-1$
byte[] bytes=getResponseData();
// get the start of the file
String prefix = new String(bytes,0,Math.min(bytes.length, 1000)).toLowerCase(java.util.Locale.ENGLISH);
// Extract the content-type if present
final String METATAG = "<meta http-equiv=\"content-type\" content=\""; // $NON-NLS-1$
int tagstart=prefix.indexOf(METATAG);
if (tagstart!=-1){
tagstart += METATAG.length();
int tagend = prefix.indexOf("\"", tagstart); // $NON-NLS-1$
if (tagend!=-1){
final String ct = new String(bytes,tagstart,tagend-tagstart);
setEncodingAndType(ct);// Update the dataEncoding
}
}
}
return super.getDataEncodingWithDefault(DEFAULT_HTTP_ENCODING);
}
public void setResponseNoContent(){
setResponseCode(HTTP_NO_CONTENT_CODE);
setResponseMessage(HTTP_NO_CONTENT_MSG);
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter HTTPSampleResult.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.